CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Perlでtwitterのつぶやきを検索表示する

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

Perltwitter APIを使ってつぶやきを検索して、
強調表示機能をつけたらすごく便利だった!


追記(3/15):Anonymous認証にしたのでキーの取得が不要になった!
CodingFirst Perlでtwitterのつぶやきを検索表示する(2)


まず、Twitterが情報を得るのにいいと聞いてはいたけど、
そうとは思わず使って無かったんだけど、
地震の情報が欲しくて、Twitterで「#jishin」と検索してたら、
わんさかでてくる!
Twitterすげー!!

こっちのチャンネルで会見やってる...
電車の運行情報はここが便利...
輪番停電の情報をアップしたよ...
地震のまとめてみた!

ああ、こんなに出てくるなんて...遅れすぎだよ、自分。。

しかししかし、見慣れてくると多すぎて見きれないと分かった。
-rt でリツイートを除いてみた。。まだまだ多い。
かといって、検索ワードを増やすと欲しい情報にならないし。。

で、スクリプトを書いて調整することにした。
PerlでTwitterAPI使うコードを書いて、
書いたコードはgithubに置いた。
恥ずかしい英語に、ソースコードだけどご容赦。

https://github.com/yukioc/twit-view

珍しくcpan使った。

use Net::Twitter::Lite;
use Term::ANSIColor;

コマンドライン引数の処理とiniファイルの読み込み。
iniファイルはtwitter APIを使うためのデータを別ファイル化したから。
簡単な書式なのでモジュール使わない。

my $inifile='twit-view.ini';
my $q;
my @sword1;
my @sword2;

#--- read arg and ini
while(@ARGV){
    my $argv=shift;
    if($argv eq '-s'){
        push(@sword1,decode('utf8',shift));
    }elsif($argv eq '-S'){
        push(@sword2,decode('utf8',shift));
    }elsif($argv=~/^(-h|-\?|--help)/){
        usage;
    }else{
        $q=$argv;
        last;
    }
}
my %ini;
open my $fi,"<",$inifile or die "error:$!";
while(<$fi>){
  $ini{$1}=$2 if(/\s*(\w+)\s*=(\S+)/);
}
close $fi;

iniファイルの情報はTwitterAPIを使う認証関係。
http://dev.twitter.com/apps/
に行って「新しいアプリケーションを登録する」を進めて、
アプリケーションを登録するとコンシューマーキーが手に入る。
その後で先ほどのリンクなどから登録したアプリのページにいくと
右側に「My Access Token」というメニューがあり、アクセストークンが手に入る。
(※詳しい手順が必要な人はぐぐって)

iniファイルはこのような書式で。XXXとか右辺を書きかえる

$ cat twit-view.ini
consumer_key=XXXXXXXXXXXXXXXXXXXXXX
consumer_key_secret=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
access_token=012345678-ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
access_token_secret=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

このへんはパラメータチェック。

my $consumer_key = $ini{consumer_key_secret} or die "error: not found consumer_key_secret";
my $consumer_key_secret = $ini{consumer_key_secret} or die "error: not found consumer_key_secret";
my $access_token = $ini{access_token} or die "error: not found access_token";
my $access_token_secret = $ini{access_token_secret} or die "error: not found access_token_secret";
die "error: not found query\n" if(!$q);

Twitterにアクセス

my $nt = Net::Twitter::Lite->new(
  consumer_key    => $consumer_key,
  consumer_secret => $consumer_key_secret,
);
$nt->access_token($access_token);
$nt->access_token_secret($access_token_secret);

printで即表示してほしいので、即フラッシュに設定する

$|=1; # STDOUT auto flush

searchする。since_id=0にすると最新15件が得られる。
IDが前回と同じだったら 10秒待つ。
確か60秒に70アクセス以上は禁止。けど、不要な連発で迷惑かけないように。

my $last_id='0';
while(1){
    my $r;
    my @tubuyaki;
    while(1){
        $r=$nt->search({q=>$q,since_id=>"0"});
        last if($r->{results_per_page}>0 && $r->{max_id} ne $last_id);
        print ".";
        sleep(10);
    }
    print "\r";
    for my $status (@{$r->{results}}){
        my $u=$status->{from_user};
        my $s=$status->{text};
        last if($status->{id} eq $last_id);
        push(@tubuyaki,[$u,$s]);
    }
    $last_id=$r->{max_id};

得たつぶやきを表示する。
ユーザ名、URL、ハッシュタグに色を付ける。
コマンドラインで指定した文字を強調表示する。黄色と背景赤の2通り。

    while($#tubuyaki>0){
        my ($u,$t)=@{shift(@tubuyaki)};
        $u=colored($u,'blue');
        $t=~ s/(#[0-9A-Za-z-_]+)/colored(' '.$1,'green')/eg;
        $t=~ s/(@[A-Za-z-_]+)/colored($1,'cyan')/eg;
        $t=~ s/(http:[\x21-\x7e]+)/colored($1." ",'magenta')/eg;
        $t=~ s/($_)/colored($1,'yellow')/egi foreach(@sword1);
        $t=~ s/($_)/colored($1,'on_red')/egi foreach(@sword2);
        print "$u:".encode('utf8',"$t\n");
        sleep(1);
    }
}

アクセス制限もあるけど、見た目にも1つぶやきに1秒くらいがよいかと。

つかいかた:

$ ./twit-view.pl -s '停電' -s '輪番' -s '電車' -S '爆発' -S '原発' -S '放射' '#jishin -rt'

スクリーンショット...載せようかと思ったけど、
著作権的な問題ありそうなので、差し控えとく。
わたしはターミナル1個で表示させて情報を得てます!


Perlデータマンジング―データ加工のテクニック集Perlデータマンジング―データ加工のテクニック集
(2003/01)
デイビッド クロス

商品詳細を見る

モダンPerl入門 (CodeZine BOOKS)モダンPerl入門 (CodeZine BOOKS)
(2009/02/10)
牧 大輔

商品詳細を見る
スポンサーサイト


★☆★コメント★☆★

コメントの投稿

Name
Subject
Mail
URI
Comment
Pass
Secret 管理者にだけ表示を許可する

トラックバック

http://iyukki.blog56.fc2.com/tb.php/125-e5ee95c4

Perlでtwitterのつぶやきを検索表示する(2)

昨日書いた、 CodingFirst Perlでtwitterのつぶやきを検索表示する だけど、oAuth認証不要と分かったので変更。 これで、Twitterに何も登録しなくていいので、誰でも使えます。 つまり、これだけですぐ...

 | HOME | 

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。