Package: pybacklogpy
PyBacklogPyこれは何？BacklogAPIを Python から簡単に呼べるようにラップしたものです。必須環境Python 3.5以上typingモジュールを使用しているため開発およびテスト環境はPython 3.7.3を使用使い方詳細な仕様についてはドキュメントを参照してくださいインストールpip からインストールします。pipinstallpybacklogpyドメインおよびシークレットキーの登録ドメイン及びシークレットキーを登録するには以下の2種類の方法があります。プログラム上で指定する設定ファイルを置くなお、どちらも設定していた場合、プログラム上で指定するの方が優先されます。プログラム上で設定する場合Backlogのドメイン別に以下3種類のクラスを用意しています。BacklogComConfigure (backlog.com)BacklogJpConfigure (backlog.jp)BacklogToolConfigure (backlogtool.com)このクラスのコンストラクタ引数として、スペースID と API のキーを渡すことで設定を行えます。例えば、下記のような場合Backlogドメイン:kitadakyou.backlog.comAPI キー:qwertyuiopasdfghjklzxcvbnmqazwsxedcrfvtgbyhnujmikolpコードは次のようになります。frompybacklogpy.BacklogConfigureimportBacklogComConfigurefrompybacklogpy.IssueimportIssue# Configure クラスのインスタンスを生成config=BacklogComConfigure(space_key='kitadakyou',api_key='qwertyuiopasdfghjklzxcvbnmqazwsxedcrfvtgbyhnujmikolp')issue_api=Issue(config)# API を呼ぶクラスのコンストラクタ引数として Configure クラスのインスタンスは使用可能response=issue_api.get_issue_list()設定ファイルで指定する場合使用するプロジェクトの直下にsecretsというファイルを作り、以下のように値を入れておいてください。
なお、当プロジェクト直下にあるsecrets_sampleをコピーすると楽です。なお、このファイルは誤ってリポジトリにあげないよう、.gitignoreに追加しておくことを推奨します[backlog]Host=kitadakyou.backlog.comApiKey=qwertyuiopasdfghjklzxcvbnmqazwsxedcrfvtgbyhnujmikolpsecretsを指定した場合、先ほどの例で使用した configure クラスは省略して、以下のように書くことが出来ますfrompybacklogpy.IssueimportIssueissue_api_2=Issue()# Configure クラスを渡さなかった場合は、設定ファイルの情報を読みに行くresponse_2=issue_api_2.get_issue_list()なお、configureクラスを渡さず、secretsも設置していない場合は実行エラーとなります。モジュールを読み込み、インスタンス生成使用するモジュールをロードします。
それぞれはクラスになっているので、そのインスタンスを生成します。例として、Wiki の API を呼びたいと考えます。from pybacklogpy.Wiki import Wiki


wiki_api = Wiki()API を呼ぶどのような API があるかはPyBacklogPy のドキュメント、もしくはBacklogAPI のドキュメントを参照してください。
また、プロジェクトID や Wiki ID 等の調べ方は…ググればすぐに出てきますWiki を追加するサンプルfrom pybacklogpy.Wiki import Wiki


wiki_api = Wiki()


response = wiki_api.add_wiki_page(
    project_id=1000,
    name='SampleWikiName',
    content='サンプル Wiki 本文',
    mail_notify=False,
)Wiki を更新するサンプルfrom pybacklogpy.Wiki import Wiki


wiki_api = Wiki()


response = wiki_api.update_wiki_page(
    wiki_id=12345,
    name='TestWikiName',
    content='テスト 本文',
    mail_notify=False,
)返り値を見る全ての関数はrequestのレスポンスオブジェクトを返します。リクエストが成功しているかを確認するには、response.okを見るのが１番早いです。Wiki の更新が成功しているか確認するサンプルfrom pybacklogpy.Wiki import Wiki


wiki_api = Wiki()


response = wiki_api.update_wiki_page(
    wiki_id=12345,
    name='TestWikiName',
    content='テスト 本文',
    mail_notify=False,
)
if not response.ok:
    raise ValueError('Wiki の更新に失敗')また、レスポンス本文はresponse.textの中身に生(=テキストの)の JSON が入っています。標準ライブラリjsonを使って parse してあげれば、簡単に使えます。Wiki の内容を取得するサンプルimport json


from pybacklogpy.Wiki import Wiki


wiki_api = Wiki()


response = wiki_api.get_wiki_page(
    wiki_id=12345,
)

if not response.ok:
    raise ValueError('Wiki ページ情報の取得に失敗')

wiki_data = json.loads(response.text)
wiki_name = wiki_data['name']
wiki_content = wiki_data['content']ファイルの取得ファイル取得については、特殊な返り値のため、別途こちらで説明します。ファイルを取得する関数を使用する場合は、まずディレクトリを作成する必要があります。
デフォルトではプロジェクト直下の/tmpディレクトリにファイルがダウンロードされます。(今の所、変更不可💦)ファイルを取得する関数は「1番目がファイルのPATH」、「2番目がレスポンスオブジェクト」のタプルを返します。
そのため、一度に受け取るには、以下のように返り値を受け取る変数を2つ用意する必要があります。from pybacklogpy.Wiki import Wiki


wiki_api = Wiki()


downloaded_file_path, response = self.wiki_attachment.get_wiki_page_attachment(
    wiki_id=12345,
    attachment_id=987654,
)
print(downloaded_file_path)バグを見つけたら自由にブランチを切って、 PullRequest を出してください。Issue を上げるだけでも大丈夫です。
一週間に一回くらいは見るようにするので、対応出来たら対応します。(全て対応するとは言っていない)もし、PR出しても全くリアクションがない場合は Twitter のkitadakyou、若しくは作者のメール宛にご連絡ください。おまけ: なんでこんな名前なの？PyBacklogもBacklogPyも既に存在したので、苦肉の策で Py で挟みました。
もし、PyBacklogPyも存在したら、PyBacklogXPyBacklogという HUNTER×HUNTER 方式で行こうと考えていました。