mixiニュースの記事を取得する #perl
久々にmixiにログインした。
結構、アカウント残ってるものなんですね。
せっかくログインしたので、perlの勉強がてら書いてみた
概要
・今回は、mixiニュースのランキングから記事を取得してみました。
・記事はhtml形式で取得するようにしたので、plaggerなどを用いて、gmail等に送れるようにすれば、便利に使えるかも
・WWW::Mixiというモジュールを使えば、もっと簡単に書けると思いますが、勉強ということで、自分なりにコーティングした。
・サービス目的での使用は、違反?だと思うので、個人使用ならセーフ?
サンプルソース
#!/usr/bin/perl use strict; use warnings; use WWW::Mechanize; use Web::Scraper; use YAML::Syck; ## Instance my $yml = "mixi.yml"; my $conf = YAML::Syck::LoadFile($yml) or die "$yml:$!"; my $mech = new WWW::Mechanize; ## Login warn "login as $conf->{email}\n"; $mech->get('http://mixi.jp/'); $mech->submit_form(fields =>$conf); ## Scrape links $mech->get("http://news.mixi.jp/show_ranking.pl"); my $rank = scraper { process '//table[@class="rankingTable"]//td[@class="newsTitle"]/a' , 'url[]' => '@href'; result 'url'; }; my $ref = $rank->scrape($mech->content, $mech->uri); foreach my $links (@{$ref}){ my $entries = scrp_pg($links); ## Output foreach my $entry (@{$entries}){ binmode STDOUT, ":utf8"; print $links; print $entry->{title} . "\n"; # print $entry->{body} . "\n"; } }; ## Scrape Pages sub scrp_pg { my $link = shift; $mech->get($link); my $scrp = scraper { process '//div[@id="bodyMainArea"]', 'entry[]' => scraper { process '//div[@class="newsArticle"]//h2',title => 'TEXT'; process '//div[@class="article"]', body => 'HTML'; }; result 'entry'; }; my $hml_ref = $scrp->scrape($mech->content, $mech->uri); return $hml_ref; } print "==============END==============\n"; __END__
・ユーザー名(email)とパスワード(password)は、mixi.yml
フォーマットは
email: your@host.name
password: yourpassword
・ログイン認証はWWW::Mechanize
ymlで取得したファイルからリファレンスで引数を渡してログイン
はじめはWWW::UserAgentで書こうとしていたのですが、form処理がよくわからなかったので、Mechanizeさんにやっていただいた。ちゃんと、勉強しないと・・・
・urlの抜き出しと記事の抜き出しは、Web::Scraper
配列に入れて、ループ処理させています。
実行結果。(URLとタイトルのみ表示させるようにしています)
#root@test:~/perl$date;perl mixinews_get.pl 2012年 2月 26日 日曜日 13:20:25 JST login as your@host.name http://news.mixi.jp/view_news.pl?id=1929030&media_id=84 RAG FAIRおっくんが顔面麻痺で入院、公式ブログで現在の病状を報告。 http://news.mixi.jp/view_news.pl?id=1928909&media_id=95 一人暮らしで良い点・悪い点 http://news.mixi.jp/view_news.pl?id=1928722&media_id=20 ミニチュアダックス10匹無残、女が飼育放棄か http://news.mixi.jp/view_news.pl?id=1929109&media_id=42 アヤパン感涙、北川が愛妻にサプライズ新曲 http://news.mixi.jp/view_news.pl?id=1928837&media_id=131 『映画けいおん!』出演の声優は、元「ボキャブラ」芸人だった http://news.mixi.jp/view_news.pl?id=1928813&media_id=95 男性に対して「器が小さい」と感じた瞬間 http://news.mixi.jp/view_news.pl?id=1929147&media_id=47 ポケモン、シリーズ最新作『ポケットモンスター ブラック2・ホワイト2』発表!発売は6月 http://news.mixi.jp/view_news.pl?id=1928742&media_id=45 ダメ嫁役がハマると思う女優ランキング http://news.mixi.jp/view_news.pl?id=1928895&media_id=20 配偶者控除廃止、撤回を示唆…岡田副総理 http://news.mixi.jp/view_news.pl?id=1928732&media_id=2 <客引き>大阪・ミナミで横行 半年で苦情1135件 http://news.mixi.jp/view_news.pl?id=1929135&media_id=8 アヤパン披露宴に小田、さだ、ユーミン… http://news.mixi.jp/view_news.pl?id=1928657&media_id=20 小学校で給食用エレベーター落下、作業員死亡 http://news.mixi.jp/view_news.pl?id=1928880&media_id=20 被災中学生に迫られ…平野復興相「胸にグサッ」 http://news.mixi.jp/view_news.pl?id=1928707&media_id=62 保温対策を!冬のネコちゃんケアをおさらい http://news.mixi.jp/view_news.pl?id=1928693&media_id=95 不調を招く! 目の酷使が日常的になっていませんか? http://news.mixi.jp/view_news.pl?id=1928804&media_id=121 プロのカメラマンに聞く、料理写真をおいしそうに撮る方法 http://news.mixi.jp/view_news.pl?id=1928784&media_id=54 野見隆明、“日本アカデミー新人賞”に大喜び「まだ信じられない」 http://news.mixi.jp/view_news.pl?id=1929262&media_id=20 東京マラソン、藤原新が2位…川内は14位 http://news.mixi.jp/view_news.pl?id=1929077&media_id=76 告白したいとき、背中を押してくれる「片思いソング」9パターン http://news.mixi.jp/view_news.pl?id=1928717&media_id=4 「1票格差」違法状態に=遠のく合意、解散時期に影響も―衆院選挙制度 ==============END============== #root@naka01:~/perl$
感想
・前回に引き続き、Web::Scraperを活用しました。サイトの巡回とかしながら動画のみを自動ダウンロードすることも可能な、そんな素敵なモジュール:)