package MixiPing; # MixiPing service module. [Mikipin] # writes your blog entry title and its permalink into mixi diary. # # Author : makamaka [at] donzoko.net # Lisence : same as Perl's one use strict; use Jcode; use WWW::Mixi; # When you call pingDigay() # # JSON-RPC version # pingDiary (id, password, items) # # id ... mixi acount(email) # password ... mixi password # items ... entries data array [item,item,...] # item ... entry data object {"link":"permalink", "title":"entry title"} # (entry title must be encoded in UTF-8.) # # XML-RPC version # MixiPing.pingDiary (utf8 id, utf8 password, array items) # # id ... mixi acount(email) # password ... mixi password # items ... array of struct item # item ... struct contains 'link' (utf8) and 'title' (utf8) # pingDiary (as Perl) # IN : $mixi_acount, $password, $entry_data (arrayref of hashref) # ($entry_data) # [ # {title => 'your blog entry title', link => 'entry_permalink'}, # ] # OUT : when login is not sucessful, return 0. otherwise return 1. sub pingDiary { my $server = shift; my ($mixi_id, $mixi_pass, $items) = @_; my $mixi = WWW::Mixi->new($mixi_id, $mixi_pass, -abort => sub{ 0; }); my $diary = {}; $mixi->login or return 0; for my $item ( $mixi->get_list_diary() ){ my ($id) = $item->{link} =~ /[^\w]id=(\d+)/; $diary->{ $item->{description} }->{id} = $id; $diary->{ $item->{description} }->{subject} = $item->{subject}; } for my $item (@$items){ my $title = jcode($item->{title},'utf8')->euc; my $link = $item->{link}; if($diary->{$link}){ # Edit entry if subject is changed. my $id = $diary->{$link}->{id}; $mixi->get_edit_diary_confirm( 'diary_id' => $id, 'diary_title' => $title, 'diary_body' => $link ) if($diary->{$link}->{subject} ne $title); } else{ # New entry $mixi->get_add_diary_confirm( 'diary_title' => $title, 'diary_body' => $link ); } } return 1; } 1;