- blogs:
- cles::blog
XML-RPCを使ってTracのチケットに添付ファイルを投げ込む(Perl編)
仕事場に導入したTracはかなり活用されてきていて、導入した自分としては嬉しい限りです。僕はコンソール作業の記録をしばしばTracに転記しているのですが、そうするとコンソールとウェブブラウザを行ったり来たりしなければならないので、それがちょっと面倒になってきました。
ということで、ブラウザを開かずに、Linux上のコンソールのコマンドで特定のチケットに添付ファイルを投げ込むスクリプトを書いてみました。Tracには他のシステムと連携するためにXML-RPCというインタフェイスが用意されているので、これをPerlから叩いてみます。XML-RPCについてはNucleus関連の開発でも散々いじったので自分としてはPHPで書くのが一番得意なのですが、今回はPerlで開発することにします。
† チケットに添付ファイルを投げ込むスクリプト
ということでサクッと書いてみました。
本当はもうちょっとちゃんと引数のバリデーションしたりとか、チケットの存在確認とかした方がいいと思うんですが、プライベート用なのでこれで十分です。
tracAttachmentPost.pl
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)を指定すると、チケットにファイルが添付されます。処理が成功した場合には、ファイル名が表示されるはずです。
XML-RPCを投げるにあたってBasic/Digest認証をパスする必要があるので、URLをhttp://user:password@testserver:80/・・・・というようにしてリクエストを投げてみたものの「401 Authorization Required. 」で弾かれてしまって少しハマりましたが、XMLRPC::Liteのソースを追いかけていってproxy()の第2引数以降はLWP::UserAgentへの引数になるらしいということがわかったので、credentialsを使う事で認証をパスすることができるようになりました。
† 2009/12/13追記
Ruby編も書きました。
このエントリへのTrackbackにはこのURLが必要です→http://blog.cles.jp/item/3065
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
sp-20100320023856644595552@cles.net
- XML-RPC perl
- Yahoo! - 10/03/12 19:20:42
- trac xmlrpc
- Yahoo! - 10/02/24 15:29:33
- おめでとうございます (4)
- 知恵の輪 サターン編 (3)
- SourceForge.JPのSubversion... (3)
- 人生初の出来事 (3)
- サーバセットアップ (3)
- ブックマークボタンを1つに (3)
- 和食 小錦 (3)
- 散髪しました (3)
- .inはインドのccTLDなのか (3)
- やっと髪をきりました (3)
2 . やっぱりあった!パクれる読書感想文! [7639x]
3 . Echofon for Firefox [6400x]
4 . OpenIDで自分のサイトのURLを使う [5760x]
5 . 急性胃腸炎 [5758x]
- CD-ROM起動で、HDDを完全消去
- NP_Moblog v1.16
- pinzoro 01/15
- hsur 12/29
- and more...
- 耳がおかしいと思ったら突発..
- baca 01/13
- hsur 01/13
- and more...
★はてな認証APIをつかってログインすることができます。




