GitLabで管理している課題一覧を取得したかったんですが、無償版では画面からのExportに対応していなかったので、APIを経由して取得できるようにスクリプト化してみました。
やりたいこと
- 画面からCSVエクスポートするように、GitLabのIssuesを一覧化できる仕組みを作る。
準備
以下をインストールする必要あり。
$ pip install -t libs requests
$ pip install -t libs beautifulsoup4
コードはこんな感じで組みました。
中身
ポイントとなる中身はこんな感じです。
クエリストリングとURLの指定
クエリストリングとURLを指定して中身を取得するために、こんな実装をしています。
query = {
"scope": "all",
"state": status,
"milestone_title": os.environ['MILE_STONE'] ,
"page": page
}
:
:
response = requests.get(os.environ['TARGET_URL'], headers=headers, params=query)
soup = BeautifulSoup(response.text, "html.parser")
ページごとのループ処理
GitLabはページごとの取得の限界Issue数があるので、次ページを見に行く様に実装しています。現状はとりあえず次ページを確認して、同じIDであったらページ遷移をやめる、という非効率な実装をしています。
# Confirm ID for loop
if issue_num_list[0].text.replace("\n", "\t") == prev_num:
prev_curr_diff = False
prev_num = 0
page = 1
break
else:
prev_num = issue_num_list[0].text.replace("\n", "\t")
page += 1
タイトルリストはタブ区切り
取得したHTMLは開業ベースで取得されてしまうので、タブ区切りに編集します。
for issue_num in issue_num_list:
issue_title = issue_title_list[index]
print(issue_num.text.replace("\n", "\t") +
status + "\t" +
issue_title.text.replace("\n", "\t") )
index += 1
これで「ID、ステータス、タイトル」がタブ区切りで出力される様になりました。
実行方法
とりあえずLambdaにデプロイしてもらってもいいですが、ローカルで実行する場合はslsコマンドで以下の様に実行できます。
$ sls invoke local -f issues_manager