« | Home | »

2005.02.06

post2blog

携帯電話を含めてメールからBlogが書き込めるツールとして、post2blogを使わせていただいている。
post2blogの載っているサーバ以外のBlogにも書き込めるという優れものだし、無駄のない素晴らしいコードです。
まず、以下のpackageを入れておく。

(1) packageのdevelからp5-POE-Component-Server-XMLRPC
(2) graphicsからp5-Image-Info

これで、動くが、以下のような2つの改造を加えることとした。順次示す。
なお、最後に私が作った修正版を以下に載せて置くのでご希望の方は自由にご利用ください。
(1) 投稿可能なメールアドレスを規定

オリジナルなpost2blogは受信するためのメールアドレスが漏洩すると誰でも書き込み可能である。
厳密に守る必要も無いとは思うが、受け付けるメールアドレスを規制したいと思い以下を追加した。
まず、最初の部分に@authadresの記入を追加。 ここに許可するメールアドレスを”,”で区切って書いておく。 それとflag用の変数$authを宣言。

my $url = 'http://TARGET/URL/DIRECTRY/MT/mt-xmlrpc.cgi';
# CGIPath + 'mt-xmlrpc.cgi'
my $blog_id = 8;
my $username = 'USERNAME';
my $password = 'PASSWORD';
my $MT_DIR = '/YOUR_DIRECTRY_TO/mt/';
my $parse_path = '/tmp/post2blog';
my @authadrs = ('abcd@xxxx.yyyy.com','aabbcc@yyyy.xxxx.co.jp');
my $auth;

そして、判定文を書く。
Mail Addressの取り出しは簡易な方法であるが、厳密に行いたいなら正規なmail_regexを利用するのが良いが、単純に自分が設定したアドレスだけが取り出せれば良いので、これでも十分だろう。

if($from =~ /([-,0-9,a-z,A-Z,-,_,.]+@[-,0-9,a-z,A-Z,-,.]+)/){
foreach (@authadrs){
if($_ eq $1){$auth = 1;}
}
}
if($auth != 1){print "Not authorized mail address : $fromn";exit;}

(2) サムネイルの作成

post2blogでは画像はサムネイルを作らず、オリジナルの画像を表示の”width”と”height”を指定することで横幅を330pixで表示している。
これでも表示上は問題ないが、Blogのページを表示するのに元の大きな画像ファイルを読み込むことになるので、たくさんの画像を貼り付けたページでは表示速度が遅くなる。
この改良のため、横幅が330pixel以上の画像はサムネイルを作ることとし、さらに横幅が800pixel以上の画像は元の画像も800pixelに縮小した(これは好みの問題でもあろう)。

use Image::Size;
use Image::Magick;
foreach my $fileref (@attachs) {
my ($file, $orgfilename) = @$fileref;
my ($filename, $filepath, $suffix) = fileparse($file,
'.(jpe?g|gif|png)');
##################################
       $mkthumb = 0;
my ($imgx, $imgy) = imgsize($file);
if($imgx > 330){$mkthumb = 1;}
if($mkthumb == 1){
$thumbfile = $filepath . 'tn_' . $filename . $suffix;
my $i =  Image::Magick->new;
$i->Read("$file");
$i = $i->Transform(geometry=>330);
$i->Write("$thumbfile");
undef $i;
my ($imgx, $imgy) = imgsize($file);
if($imgx > 800){
$i =  Image::Magick->new;
$i->Read("$file");
$i = $i->Transform(geometry=>800);
$i->Write("$file");
undef $i;
}
}

画像のサイズ変更はImageMagickのmoduleを使用した。
なお、変数の$mkthumb, $thumbfileなども最初の部分に宣言を入れておく必要がある。
そして、サムネイルを作ったときは、これもBlogに転送する必要があるので以下を追加。

        close(BIN);
my $ret = $rpc->call('metaWeblog.newMediaObject',
$blog_id,
$username,
$password,
{
'bits' => $bindata,
'name' => $filename.$suffix
},
1
);
   if($mkthumb == 1){
($thumbfilename, $filepath, $suffix) = fileparse($thumbfile,
'.(jpe?g|gif|png)');
open(BIN, $thumbfile);
$bindata ="";
while (<BIN>) {
$bindata = $bindata.$_;
}
}
$returl = $ret->result->{url};
        close(BIN);
$ret = $rpc->call('metaWeblog.newMediaObject',
$blog_id,
$username,
$password,
{
'bits' => $bindata,
'name' => $thumbfilename.$suffix
},
1
);
#print Dumper $ret->result;
#print Dumper $ret->fault;
      if($mkthumb == 1){
$tnreturl = $ret->result->{url};
}
      if ($returl =~ /.jpe?g$/i) {
my $info = image_info($file);
if (ref $info) {
my @lats = $info->{GPSLatitude};

そして、最後に画像へのリンク方法を修正する。

        if ($returl =~ /.(jpe?g|gif|png)$/i) {
           if($mkthumb != 1){$tnreturl = $returl;}
$description = "<a href="$returl">
<img src="$tnreturl" alt="$orgfilename" border="0"></a>
<br/>$description";
} else {
$description = "<a href="$returl">$orgfilename</a>
<br />$description";
}
}

最後に私が作った修正版を以下に載せて置く。
Download file

コメント

コメントはありません

コメントフィードを購読する

コメント投稿





コメント本文に次の(X)HTMLタグを使えます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)