普通のシステムエンジニアの備忘録

きみひで と言います。個人勉強で触れた技術など備忘禄と時々日常を綴ります。

Github Issueの内容をCSVに出力

GithubのIssuesを一覧出力(Excel参照可能)する | SEの徒然旅ブログ (ujise.com)

こちらの記事を参考にさせていただきました。

 

 

Pythonで記述

 

ー-------------------

import json
import requests
import os
import pandas as pd
 
def main():
    os.environ["no_proxy"] = "localhost"
    token = ""
    # トークンを設定している場合は以下のtokenをurlの末尾に + toeknで付与する。
    # token = "?access_token=生成されたtokentoken"
    url = "https://api.github.com/repos/SatoKimihide/IssueTest/issues?state=all"
    response = requests.get(url, verify=False)
    json_dict = json.loads(response.text)
 
    csv_header = ["No","ステータス","アサイン","ラベル", "title", "内容", "コメント"]
    csv_body =
 
    cnt = 1
    for issue_items in json_dict:
        csv_line_body =

        csv_line_body.append(str(cnt))
        csv_line_body.append(issue_items["state"])
        
        if len(issue_items["assignees"]) != 0:
            assignees_str = ""
            for assignees_items in issue_items["assignees"]:
              assignees_str = assignees_items["login"] + ":" + assignees_str
            csv_line_body.append(assignees_str)
        else:
            csv_line_body.append("")

        
 #       csv_line_body.append(issue_items["labels"])
        if len(issue_items["labels"]) != 0:
            labels_str = ""
            for labels_items in issue_items["labels"]:
              labels_str = labels_items["name"] + ":" + labels_str
            csv_line_body.append(labels_str)
        else:
            csv_line_body.append("")
 
 
        csv_line_body.append(issue_items["title"])
        csv_line_body.append(issue_items["body"])

        if issue_items["comments"] > 0:
            url = issue_items["comments_url"] + token
            comments_response = requests.get(url, verify=False)
            comments_json = json.loads(comments_response.text)
            comment_str = ""
            for commnet in comments_json:
                comment_str = commnet["updated_at"] + "\n"+ commnet["body"] +  "\n\n" + comment_str
 
            csv_line_body.append(comment_str)
        else:
            csv_line_body.append("")
 
        csv_body.append(csv_line_body)
 
        cnt = cnt + 1
 
    df = pd.DataFrame(csv_body, columns=csv_header)
    df.to_csv("output.csv", index=False)
 
if __name__ == '__main__':
    main()

import json
import requests
import os
import pandas as pd
 
def main():
    os.environ["no_proxy"] = "localhost"
    token = ""
    # トークンを設定している場合は以下のtokenをurlの末尾に + toeknで付与する。
    # token = "?access_token=生成されたtokentoken"

 #↓のXXXXXXはアカウント名。ZZZZZZはレポジトリ名
    url = "https://api.github.com/repos/XXXXXX/ZZZZZZ/issues?state=all"
    response = requests.get(url, verify=False)
    json_dict = json.loads(response.text)
 
    csv_header = ["No","ステータス","アサイン","ラベル", "title", "内容", "コメント"]
    csv_body =
 
    cnt = 1
    for issue_items in json_dict:
        csv_line_body =

        csv_line_body.append(str(cnt))
        csv_line_body.append(issue_items["state"])
        
        if len(issue_items["assignees"]) != 0:
            assignees_str = ""
            for assignees_items in issue_items["assignees"]:
              assignees_str = assignees_items["login"] + ":" + assignees_str
            csv_line_body.append(assignees_str)
        else:
            csv_line_body.append("")

        
 #       csv_line_body.append(issue_items["labels"])
        if len(issue_items["labels"]) != 0:
            labels_str = ""
            for labels_items in issue_items["labels"]:
              labels_str = labels_items["name"] + ":" + labels_str
            csv_line_body.append(labels_str)
        else:
            csv_line_body.append("")
 
 
        csv_line_body.append(issue_items["title"])
        csv_line_body.append(issue_items["body"])

        if issue_items["comments"] > 0:
            url = issue_items["comments_url"] + token
            comments_response = requests.get(url, verify=False)
            comments_json = json.loads(comments_response.text)
            comment_str = ""
            for commnet in comments_json:
                comment_str = commnet["updated_at"] + "\n"+ commnet["body"] +  "\n\n" + comment_str
 
            csv_line_body.append(comment_str)
        else:
            csv_line_body.append("")
 
        csv_body.append(csv_line_body)
 
        cnt = cnt + 1
 
    df = pd.DataFrame(csv_body, columns=csv_header)
    df.to_csv("output.csv", index=False)
 
if __name__ == '__main__':
    main()

ー-------------------

 

作成したCSVイメージ

f:id:kimihide1104:20220219001910p:plain

 

APIのパラメータ設定(urlの部分)で、出力する条件を指定できる。

ラベルとかアサインなどの複数項目が設定できるところは、上記の方法で記載すれば取れる。