2010年5月5日水曜日

twitterのつぶやきをmixi日記に投稿するスクリプトを作ってみたけど…

twitterの前日のつぶやきをまとめてmixiの日記に投稿するスクリプトを書きました。
mixiの日記投稿のAPIは公開されていナイっぽいので、
こちらを参考にさせていただきました。

mixi for iPhoneから発掘されたmixi日記投稿用API

以下がコードです。今回はPerlを使いました。

use strict;
use warnings;
use LWP::UserAgent;
use LWP::Authen::Wsse;
use HTTP::Request::Common;
use XML::DOM;
use Encode;
use Date::Parse;
use DateTime;
use utf8;


my $entry = "";
my $title = "";

my $ua = LWP::UserAgent->new;

my $req = HTTP::Request->new('GET', "http://twitter.com/statuses/user_timeline.xml");
$req->authorization_basic('(★twitterのユーザ名を入れる)', '(★twitterのパスワードを入れる)');
my $res = $ua->request($req);
if ($res->is_success) {
    my $parser = new XML::DOM::Parser;
    my $doc = $parser->parse($res->content);
    my @status = $doc->getElementsByTagName('status');
    my $t_dt = DateTime->today;
    my $prev_day = $t_dt->day - 1;
    $title .= "  " . $t_dt->year . '/' . $t_dt->month . '/' . $prev_day;
    $title .= encode('utf8', "のつぶやき");
    foreach (@status) {
  my @children = $_->getChildNodes;
  my $text;
  my $dt;
  foreach (@children) {
      if ($_->getNodeType() == ELEMENT_NODE) {
    if ($_->getTagName() eq "text") {
        #$text =  encode('shift_jis', $_->getFirstChild->toString);
        $text =  encode('utf8', $_->getFirstChild->toString);
    } elsif ($_->getTagName() eq "created_at") {
        my $epoch =  str2time($_->getFirstChild->toString);
        $dt = DateTime->from_epoch(epoch => $epoch);
    }
      }
  }
  if ($dt->year == $t_dt->year && $dt->month == $t_dt->month && $dt->day == $t_dt->day-1) {
      $entry .= "  " . $dt->year . '/' . $dt->month . '/' . $dt->day;
      $entry .= " " . $text . "\n\n";      
  }
    }
} else {
    print "error";
    exit;
}

my $id = '(★mixiのログインメールアドレスを入れる)';
my $pass = '(★mixiのパスワードを入れる)';
my $member_id = (★mixiのメンバーidを入れる);

my $ua2 = LWP::UserAgent->new;
$ua2->credentials('mixi.jp:80', '', $id, $pass);

my $content = <<__XML__;
<?xml version='1.0' encoding='utf-8'?>
<entry xmlns='http://www.w3.org/2007/app'>
  <title>$title</title>
  <summary>$entry</summary>
</entry>
__XML__

print $content;

$res = $ua2->post(
  "http://mixi.jp/atom/diary/member_id=$member_id",
  'Content-Type' => 'application/atom+xml',
  'content' => $content,
     );

warn $res->content unless $res->code == 201;


使ってみて思ったのが、
twitterは日ごろ、その瞬間に思っていることを気軽に投稿するものなので、
1日まとめてしまうと、なんだか、まとまらないものになってしまいます。

日記なんかは内容をきちんと考えて文章をまとめますが、
twitterはそんなことを考えません。

このようなtwitterをmixiに投稿するスクリプトを常に回してしまうと、
逆にtwitterのつぶやきを日記に公開することを前提として考えながらつぶやいてしまうので、
twitterのメリットがなくなってしまいます。

ということでこのスクリプトはお蔵入りです。

0 件のコメント: