Symfoware

Symfowareについての考察blog

RubyからREST API経由でRedmineに添付ファイルを登録する(XML,JSON使用)

RubyからREST API経由でRedmineにチケットを登録してみました。
RubyからREST API経由でRedmineにチケットを登録する(XML,JSON使用)

添付ファイル付きのチケット登録にチャレンジしてみます。

Pythonで同様のことを行ったので、これを参考にしました。
PythonからREST API経由でRedmineに添付ファイルを登録する(XML,JSON使用)




XMLによる登録



Pythonで作成したプログラムが参考になりました。


  1. # -*- coding : utf-8 -*-
  2. require 'net/http'
  3. require 'uri'
  4. require "rexml/document"
  5. # 個人設定画面に表示されているAPIキー
  6. api_key = 'ea87faaba9549b5fdbea7655bf7de323cd6c118e'
  7. # まず、画像データを登録
  8. image = File.binread("./Lenna.jpg")
  9. token = ''
  10. # URLは「uploads.xml」を指定
  11. uri = URI.parse("http://192.168.1.102/redmine/uploads.xml")
  12. Net::HTTP.start(uri.host, uri.port) do |http|
  13.     #リクエストインスタンス生成
  14.     request = Net::HTTP::Post.new(uri.path)
  15.     #ヘッダー部
  16.     request.set_content_type("application/octet-stream")
  17.     request["X-Redmine-API-Key"] = api_key
  18.     
  19.     #ボディ部
  20.     request.body = image
  21.     
  22.     #送信
  23.     response = http.request(request)
  24.     
  25.     #レスポンスを解析して、tokenを取得
  26.     doc = REXML::Document.new(response.body)
  27.     token = REXML::XPath.first(doc, "/upload/token").text
  28.     
  29. end
  30. # 登録用のXMLデータを作成
  31. xml = <<XML
  32. <issue>
  33.     <project_id>test_project</project_id>
  34.     <subject>Rubyから自動登録テスト</subject>
  35.     <description>チケットの詳細です</description>
  36.     <tracker_id>2</tracker_id>
  37.     <uploads type="array">
  38.     <upload>
  39.         <token>#{token}</token>
  40.         <filename>Lenna.jpg</filename>
  41.         <description>添付テスト</description>
  42.         <content_type>image/jpg</content_type>
  43.     </upload>
  44.     </uploads>
  45. </issue>
  46. XML
  47. # APIのURL
  48. # 今回、RedmineのURLはhttp://192.168.1.102/redmine/
  49. # サブディレクトリで公開している
  50. uri = URI.parse("http://192.168.1.102/redmine/issues.xml")
  51. Net::HTTP.start(uri.host, uri.port) do |http|
  52.     #リクエストインスタンス生成
  53.     request = Net::HTTP::Post.new(uri.path)
  54.     #ヘッダー部
  55.     request.set_content_type("text/xml")
  56.     request["X-Redmine-API-Key"] = api_key
  57.     
  58.     #ボディ部
  59.     request.body = xml
  60.     
  61.     #送信
  62.     response = http.request(request)
  63. end




ちゃんと添付ファイル付きで登録できています。

379_01.png







JSONによる登録



JSONを使用しての登録はこうなりました。


  1. # -*- coding : utf-8 -*-
  2. require 'net/http'
  3. require 'uri'
  4. require 'json'
  5. # 個人設定画面に表示されているAPIキー
  6. api_key = 'ea87faaba9549b5fdbea7655bf7de323cd6c118e'
  7. # まず、画像データを登録
  8. image = File.binread("./Lenna.jpg")
  9. token = ''
  10. # URLは「uploads.xml」を指定
  11. uri = URI.parse("http://192.168.1.102/redmine/uploads.json")
  12. Net::HTTP.start(uri.host, uri.port) do |http|
  13.     #リクエストインスタンス生成
  14.     request = Net::HTTP::Post.new(uri.path)
  15.     #ヘッダー部
  16.     request.set_content_type("application/octet-stream")
  17.     request["X-Redmine-API-Key"] = api_key
  18.     
  19.     #ボディ部
  20.     request.body = image
  21.     
  22.     #送信
  23.     response = http.request(request)
  24.     
  25.     #レスポンスを解析して、tokenを取得
  26.     doc = JSON.parse(response.body)
  27.     token = doc['upload']['token']
  28. end
  29. # 登録用のデータ
  30. data = {}
  31. issue = {}
  32. issue['project_id'] = 'test_project'
  33. issue['subject'] = 'Rubyから自動登録テスト(JSON)'
  34. issue['description'] = '登録するチケットの詳細'
  35. issue['tracker_id'] = 2
  36. imgdata = {}
  37. imgdata['token'] = token
  38. imgdata['filename'] = 'Lenna.jpg'
  39. imgdata['description'] = '添付ファイルサンプル'
  40. imgdata['content_type'] = 'image/jpg'
  41. issue['uploads'] = [imgdata]
  42. data['issue'] = issue
  43. # 連想配列からJSONな文字列に変換
  44. issue_json = JSON.generate(data)
  45. # APIのURL
  46. # 今回、RedmineのURLはhttp://192.168.1.102/redmine/
  47. # サブディレクトリで公開している
  48. # jsonの場合は、拡張子に「json」を指定
  49. uri = URI.parse("http://192.168.1.102/redmine/issues.json")
  50. Net::HTTP.start(uri.host, uri.port) do |http|
  51.     #リクエストインスタンス生成
  52.     request = Net::HTTP::Post.new(uri.path)
  53.     #ヘッダー部
  54.     request.set_content_type("application/json")
  55.     request["X-Redmine-API-Key"] = api_key
  56.     
  57.     #ボディ部
  58.     request.body = issue_json
  59.     
  60.     #送信
  61.     response = http.request(request)
  62.     #ret = JSON.parse(response.body)
  63.     #puts ret['errors']
  64. end




こちらもちゃんと添付ファイル付きで登録できています。

379_02.png




【参考URL】

Ruby の IO.read でバイナリファイルを読み込むときの注意点

class REXML::XPath

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/03/21(金) 14:39:06|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<RubyからREST API経由でRedmineにコメントを登録する(XML,JSON使用) | ホーム | RubyからREST API経由でRedmineにチケットを登録する(XML,JSON使用)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1359-363d1217
この記事にトラックバックする(FC2ブログユーザー)