BacklogAPIを利用してファイルを添付する
目的
Backlog API を利用して課題にファイルを添付する。
Backlog API
BacklogAPIを利用して課題にファイルを添付するには、「添付ファイルの送信」/api/v2/space/attachment
を行い添付ファイルのIDを発行し、その後「課題コメントの追加」/api/v2/issues/:issueIdOrKey/comments
を呼び出す必要がある。
今回はファイルアップロード部分を実装したかっただけなので、適当なプロジェクトの適当な課題にファイルを添付する。
RubyとPythonで実装した。友人に依頼されて最初にRubyで書いたけど、友人はPython使ってるからPythonで書き直した。
Ruby版
使用したgem
rest-client, '2.1.0'
共通部分実装
require 'json' require 'uri' require 'rest-client' base_url = 'https://<組織名>.backlog.com' api_key = '<Backlogの個人設定で発行したAPIキー>'
プロジェクト一覧を取得する
ファイルを添付するための課題がある適当なプロジェクトIDを取得する。
response = RestClient.get( "#{base_url}/api/v2/projects", {params: { apiKey: api_key }}) project_id = JSON.parse(response.body)[0]['id'] puts "project_id: #{project_id}"
プロジェクトの課題を取得
プロジェクトIDからファイルを添付するための適当な課題IDを取得する。
response = RestClient.get( "#{base_url}/api/v2/issues", {params: {apiKey: api_key, projectId: [project_id]}}) issue_id = JSON.parse(response.body)[0]['id'] puts "issue_id: #{issue_id}"
ファイルをアップロード
ファイルをアップロードし、IDを発行する。
request = RestClient::Request.new( method: :post, url: "#{base_url}/api/v2/space/attachment?"\ "#{URI.encode_www_form({apiKey: api_key})}", payload: { multipart: true, file: File.new('/tmp/test_text_1.txt', 'rb') }) response = request.execute file_id = JSON.parse(response.body)['id'] puts "file_id: #{file_id}"
課題にファイルを添付
上記で取得した課題IDとファイルのIDを利用してコメントを作成する。
response = RestClient.post( "#{base_url}/api/v2/issues/#{issue_id}/comments?"\ "#{URI.encode_www_form( {apiKey: api_key, content: 'ファイル添付テスト', 'attachmentId[]' => [file_id]})}", {}) puts "code: #{response.code}" puts "body: #{response.body}"
Python版
使用したパッケージ
requests==2.22.0
共通部分実装
import urllib.parse import requests baseUrl = 'https://<組織名>.backlog.com' apiKey = '<Backlogの個人設定で発行したAPIキー>'
プロジェクト一覧を取得する
ファイルを添付するための課題がある適当なプロジェクトIDを取得する。
projectUrl = "%s/api/v2/projects?apiKey=%s" % (baseUrl, apiKey) response = requests.get(projectUrl).json() projectId = response[0]['id'] print("projectId: %s" % projectId)
プロジェクトの課題を取得
プロジェクトIDからファイルを添付するための適当な課題IDを取得する。
issueUrl = "%s/api/v2/issues?apiKey=%s&projectId[]=%s" % (baseUrl, apiKey, projectId) response = requests.get(issueUrl).json() issueId = response[0]['id'] print("issueId: %s" % issueId)
ファイルをアップロード
ファイルをアップロードし、IDを発行する。
filePath = '/tmp/test_text_1.txt' files = {'file': ('test_text_1.txt' ,open(filePath, 'rb'))} uploadUrl = "%s/api/v2/space/attachment?apiKey=%s" % (baseUrl, apiKey) response = requests.post( uploadUrl, files = files).json() attachmentId = response['id'] print("attachmentId: %s" % attachmentId)
課題にファイルを添付
上記で取得した課題IDとファイルのIDを利用してコメントを作成する。
content = '添付コメント' commentUrl = "%s/api/v2/issues/%s/comments?apiKey=%s&attachmentId[]=%s&content=%s" % (baseUrl, issueId, apiKey, attachmentId, urllib.parse.quote(content)) response = requests.post(commentUrl).json() print("response: %s" % response)