LoginSignup
10
9

More than 5 years have passed since last update.

Redmine / チケットをPDFでダウンロード&関連チケットと添付ファイルもダウンロード

Last updated at Posted at 2013-11-14

前回 の続きです…。
jsonで処理するため、標準的な shell (bash) とは言いながらjqというjsonのパーサを使うことにしました。

jqを準備する

今回は、RedmineのデータをAPI経由/jsonで取得します。
取って来たjsonをパースするために、jqをここからインストール。

ダウンロードのshell

  • REDMINE_URL / API_KEY / ISSUE_IDS (チケットのID) は環境変数とかで渡すのが前提とします。
  • ISSUE_IDS は空白スペースで区切って指定します。
    • (Exp. export ISSUE_IDS="1 2 100")
rm -fr *

for ID in ${ISSUE_IDS}
do
   # PDF取得
   wget -nv --content-disposition ${REDMINE_URL}/issues/${ID}.pdf?key=${API_KEY} \
           --output-document=${ID}.pdf
   wait

   # jsonデータ取得
   wget --header="X-Redmine-API-Key:${API_KEY}" --header="Content-Type: application/json" \
            -N -O issue.json ${REDMINE_URL}/issues/${ID}.json?include=attachments,relations
   wait

   # jq を使って添付ファイルのidを抽出
   FILES=`cat issue.json | jq '.issue.attachments[].id'`

   # 添付ファイルをダウンロード
   for FILE in $FILES
   do   
     wget --content-disposition --restrict-file-names=nocontrol \
             --header="X-Redmine-API-Key:${API_KEY}" ${REDMINE_URL}/attachments/download/${FILE}
     wait
   done

   # jq を使って関連チケットのidを抽出
   RELATIONS=`cat issue.json | jq '.issue.relations[].issue_id'`

   # 関連チケットをダウンロード
   for RELATED in $RELATIONS
   do   
     wget -nv --content-disposition ${REDMINE_URL}/issues/${RELATED}.pdf?key=${API_KEY} \
             --output-document=${RELATED}.pdf
     wait
   done
done 

ポイント

  • jsonの場合でも、xmlの場合でも同じなのですが、wgetを使って、 パラメータを複数指定する場合は、認証用のキーの情報をパラメータで渡すと、うまくデータが抽出できません。(オプションを変えてcurlで実行した場合でも、APIキーとその他のパラメータが同居するとうまくいきません)

  • このため、認証用のAPIキーは、HTTP Request Headerの X-Redmine-API-Key をセットしてあげています。

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9