背景
某个项目用了 linear.app 来做任务分配和跟踪,为了写周报,想利用 API 来自动获取任务信息。
准备工作
获取 API 密钥
在 linear.app 里,点击自己的头像->Settings,点击左边导航栏的 API
,在右边页面的 Personal API keys
下面 Create key
一下,然后记住。
安装 SDK
linear.app 的官方的 SDK 是 TypeScript 写的,但实际上 JavaScript 也是兼容的吧。官方给的安装 SDK 的命令就是下面这个:
1 2
| npm install @linear/sdk
|
GraphQL 介绍
linear.app 的公开的 API 都是用 GraphQL 搭建的,官方也建议用 GraphQL 来获取数据
实现代码
前方高能预警:调包侠再次上线!
核心实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| import { LinearClient } from '@linear/sdk'
const apiKey = 'lin_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; const linearClient = new LinearClient({ apiKey }); const graphQLClient = linearClient.client;
const queryLastWeekWork = ` query GetLastWeekWork($startDate: DateTime, $endDate: DateTime) { viewer { assignedIssues(filter: { state: { type: { eq: "completed" } } completedAt: { gte: $startDate lte: $endDate } }) { nodes { id title completedAt url creator { id } assignee { id } } } } } `;
function getLastWeekDates() { const today = new Date(); const lastWeekStart = new Date(today); lastWeekStart.setDate(today.getDate() - 7); const lastWeekEnd = new Date(today); lastWeekEnd.setDate(today.getDate()); return { startDate: lastWeekStart.toISOString(), endDate: lastWeekEnd.toISOString() }; }
async function generateWeeklyReport() { try { const { startDate, endDate } = getLastWeekDates(); const response = await graphQLClient.rawRequest(queryLastWeekWork); const tasks = response.data.viewer.assignedIssues.nodes; console.log('工作周报:\n'); tasks.forEach((task) => { console.log(`- [${task.title}](${task.url}) 完成于 ${task.completedAt}`); }); } catch (error) { console.error('生成工作周报时出错:', error); } finally { } }
|
把以上代码存为文件:linear.js
,再用 Node.Js 来跑一下:
周报出炉!