BLOGTIMES
::
Home > XML-RPCを使ってTracのチケットに添付ファイルを投げ込む(Perl編)
2009/06/01
[ by hsur at 21:03]

XML-RPCを使ってTracのチケットに添付ファイルを投げ込む(Perl編)

  

仕事場に導入したTracはかなり活用されてきていて、導入した自分としては嬉しい限りです。僕はコンソール作業の記録をしばしばTracに転記しているのですが、そうするとコンソールとウェブブラウザを行ったり来たりしなければならないので、それがちょっと面倒になってきました。

ということで、ブラウザを開かずに、Linux上のコンソールのコマンドで特定のチケットに添付ファイルを投げ込むスクリプトを書いてみました。Tracには他のシステムと連携するためにXML-RPCというインタフェイスが用意されているので、これをPerlから叩いてみます。XML-RPCについてはNucleus関連の開発でも散々いじったので自分としてはPHPで書くのが一番得意なのですが、今回はPerlで開発することにします。

チケットに添付ファイルを投げ込むスクリプト

ということでサクッと書いてみました。
本当はもうちょっとちゃんと引数のバリデーションしたりとか、チケットの存在確認とかした方がいいと思うんですが、プライベート用なのでこれで十分です。

tracAttachmentPost.pl

#!/usr/bin/perl

use strict;
use warnings;

use XMLRPC::Lite;
use Data::Dumper;
use File::Basename;

my $debug = 1;

($ARGV[0] && $ARGV[1]) || die 'usage: tracAttachmentPost.pl ##TicketID## ##AttachmentFile##';

my $ticketid = int($ARGV[0]);
my $attachmentName = $ARGV[1];

my $attachmentContents;
open(FILE, $attachmentName) or die "$!";
read(FILE, $attachmentContents, (-s $attachmentName));
close(FILE);

my @params = (
  $ticketid,
  basename($attachmentName),
  'Uploaded by tracAttachmentPost.pl',
  XMLRPC::Data->type('base64', $attachmentContents ),
);
print Dumper(@params) if $debug;

my $result = XMLRPC::Lite->proxy('http://testserver.example.com:80/trac/(プロジェクト名)/login/xmlrpc',
    credentials => [
      'testserver.example.com:80',          # host:port
      'trac',                               # realm
      '(ユーザー名)' => '(パスワード)', # user, password
    ]
  )
  ->call("ticket.putAttachment", @params )
  ->result;

print Dumper($result);

# 使うときには()の部分とか、testserver.example.comを環境に合わせて書き替える必要があります。。。。

使い方は下記のようにチケットID(ここでは100)とファイル名(ここではexample.txt)を指定すると、チケットにファイルが添付されます。処理が成功した場合には、ファイル名が表示されるはずです。

./tracAttachmentPost.pl 100 example.txt

XML-RPCを投げるにあたってBasic/Digest認証をパスする必要があるので、URLをhttp://user:password@testserver:80/・・・・というようにしてリクエストを投げてみたものの「401 Authorization Required. 」で弾かれてしまって少しハマりましたが、XMLRPC::Liteのソースを追いかけていってproxy()の第2引数以降はLWP::UserAgentへの引数になるらしいということがわかったので、credentialsを使う事で認証をパスすることができるようになりました。

2009/12/13追記

Ruby編も書きました。

[4年前][3年前][2年前][1年前] | Category: Tips | / | Views: 778
このエントリは役に立ちましたか?
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→http://blog.cles.jp/item/3065
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン

Web Services by Yahoo! JAPANPowered by NP_SpamBayesJP
★下記に2つの英単語をスペースで区切って入力してください
::
Home > XML-RPCを使ってTracのチケットに添付ファイルを投げ込む(Perl編)