最近、Wassrをいじることが多くなってきたので、API経由でいろいろできたら便利かなと思いちょっと作ってみました。
ただ、JSONの仕様を勘違いしており、予想外に時間がかかったため、投稿スクリプトしかできませんでした。
一応、ユーザのヒトコトを取得できるメソッドは定義済みです。後はスクリプトの方で返ってくるJSONオブジェクトをパースしてあげれば、よしなにできると思います。
ヒトコト系を取得したいならuser_timelineメソッドのAPIのURLを変更してあげるだけでできると思います。
update.pl
Wassrに投稿するだけの単純なスクリプトです。
ホントはユーザIDとかパスワードは外部ファイルに置くのがいいのだとは思います。
ちなみに、スクリプトを動かす環境は文字コードをみれば分かるとおり、Windowsを想定しています。
#!/usr/bin/env perl use strict; use warnings; use utf8; use Encode; use Readonly; use Wassr; # コレは外部ファイルに置きたい…。 Readonly my $USER => 'ユーザID'; Readonly my $PASSWORD => 'パスワード'; if (not $ARGV[0]) { die 'Not defined tweet'; } my $wassr = Wassr->new({ user => $USER, password => $PASSWORD, }); $wassr->update(decode('sjis', $ARGV[0]));
Wassr.pm
実際の処理を行っているモジュールです。
なんかいろいろ気にくわない部分があるのですが、時間がないのでとりあえずのものを上げておきます。投稿とユーザタイムラインの取得しかできません。
package Wassr; use strict; use warnings; use utf8; use Carp; use JSON; use LWP::UserAgent; use Readonly; { Readonly my $NET_LOCATON => 'api.wassr.jp:80'; Readonly my $REALM => 'API Authentication'; Readonly my $UPDATE_API => 'http://api.wassr.jp/statuses/update.json'; Readonly my $USER_TIMELINE_API => 'http://api.wassr.jp/statuses/user_timeline.json'; Readonly my $APPLICATION_NAME => 'wasasuzu'; # プライベートメソッドのつもり my $post = sub { my ($ua, $url, $options) = (@_); my $response = $options ? $ua->post($url, $options) : $ua->post($url); if(not $response->is_success) { croak 'Bad Request: ', $response->as_string; } my $status = decode_json($response->decoded_content); if ($status->{error}) { croak 'Bad Response: ', $status->{error}; } return $status; }; my $get = sub { my ($ua, $url) = (@_); my $response = $ua->get($url); if(not $response->is_success) { croak 'Bad Request: ', $response->as_string; } my $status = decode_json($response->decoded_content); return $status; }; sub new { my ($class, $options) = (@_); my $ua = LWP::UserAgent->new; $ua->credentials($NET_LOCATON, $REALM, $options->{user}, $options->{password}); my $self = { ua => $ua, }; return bless $self, $class; } sub update { my ($self, $tweet) = (@_); return $post->( $self->{ua}, $UPDATE_API, { source => $APPLICATION_NAME, status => $tweet, } ); } sub user_timeline { my ($self, $user) = (@_); return $get->( $self->{ua}, $USER_TIMELINE_API, {id => $user}, ); } } 1;