質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2671閲覧

PythonでBacklogAPIのチーム一覧の取得する

member1234

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/05/19 05:19

前提・実現したいこと

PythonでBacklogAPIのチーム一覧の取得するAPIをコールし、csvに全てのチーム名,ユーザー名,ユーザーメールアドレスを出力するツールを作ろうとしています。
https://developer.nulab.com/ja/docs/backlog/api/2/get-list-of-teams/#%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E4%BE%8B

上記ツール作成に2点ほど力及ばない箇所があります。
・リクエストする際に「○個目から100個(最大)下さい」のようなパラメータを付与する必要があり、ループさせて全て取得する方法を見つけられていません。
・jsonの戻り値をチーム名,ユーザー名,ユーザーメールアドレスのようにパースできておりません。

該当のソースコード

Python

1import pathlib 2import os 3import requests 4import urllib.request 5import json 6import csv 7import pandas as pd 8from collections import OrderedDict 9 10#定義 11ListFile = pathlib.Path('.\BacklogTeamsList.txt') # 出力先ファイル 12jsonFile = pathlib.Path('.\BacklogTeamsList.json') # 出力先ファイル 13 14# 環境変数からBACKLOG_URLを取得、なければ入力を求め一時利用 15def getBACKLOG_URL(): 16 if os.getenv('BACKLOG_URL')==None: 17 print('環境変数からBACKLOG_URLを確認できませんでした。※登録しておくと今後入力が無くて便利です。') 18 result = input("BACKLOG_URLを入力してください。例[https://xxxx.backlog.jp] >>>") 19 else: 20 result = os.getenv('BACKLOG_URL') 21 return result 22 23# 環境変数からBACKLOG_API_KEYを取得、なければ入力を求め一時利用 24def getBACKLOG_API_KEY(): 25 if os.getenv('BACKLOG_API_KEY')==None: 26 print('環境変数からBACKLOG_API_KEYを確認できませんでした。※登録しておくと今後入力が無くて便利です。') 27 result = input("BACKLOG_API_KEYを入力してください。>>>") 28 else: 29 result = os.getenv('BACKLOG_API_KEY') 30 return result 31 32# Backlogチーム一覧作成処理 33def main(): 34 for n in range(0, 99999, 100) 35 r = requests.get(BACKLOG_URL + '/api/v2/teams', params={'apiKey': BACKLOG_API_KEY, 'count': '100', 'order': 'asc', 'offset': n}) 36 37 if r.status_code == requests.codes.ok: 38 data = r.json() 39 str_json = json.dumps(data, ensure_ascii=False, indent=4) 40 data_json = json.loads(str_json) 41 42 # なう 43 for data_json_key in data_json: 44 for data_json_val in data_json_key["name"]: 45 print(data_json_key["name"],data_json_key["name"]) 46 for data_json_val in data_json_key["members"]: 47 print(data_json_key["members"]) 48 49 ## json出力 50 #with jsonFile.open(mode='w') as f: 51 # print(str_json, file=f) 52 53 # csv出力 54 #with ListFile.open(mode='w') as f: 55 # df = pd.read_json(str_json) 56 # df.to_csv(f) 57 58# メイン処理 59if __name__ == '__main__': 60 BACKLOG_URL = getBACKLOG_URL() 61 BACKLOG_API_KEY = getBACKLOG_API_KEY() 62 main()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

もっと良い書き方があるかもしれませんが、目的の機能を持つツールが出来ました。
良い方法があればご教示いただけますでしょうか。

python

1import pathlib 2import os 3import requests 4import json 5 6#定義 7ListFile = pathlib.Path('.\BacklogTeamsList.txt') # 出力先ファイル 8mdFile = pathlib.Path('.\BacklogTeamsList.md') # 出力先ファイル 9 10# 環境変数取得、なければ入力を求め一時利用 11def getenvfunction(envname): 12 if os.getenv(envname)==None: 13 print("環境変数から" + envname + "を取得できませんでした。※登録しておくと今後入力が無くて便利です。") 14 result = input( envname + "を入力してください。 >>>") 15 else: 16 result = os.getenv(envname) 17 return result 18 19# Backlogチーム一覧作成処理 20def main(): 21 with ListFile.open(mode='w') as f: 22 with mdFile.open(mode='w',encoding="utf-8") as m: 23 print("チーム名,メンバー,メールアドレス", file=f) 24 print("# OPRO Backlog チーム一覧\n| チーム名 | メンバー | メールアドレス |\n|--|--|--|", file=m) 25 for n in range(0,1000,100): 26 r = requests.get(BACKLOG_URL + '/api/v2/teams', params={'apiKey': BACKLOG_API_KEY, 'count': '100', 'order': 'asc', 'offset': n}) 27 if r.status_code == requests.codes.ok and r.text!="[]": 28 data_json = json.loads(json.dumps(r.json(), ensure_ascii=False, indent=4)) 29 for data_json_key in data_json: 30 for data_json_val in data_json_key["members"]: 31 print(data_json_key["name"] + "," + data_json_val["name"] + "," + data_json_val["mailAddress"], file=f) 32 print("| "+data_json_key["name"] + " | " + data_json_val["name"] + " | " + data_json_val["mailAddress"]+" |", file=m) 33 34# メイン処理 35if __name__ == '__main__': 36 BACKLOG_URL = getenvfunction("BACKLOG_URL") 37 BACKLOG_API_KEY = getenvfunction("BACKLOG_API_KEY") 38 main()

投稿2020/05/19 06:36

編集2020/07/21 02:38
member1234

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問