2009年06月04日 23:45 [Edit]

API - Twitterfeed から Hatena::Bookmark Web Hookへ

今まで本blogのTwitterにおける更新通知は、ttwitterfeedでやっていたのだけど、これを期にはてなブックマークの Web Hook 経由に切り替えました。


twitterfeedだと、一時間ごとの確認なので、本blogへの投稿がtwitterに投稿されるまで最大一時間かかるのですが、これだとセルクマした瞬間に投稿が行われるので反映がずっと速くなります。

Source:

#!/usr/env/bin perl
use strict;
use warnings;
use utf8;
use CGI;
# use Net::Twitter; - prereqs too heavy!                                        
use LWP::UserAgent;
use URI::Escape;
our $VERSION = sprintf "%d.%02d", q$Revision: 0.1 $ =~ /(\d+)/g;

# customize the following                                                       
my $hb_webhook_key = 'WEBHOOK_KEY';
my $tw_username    = 'username@twitter';
my $tw_password    = 'password@twitter';

# and leave the rest                                                            

my $q = CGI->new;
$q->charset('utf-8');
die "Auth failed" if $q->param('key') ne $hb_webhook_key;

my $status = $q->param('status');
my $message =
  $status eq 'add' ? join ' ',
  $q->param('title'), $q->param('url'), $q->param('comment')
  : $status eq 'update' ? join ' ',
  $q->param('comment'), 'http://b.hatena.ne.jp/entry/' . $q->param('url')
  : '';
if ($message) {
    my $tw_uri = 'http://twitter.com/statuses/update.json';
    my $req = HTTP::Request->new( POST => $tw_uri );
    $req->authorization_basic( $tw_username, $tw_password );
    $req->content( "status=" . uri_escape($message) );
    my $res =
      LWP::UserAgent->new( agent => $ENV{HTTP_USER_AGENT} )->request($req);
    print $q->header(
        -type   => $res->header('Content-Type'),
        -status => $res->code,
      ),
      $res->content;
}
else {
    print $q->header( -type => 'text/plain', -status => 304 ), 'Not Modified';
}

手法としては

と同等なのですが、Net::Twitterを使わずにLWPでTwitter APIを直たたきしています。Net::Twitterはかなり依存が重いのが一番の理由です。レンタルサーバーなど、CPAN Moduleのインストールが難しいところでも、たいていの場合LWPは入っているので、ユーザー名とパスワードだけ変更すればそのまま動くでしょう。

Enjoy!

Dan the Auto-Twitterer

追記:とおもいきや、小鳥が出てきやがった>twitter。やれやれ。

追々記:

(開発者さま向け) はてなブックマーク Web Hook 機能を公開しました - はてなブックマーク日記 - 機能変更、お知らせなど
コメントに日本語を含む時、そもそも通知が飛ばないような気がするのですが、不具合が起きていないでしょうか。

こちらでも確認。タグにascii以外が含まれていても駄目な模様。

追^3記:

addの時のみ投稿するよう変更。

追^4記:

updateの時には、コメントとはてぶへのURLを投稿するよう変更。


この記事へのトラックバックURL

この記事へのトラックバック
長年サラリーマンをしてきた島田さんが体験した、本当に信じられない現実をありのままに告白してくれます。 つづきは、こちらの動画で、聞いてあげてください。 C K D b G J 5 S N b o v E P M C 6 E b Z p n u X x...
33歳男性サラリーマンの告白【或る隣人の秘密】at 2009年07月28日 00:16
はてなが6月3日に公開したはてなブックマークのWeb Hook機能を利用して、ブックマークするとともに指定したwordpressのブログに投稿するプラグインを練習がてら作ってみた。 設定画面もあ...
[wordpress]はてブのWeb Hookを利用してブログに投稿するプラグインを作ったよ【Ryuzee.com】at 2009年06月06日 05:23
英語の読めない僕の設定が悪いのか、ここ数日twitterfeedがちゃんと動いてくれてない。 それまでにも、1時間ごとに更新するようになっているにもかかわらず、数日分のRSSを一気にまとめて流したり、とよくわからない挙動をしていたのだが、5月30日に一気に5本流したのを最後...
twitterfeedが調子悪いかも【地方の中規模印刷会社で苦悩するWebデザイナー改めWebディレクターの日記】at 2009年06月05日 15:47
誰かこのログを作れるサービスがなんというか教えてくださいな。 昨日、この日誌のデザインをいろいろいじってた。途中でTwitterからかなんかで、おもしろいロゴが作れるサービスを見つけたので作ってみた。ぶくましたつもりがない!Twitterみてもない!どうしようね。 って
名前を忘れてしまった : Twitterをめぐる話題?【HPO:機密日誌】at 2009年06月05日 15:16
この記事へのコメント
小鳥のチェック柄シャツ野郎なんか踏み潰してしまえ
Posted by 子犬パコパコ at 2009年06月05日 06:12
昔、弾サンが叱った角田和司さんのブログが閉鎖されたらしいですよ。
Posted by at 2009年06月05日 00:03