如何使用 Python x Backlog API 批量检索数据
你好。
便当
是来自7层系统解决方案部门的Kawa。
现在是六月。雨天什么时候变成公众假期?
说到rain,前几天我在玩Backlog的API,我用它来进行内部任务管理,看起来它可以变得更高效,所以我想我应该写一篇关于它的文章作为备忘录。
它非常方便,因为它比使用 GUI 更容易获取数据。
本文提供了示例代码来获取用户、类别和问题的列表。
如果你想用curl快速完成,请参考下面我们开发部野队成员Mandai的文章。
使用环境
微软 Windows 11 专业版
Python 3.12.2
准备
准备API密钥问题,确认子域/项目ID,并使用Python请求模块。
■ API 密钥发行
积压 登录后,您可以通过右上角的个人资料图标 → [个人设置] → [API] 来发行 API 密钥。 (可能取决于账户权限)
○ 官方文档
■ 确认项目ID
进入项目页面的“Issues”时,检查并记下URL 中的子域和项目ID。
https://(子域名)/find/xxx?projectId=(ID)
未安装requests 模块
pip 安装请求
当你想获取用户列表时
如果您的公司使用像Baklog这样的管理工具,您可能遇到的问题之一就是帐户管理。 (日常工作忙的时候还要管理各种工具,挺累的。)如果能
一次性拿到用户列表,哪些账户在使用,哪些账户没有使用,一目了然,方便查看我们尝试按照官方文档的描述来获取信息。
此代码将参与特定项目的用户列表输出到 csv 文件。
import csv import requests # 获取用户 def fetch_users(api_key, project_id): url = f"https://<subdomain>/api/v2/projects/{project_id}/users" params = { "apiKey": api_key } response = requests.get(url, params=params) if response.status_code == 200: return response.json() else: print("无法获取用户:", response.text) return None # json 格式 def json_to_csv (json_data) : csv_data = [] for item in json_data: user_id = item['id'] user_name = item['name'] csv_data.append([user_id, user_name]) return csv_data # 输出到 csv 文件 def main() : api_key = ”<APIキーを記載> " project_id = "<输入项目 ID>" users = fetch_users(api_key, project_id) if users: csv_data = json_to_csv(users) with open('users.csv', mode='w', newline='') as file : csv_writer = csv.writer(file) csv_writer.writerow(['id', 'name']) # 打印标题行 csv_writer.writerows(csv_data) print("用户数据已输出到 users.csv") else : print("无法检索用户数据") if __name__ == "__main__": main()
执行后如果在代码所在目录下生成一个名为user.csv的文件就OK了。
id,姓名
1234,超越太郎5678
,超越花子
当你想要获取类别列表时
如果您将客户名称视为类别,您可能需要对其进行管理。
只需调整上面提到的用户获取代码就可以一次性获取所有内容,所以请尝试使用它。
import csv import requests # 获取类别 def fetch_categories(api_key, project_id): url = f"https://<subdomain>/api/v2/projects/{project_id}/categories" params = { "apiKey": api_key } response = requests.get(url, params=params) if response.status_code == 200: return response.json() else: print("无法获取类别:", response.text) return None # json 文件格式 def json_to_csv(json_data ): csv_data = [] for item in json_data:category_id = item['id']category_name = item['name'] csv_data.append([category_id,category_name]) return csv_data # 输出到 csv 文件 def main( ): api_key =“<APIキーを記載> " project_id = "<输入项目 ID>"categories = fetch_categories(api_key, project_id) ifcategories: csv_data = json_to_csv(categories) with open('categories.csv', mode='w', newline='') as file : csv_writer = csv.writer(file) csv_writer.writerow(['id', 'name']) # 打印标题行 csv_writer.writerows(csv_data) print("类别数据已输出到categories.csv") else : print("无法获取类别数据") if __name__ == "__main__": main()
执行后,在代码所在目录下生成一个名为categories.csv的文件就OK了。
id,姓名
123456,ABC Co., Ltd.654321
,DEF Co., Ltd.
获取特定类别中的问题列表
最后,这是获取特定类别中的问题列表的代码(我们公司用于客户分类)。
可以为作业指定多种项目,因此请随意自定义它们。
状态列表
下面的代码是一个例子,这次我们将通过指定以下条件来返回数据。
status_id
创建以来
创建直到
由于这次我们要指定一个时间段,因此我们还将使用预设的日期时间。
请注意,代码中的created_since/until是格式的,必须手动输入。
导入 json 导入 csv 导入 sys 从 datetime 导入 datetime、timedelta def fetch_issues(api_key、project_id、category_id、status_id、created_since、created_until) 导入请求: url = "https://<subdomain>/api/v2/issues" params = { "apiKey": api_key, "parentChild": 0, # 获取所有问题,包括父问题 "projectId[]": project_id, "createdSince":created_since, "createdUntil":created_until, "statusId[]": status_id, "categoryId[ ]": Category_id } response = requests.get(url, params=params) if response.status_code == 200: return response.json() else: print("无法获取问题:", response.text) return None def json_to_csv(json_data): csv_data = [] for item in json_data: 创建 = item['created'] issues_type = item['issueType']['name'] 摘要 = item['summary'] 受让人 = item['受让人' ]['name'] if item.get('受让人') else '' # 如果没有受让人则设置空字符串 csv_data.append([created, issues_type,summary,受让人]) return csv_data def main(): api_key = ”<APIキーを記載> " project_id = <输入项目ID>category_id = <输入类别ID> status_id = <状态ID> #指定日期和时间created_since = "2024-01-01"created_until = "2024-01-31"all_issues = [] saw_issue_ids = set() while True: json_data = fetch_issues(api_key,project_id,category_id,status_id,created_since,created_until) if not json_data:break # 将 json 转换为 csv 格式 csv_data = json_to_csv(json_data) # 在 json_data 中记录项目的问题 ID : issues_id = item['id'] if issues_id not in saw_issue_ids: all_issues.append(item) saw_issue_ids.add(issue_id) # 获取检索到的数据的最后创建日期,并将其设置为下一次请求的开始日期 if json_data : last_created = json_data[-1]['created'] last_created_date = datetime.strptime(last_created, "%Y-%m-%dT%H:%M:%SZ").date() create_until = (last_created_date - timedelta (天) =1)).strftime("%Y-%m-%d") else: break # 以csv格式输出 csv_writer = csv.writer(sys.stdout) csv_writer.writerow(['创建日期和时间', '分类' , 'Content', '分配给']) # 输出标题行 csv_writer.writerows(json_to_csv(all_issues)) if __name__ == "__main__": main()
- 输出示例
创建日期/时间、分类、内容、负责人2024-03-08T23
:23:50Z,已完成,关于测试用例,Beyond Hanako2024-03-08T23
:06:50Z,完成,xxx设置请求,Beyond Taro
完全的
我们使用Backlog 进行部门内部和部门之间的协作,以及与外部公司的项目管理此外,作为 Nulab 的官方合作伙伴,我们负责从 Backlog 实施到 API 协作开发的所有事务,因此请随时与我们联系。