pythonのrequestsを使用してredmineのAPIでチケットを登録する


概要

pythonのrequestsモジュールを使って、redmineのAPIを使用して
チケット登録をする。

どうしてこの記事を書いたのか

python-redmineを使用した例は簡単に見つかるものの、
requestsを使用したものはあんまりなくて、curlでやる要領でやってたら
つまづいたので、他の誰かがつまづかないようになればと思って書いた。

どうしてpython-redmineではダメだったのか。

チケット登録後にそのチケットを親チケットにして次々と子チケットを  
登録するようにしたかったのだが、上のライブラリだとチケット登録後の  
レスポンスはブール値で帰ってくるため、  
登録したチケットIDを取得することができなかったため。
(できるよ!って方は教えてください!)
コメントで方法を教えてもらいました。
また、公式 を見ると書いてます。
ドキュメント読もう(自戒)

前提

  • APIキーは準備済み
    何はともあれAPIを利用してチケットを登録するときは必要なので、
    用意しましょう。
  • requestsはインストール済み
    importの仕方もわかる。使い方もまぁ大体はわかる。

チケット登録の方法

headerの準備

以下の感じでmyheadersという変数にheaderの情報を格納します。

myheaders = {
    'Content-Type': 'application/json',
    'X-Redmine-API-Key': 'APIキー'
}

入力例
myheaders = {
    'Content-Type': 'application/json',
    'X-Redmine-API-Key': 'asdfghjklzxcvbnm'
}

チケットの値を準備

payload = {
    "issue": {
        "project_id": プロジェクトのID,
        "subject": "チケットの件名",
        "status_id": ステータスのID,
        "tracker_id": トラッカーのID,
        "parent_issue_id": "親チケットにしたいチケットがあるならそのチケットID",
        "due_date": "期日(2017−01−01とか)",
        "description": "# 概要\n バックスラッシュnで改行できる。",
        "custom_fields": [
            {"id": カスタムフィールドのID, "value": "登録したい値", "name": "カスタムフィールドの名前"},
            {"id": カスタムフィールドのID, "value": ["一つのフィールドに", "登録したい値が複数あるときは", "こうやって分ける"], "name": "カスタムフィールドの名前"}
        ]
    }
}

入力例
payload = {
    "issue": {
        "project_id": 10,
        "subject": "チケットの件名",
        "status_id": 15,
        "tracker_id": 8,
        "parent_issue_id": "10000",
        "due_date": "2017−01−01",
        "description": "# 概要\n バックスラッシュnで改行できる。",
        "custom_fields": [
            {"id": 1, "value": "かぼちゃ", "name": "好きな野菜"},
            {"id": 2, "value": ["D", "F","G","H"], "name": "好きなサイズ"}
        ]
    }
}

requestsでチケット登録!

以下の感じでチケット登録!

redmineurl = 'http://redmineのURL'  
requests.post(redmineurl,headers=myheaders,data=json.dumps(payload))