mixiボイスからはてなブックマークできる、連携機能をでっち上げました

本日はてなよりアナウンスがあった、
Twitter のつぶやきからブクマできる連携機能
http://hatena.g.hatena.ne.jp/hatenabookmark/20091022
に触発されて、mixiボイスからブクマするのを勢いで適当に作ってみました。



以下コード

#!/usr/bin/perl 

use strict;
use warnings;

use AnyEvent::Impl::Perl;
use AnyEvent;
use WWW::Mixi::Scraper;
use WebService::Hatena::Bookmark::Lite;
use Config::Pit;
use Date::Calc;

my $hatena_conf = Config::Pit::pit_get('http://www.hatena.ne.jp');
my $mixi_conf   = Config::Pit::pit_get('http://mixi.jp');


my $mixi = WWW::Mixi::Scraper->new(
    email    => $mixi_conf->{email} , 
    password => $mixi_conf->{password} ,
    mode     => 'TEXT'
);

my $org_post_time = $ARGV[0] || join('', map{ sprintf( "%02d", $_); } Date::Calc::Today_and_Now() );

my $cv_timer = AnyEvent->condvar;
my $timer; $timer = AnyEvent->timer(
    after   => 0,
    interval => 60,
    cb   => sub {
        my @echo_list = $mixi->list_echo->parse();

        if( _is_bookmark_post( $echo_list[0]->{comment} ) &&
            _is_new_post( $echo_list[0]->{'time'} )       ){

            # post to hatena bookmark
            _post2hatena( $echo_list[0]->{comment} );
        }
    },
);

$cv_timer->recv;

sub _is_new_post{
    my $post_time = shift;
    $post_time ||= 0;

    if( $post_time > $org_post_time ){
        $org_post_time = $post_time;
        return 1;
    }
    else{
        return 0;
    }
}

sub _is_bookmark_post{
    my $comment = shift;

    $comment ||= '';
    return $comment =~ /B\!/;
}

sub _post2hatena{
    my $comment = shift;

    my( $str , $url ) = split( /B!/, $comment);

    my $hatena = WebService::Hatena::Bookmark::Lite->new(
        username => $hatena_conf->{username} , 
        password => $hatena_conf->{password}
    );

    return $hatena->add(
        url     => $url,
        comment => $str
    );
}


以下が実験結果。
mixiで発言する
[
はてブで確認する
[


なんか出来ているように見えます。


とりあえず勢いすぎた反省ポイント。
・AnyEvent意味ない。
はい、、使ってみたかっただけです。
ここのところの流れに追いつきたいと思いつつ、触る機会を作れてなかったので、無理矢理です。
gihyo.jpで連載されている内容(http://gihyo.jp/dev/serial/01/modern-perl/0013)を参考にさせていただき、書いてみました。
別にこれならwhileでループすればいいと言われたら何も言えません。


・毎回スクレイピングしている
はい、、RSSフィードでも吐く形式にすれば良かったんですが、ちゃんと勉強します><
これのせいで、posttimeをずっと保持しておいて、それより最新だったら、なんて比較もしてます。お恥ずかしい限り。


もしくはmixiボイスにAPIでもあれば、一番ラクだったのに(多分、今はないハズ)


※ちなみに

$mixi->list_echo->parse();

$mixi->recent_echo->parse();

に変えると、マイミク全員のボイスをブクマできます。(だから何だ!)


今回も勢い余って痛さだけが残る形に終わってしまいました・・・