先日のTwitterに投稿さけするスクリプトをbit.lyに対応させてみた。

2010年 08月 16日6:03 pm @ 大和 比呂志

0


そんなに高機能にしてどうするんだ、、、という気もしますが、リハビリを兼ねて先日の記事で自分Twitterクライアント(ただし投稿のみ。理由はリンク先に)をbitlyに対応させてみました。コードは以下のとおり。


#!/usr/bin/perl

use strict;
use warnings;
use Encode;
use utf8;
use Net::Twitter::Lite;
use LWP::Simple;

my $tw = Net::Twitter::Lite->new(
consumer_key => '*****自分のにおきかえてね。*****',
consumer_secret => '*****自分のにおきかえてね。*****',
ssl => 1,
);

$tw->access_token('*****自分のにおきかえてね。*****');
$tw->access_token_secret('*****自分のにおきかえてね。*****');

sub convert_bitly{
my ($string) = @_;
my $login = '*****自分のにおきかえてね。*****';
my $apikey = '*****自分のにおきかえてね。*****';
my $apiurl = 'http://api.bit.ly/v3/shorten?login=%s&apiKey=%s&longUrl=%s&format=txt';

my $http_url_regex =
q{\b(?:https?|shttp)://(?:(?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f} .
q{][0-9A-Fa-f])*@)?(?:(?:[a-zA-Z0-9](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.)} .
q{*[a-zA-Z](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.?|[0-9]+\.[0-9]+\.[0-9]+\.} .
q{[0-9]+)(?::[0-9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f]} .
q{[0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-} .
q{Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f} .
q{])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)*)} .
q{*)?(?:\?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])} .
q{*)?(?:#(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*} .
q{)?};

my @http_url = $string =~ /($http_url_regex)/g;
foreach my $longurl (@http_url){
my $bitly = sprintf($apiurl, $login, $apikey, $longurl);
my $bitlytxt = get($bitly);
chomp($bitlytxt);
$string =~ s/$longurl/$bitlytxt/g;
}

return $string;
}

for(@ARGV){
my $string = decode_utf8($_);
$string = convert_bitly($string);
if( length($string) > 140 ){
print "over 140";
}else{
$tw->update($string);
}
}

exit
__END__

前回との違いは、convert_bitlyというサブルーチンを用意して、decode_utf8した文字列をそのサブルーチンでURLをチェックして置きかえる。というもの。URLのチェックは http://www.din.or.jp/~ohzaki/perl.htm#httpURL こちらのサイトを参考にしました(ありがとうございました)。スクリプト全体は、http://firegoby.theta.ne.jp/archives/971 こちらのサイトを参照させて頂きました(ありがとうございました)。

で、bit.lyのフォーマットをtxtで取得すると、短縮URLだけが取得されるのでJsonだのXMLだのをホゲホゲしないで済んでらくですね。あと、apiurlのところのURLをbit.lyではなく、j.mpにするとそちらのドメインで短縮URLが戻ってきます。

もうちょっとしっかりつくったほうがいいところもありそうですが、自分専用ということで。

こういう手習いは細かくやると楽しいですね。

、、、40の手習いか、、、