1. はじめに
社内ではSCMとしてgithubクローンの一つであるGitBucketを利用しています。最近、複数リポジトリのIssuesの状況を一覧で把握する必要が生じました。そこでGitBucketのWeb APIでIssueの一覧を取得してExcelファイルに出力するPythonプログラムを作ってみました。
今回はGitBucketのWeb APIを呼び出してIssueを取得し、jsonファイルに保存するところまでを説明したいと思います。PythonでExcelを操作する方法は次回説明する予定です。
なお、Pythonを使ったのは単純に簡単だったからです。
2. GitBucketのAPIを利用してIssuesを取得するプログラム
GitBucketは外部から操作可能なWeb APIを用意しています。未実装や多少の違いはありますが、だいたいgithubのAPIと互換性があるように設計されています。
# -*- coding: utf-8 -*-
import os
import requests
import codecs
# get issues from repository
def get_issues_from_gitbucket(url, token):
# ★ポイント1
requestHeader = {'Authorization' : 'token ' + token}
return requests.get(url, headers = requestHeader)
# save file with utf-8
def save_file(file_path, data):
# ★ポイント2
f_out = codecs.open(file_path, 'w', 'utf-8')
f_out.write(unicode(data,'utf-8'))
f_out.close()
# main
if __name__ == "__main__":
# get information from environment
# ★ポイント3
url = os.getenv("ISSUES_URL")
token = os.getenv("GITBUCKET_TOKEN")
file_path = os.getenv("SAVE_FILE")
response = get_issues_from_gitbucket(url, token)
save_file(file_path, response.content)
★ポイント1
Web APIの呼び出しOAUTH TokenをHTTPヘッダに設定して認証を行います。
PythonのHTTPクライアントライブラリであるrequests
を使うと簡単にHTTPヘッダを設定することができます。requests
の説明については「Pythonでマイクロサービス(概要編)」を参照ください。
今回はAuthorization
ヘッダがあればいいのでこれを設定します。値は「token API用のtoken
(tokenの後に半角スペースが必要)」です。
★ポイント2
レスポンスはjsonデータです。文字化けしないようにunicodeでエンコードしてutf-8としてファイルに保存します。
★ポイント3
API用のtokenをソースコードに記述するのはセキュリティ上問題があるため、環境変数から取得するようにします。また、GitBucketのAPIのURLや保存するファイル名も外部から変更できるように、こちらも環境変数を参照するようにしました。
@echo off
set ISSUES_URL=http://localhost:8888/api/v3/repos/demouser/testrepo/issues?state=closed
set GITBUCKET_TOKEN=【gitbucketで生成したAPI用のtoken】
set SAVE_FILE=issueslist.json
環境変数(ISSUES_URL)にIssueの一覧を取得するWeb APIのURLを設定します。APIの説明はgithubのページ「https://developer.github.com/v3/issues/#list-issues-for-a-repository 」にリンクされています。
githubのAPI説明を見るとパラメータのstate
はopen(default)、closed、all
の3つになっていますが、**残念ながらGitBucketにall
は実装されていません。**全てのIssueを取得するにはstate=open
とstate=closed
の2つを実行する必要があります。
ちなみにサンプルは「demouserのtestrepoリポジトリからクローズしたIssueを取得する」ものです。
なお実行時にProxyの問題が発生した場合、以下を参考にしてみてください。
3. (補足説明)GitBucketでAPI用のtokenを生成する
PrivateなリポジトリにアクセスするにはAPI用のtokenが必要になります。
ここではtokenを生成する手順について説明します。
- gitbucketにログイン
- 「Account settings」メニューを選択
- 「Applications」メニューを選択
- 「Generate new token」の「Token description 」にアプリの説明(自分で分かればいいので内容は適当)を入力して「Generate token」ボタンを押下
- 「Tokens you have generated which can be used to access the GitBucket API. 」の下に表示された「Personal access tokens」がAPI用のtokenなのでこれをコピーすること
このtokenはあなたの権限で(代わりとして)gitbucketを操作することになります。tokenを第三者に知られないように扱いには注意してください。
4. つづく
今回はGitBucketのWeb APIを利用してIssueを取得し、jsonファイルに保存するPythonのプログラムについて説明しました。認証のtokenの設定さえ分かってしまえば、あとは単純にHTTPクライアントでAPIのURLにアクセスするだけなので簡単だったかと思います。
GitBucketのAPIはgithubと互換性があるように設計されているので、githubでも同様のことが実現できるはずです。興味のある方は試してみてください。
次回はjsonファイルをもとにExcelファイルを作成するPythonのプログラムについて説明する予定です。