pashatter

かいはつちゅう
最終目的は世界征服 pasha さんの二人羽織。
仕様
RSS 監視(HTML 監視)
下記を5分間隔で監視して変化があったら tweet します。
(tweet 時はご主人さまにも DM で通知しています。)
ソース | ツイート |
http://www.kokia.com/blog/atom.xml | "KOKIA otonami blog 更新!「%s」 %s #pashatter" |
http://ancocoro.shop-pro.jp/?mode=rss | "KOKIA official store コキア印からのおしらせ!「%s」 %s #pashatter" |
http://www.jvcmusic.co.jp/-/ArtistRSS/A012051.xml | "KOKIA ビクターエンタテインメント最新情報!「%s」 %s #pashatter" |
http://www.kokia.com/news/live/index.html | "KOKIA official web Live & Event情報!「%s」 %s #pashatter" |
http://www.kokia.com/news/media/index.html | "KOKIA official web Media情報!「%s」 %s #pashatter" |
http://www.kokia.com/news/release/index.html | "KOKIA official web Release / Other情報!「%s」 %s #pashatter" |
http://www.kokia.com/movie/index.html | "KOKIA official web Movie情報!「%s」 %s #pashatter" |
official web の切り出しロジック
もし仕様が変わったら誰か正規表現考え直してください...
if("$line" =~ /<p class=\"CP1\"><a href=\"(http.*)\">(.*)<\/a><\/p>/){ my $item = {'url' => "$1", 'title' => "$2"};
フィルタ付き RSS 監視(HTML 監視)
下記を5分間隔で監視して変化があったら @pashatter アカウントで tweet します。
(フィルタ条件なので絶対ではありませんで、pasha アカウントではつぶやきません。DM も送信しません。)
ソース | ツイート |
http://www.cdjournal.com/rss/news.xml | "KOKIA CDJournal.com 最新更新情報!?「%s」 %s #pashatter" |
http://www.cdjournal.com/rss/newcd.xml | "KOKIA CDJournal.com New Rerease CD!?「%s」 %s #pashatter" |
http://www.cdjournal.com/rss/newdvd.xml | "KOKIA CDJournal.com New Rerease DVD!?「%s」 %s #pashatter" |
http://www.cdjournal.com/rss/kamicd.xml | "KOKIA CDJournal.com 紙ジャケCD新譜!?「%s」 %s #pashatter" |
http://www.oricon.co.jp/rss/news/total/ | "KOKIA ORICON STYLE/ニュース総合!?「%s」 %s #pashatter" |
http://natalie.mu/music/feed/news | "KOKIA ナタリー/ニュース!?「%s」 %s #pashatter" |
http://mameromantic.com/?feed=rss2 | "KOKIA 晴れ豆情報!?「%s」 %s #pashatter" |
http://www.barks.jp/RSS/barks_news.rdf | "KOKIA BARKS - 総合ニュース!?「%s」 %s #pashatter" |
http://www.barks.jp/RSS/barks_feature.rdf | "KOKIA BARKS - 特集!?「%s」 %s #pashatter" |
http://www.barks.jp/RSS/barks_listen.rdf | "KOKIA BARKS - 視聴!?「%s」 %s #pashatter" |
http://www.barks.jp/RSS/barks_watch.rdf | "KOKIA BARKS - 動画!?「%s」 %s #pashatter" |
http://www.barks.jp/RSS/barks_news_today.rdf | "KOKIA BARKS - 今日は何の日!?「%s」 %s #pashatter" |
※晴れ豆は特殊処理(晴れ豆側の問題で RSS が閉じない)
フィルタ
部分一致で誤検出するのは仕様です。
/(KOKIA)|(KOKIA)|(コキア)|(こきあ)|(吉田亜紀子)|(smoothes)|(smoothes)|(Smoothes)|(Smoothes)/
google連携
「KOKIA」を含む google 検索結果が更新されたとき、 @pashatter アカウントにて tweet します。
http://ajax.googleapis.com/ajax/services/search/web?q=KOKIA | "google's new entries ^_^/「%s」 %s #pashatter" |
相互フォロー
@pashatter は、フォローされたらフォロー返しをし、アンフォローされたらアンフォロー返しをします。(鍵付きのユーザーにはなにも行いません。)
開発日記
2013/11/13
「フォロワーが300人を超えるとリフォローが動かなくなる」時限爆弾を取り除いた。twitter APIの制限で、一回あたりに取得できるフォロワーとフレンドが300人のため、それらの取得を分けて行えるようにした。
2013/07/13
google reader 終了に伴い、google への問い合わせ方法を RSS から API に変更。
2013/06/25
リツイートの条件に、ツイート全体が指定文字数以上であることという条件を設けた。文字数は16文字以上とした。
2013/06/22
リツイートの条件として、全角含有率のスレッショルドを設けた。リンクだけのツイートを排除するのが狙い。動画サイトを完全排除するのもつまらないので。
実績を見ると、50%くらいで精度が高まるようだ。
2013/06/21
google の検索結果があまりにも違法 mp3 ばかりなので、検索結果に対してフィルタをかけられるようにした。
2013/06/20
リツイート検索は、下記である程度フィルタして、次に bot の screen_name をチェックして弾くようにした。
KOKIA -#NowPlaying -【定期】 -フォローお願いします -リプライにて教えてくださると嬉しいです
また、検索APIはユーザー名も検索対象にしているので、検索結果の本文に再度チェックをしている。
言語については日本語だけを対象とした。
2013/06/18
Twitter API V1.1 に対応。
12:00 に健全性チェック用ツイートを行うようにした。
「保存された検索」キーワードに対して引けたツイートを、RTするようにした。(「KOKIA」だけだとタイムラインが大変なことになりそうだったので、とりあえず「KOKIA すごい」にしてある)
2012/09/09
BARKS追加
2012/08/22
ナタリー追加
BBS追加
2012/08/15
RSS の取得エラーをキャッチするように改良。
2012/08/08
晴れ豆対応
晴れ豆のRSSは、指定エントリ数が多すぎてぶちっと切れているのが新しい順に途中までできている、だからタグを解釈して対応
http://mameromantic.com/?feed=rss2
2012/08/06
フィルタ付き RSS 監視機能追加。
2012/07/26(2)
相互フォロー機能追加。
2012/07/26
- official web Movie情報に対応。
- google 連携追加。
2012/03/29
KOKI薬曲と地球イチバンをスケジュール定義から削除。
2012/03/01
但し書きを再修正。「放送の有無、時間は変更になる可能性があります。」
2012/02/18
KOKI薬曲の再放送は、本放送に関係なく、第1・3土曜日だった!!
こりゃびっくりで、修正。
但し書きは、「放送時間は変更になることがあります」から「※放送なかったらごめんなさい」に変更。
2012/02/06
ログを見たら、youtube は、やっぱり特定のタイミングで、一部のエントリが一瞬 RSS から見えなくなるみたい。なんだかなー。とりあえず回復するロジックがきちんと動くので誤tweetはしなくなってる。
スケジュール機能の指定は、30分刻みでできるようにした。
そんなわけで明日はKOKI薬曲なので、早速スケジュール機能が動作。
明日も動くといいなぁ。
2012/02/02
youtube 誤動作は、どうも、特定のエントリが1回抜けて、次のサイクルでまた出てきたのではなかろうか。
と考えて、RSS から無くなっても、1日分はキャッシュしておき、消えて浮かんだエントリの誤検出をしないようにした。
あとは、デバッグ用に、きちんとログとステータスを残すようにした。(最初からそうしておくべきだよね、うん)
2012/02/01
youtube の RSS がうまく取得できない。(コメントされると pubDate が変化する)
API 仕様によれば、 http://gdata.youtube.com/feeds/api/videos?author=KOKIAch&orderby=published とか http://gdata.youtube.com/feeds/users/KOKIAch/uploads?orderby=published でアップロード順に取得できるはずなんだけど、そうなってくれない。PubDate がコメントで更新されちゃうからではないかと想像。なのでとりあえずクロール先から除外した。
→その後、ブラウザがソートしてたことが判った。 http://gdata.youtube.com/feeds/base/users/KOKIAch/uploads?alt=rss&orderby=published で、きちんと取れるっぽい。
KOKI薬曲の再放送は、「第1・3土曜日」とうたっているけれど、正確ではなくて、「第1・3火曜日の週の土曜日」。(たとえば今月2月の場合は、第1土曜日のほうが第1火曜日より早く来る)
体調不良で寝込んでいたらアタマの中に神が降りてきて、そう仰せられたので、スケジュール定義ファイルを修正。処理自体は変えてなくて、定義の変更でできた。
2012/01/31
RSS を順につぶやく機能の実装は、最後につぶやいたエントリを保管しておいて、それより後に追加されたエントリをつぶやく仕掛けになっておりました。
アーティストさんの場合、前もって仕込んでおいて、解禁日にパブリッシュすることもあるので、このロジックだと、RSS の途中に新しいエントリが挿入されると tweet できないことがある。てか、あった。
対策として、前回処理した RSS をナメて、今回取得したエントリが、前回取得した RSS に含まれていない場合は新規項目として扱うようにした。処理がうまくいったら、それを保管し次の処理のチェックに使う。
暴走対策として、タイムアウト等で一時的に RSS が取れなかった場合、次のタイミングで RSS を全部 tweet しかねないので、そのようなとき(今回組み立てたエントリ情報のカウントが0のとき)はチェックデータを更新しないようにした。
このチェックは、ハッシュ(MD5)でやってるんだけど、キーの作成にタイトルと URL だけにしたら、ビクターの場合、重複することがあるのがわかった。エントリの日時も要素に加えることで、重複しないように対策した。
2012/01/30
曜日判定機能実装。1時間に1回、週と曜日、時間を見てツイートをします。処理自体は5分間隔で動作するので、年月日時が変化したらそのタイミングで1回だけ処理。
また、「翌日が第1火曜日か」という処理は、1日が火曜日の場合、けっこう煩雑なのですが、$time() + 86400(UNIX 通算秒)を基準に判定しているのでヌケモレはないんじゃぁなかろうか。
twitter では mailto: が使えないので、とりあえず、リダイレクトするだけの人を作成(ancoro_mail.pl)
2012/01/27
レンタルサーバー、一年くらい前に取り替えしているんですが、エラーが出ないという問題が。プロバイダに確認したら現状では仕様とのこと。
とりあえず、リダイレクトすれば捕まえられるので、開発効率が上がった。
参考までに、プロバイダから提示された他の解決策をφ(`д´)メモメモ...
ほぼ同様のことを行うモジュール、CGI::Carpはいかがでしょうか?
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
print header('text/html; charset=UTF-8');
print2 "hello";
※print2でエラーを発生させています。
official web の中身は、一回 XML::FeedPP?::RDF->new() して、内部的に RSS を作るようにした。これをそのままファイルに落としたら、みんな欲しがる feed かもね。
read&write パーミッションでは DM を参照できないのだけど、では「送るだけ」はできるのか?答えから言うと「できる」。$twit->new_direct_message() でぽいっと投げられた。使うかどうかは未定。
設定の保管に使う .yml が直アクセスで見れるようなかんじだったので,これはよろしくない。
.htaccess を下記のように作成。
<Files ~ "\.(yml)$"> deny from all </Files>
2012/01/26
フィード関連は網羅したはず。
あと、みんな欲しいと思っていたに違いない、official web の検出を入れた。
ホームページのレイアウトに大きな変更があると、見つからなくなるかもしれないけど、リニューアルしたばっかだし、当面大丈夫じゃないかなぁ(適当)
プログラム的には、自分の勉強不足も多々あるわけで…
もう少し HTML と RSS で処理を共通化できるはずなんだけど、力業的実装。
2012/01/25
勢い余ってリリース!万が一、変なツイートしたらどうしよう・・・
ちなみにソースを UTF-8 で書いたことによって、UTF-8 を外部から取り込む際に変換が必要になってた。なるる。こんな感じで対応。
my $update = 'KOKIA otonami blog 更新「' . decode("UTF-8", $item->title()) . '」 ' . $item->link() . ""; $twit->update($update);
decode するのね。おりこうになった。
2012/01/24
いきなり get_authorization_url() が動かないっつー不思議現象。
Mozilla::CA を CPAN したらいくようになった。わからーん。
んで、なんとかんとか OAuth を実装して、ツイートもでけた。
ソースを utf-8 にしたらこの宣言がいるってよ。
use utf8;
cron も仕掛けた。
ToDo?
バグ報告・機能要望はこちらへ