001 #!/usr/local/bin/perl -w 002 use strict; 003 use LWP::UserAgent; 004 use Sysadm::Install qw(qquote); 005 use URI; 006 use JSON; 007 008 my $user = "zangzongzing"; 009 my $passwd = "*********"; 010 my $recipient = "mikeschi1li"; 011 012 my $api_key = "******************"; 013 my $secret = "*************"; 014 015 my $login_url = "https://login.yahoo.com/WSLogin/V1/get_auth_token"; 016 my $auth_token_url = "https://api.login.yahoo.com/oauth/v2/get_token"; 017 my $session_url = "http://developer.messenger.yahooapis.com/v1/session"; 018 my $message_url = "http://developer.messenger.yahooapis.com/v1/message/yahoo/$recipient"; 019 020 my($msg) = join ' ', @ARGV; 021 022 die "usage: $0 message" unless 023 length $msg; 024 025 my $ua = LWP::UserAgent->new(); 026 027 my $url = URI->new( $login_url ); 028 029 $url->query_form( 030 login => $user, 031 passwd => $passwd, 032 oauth_consumer_key => $api_key ); 033 034 my $resp = $ua->get( $url ); 035 036 if( $resp->is_error() ) { 037 die "Can't get request token: ", 038 $resp->message(), " ", $resp->content(); 039 } 040 041 my($request_token) = 042 ($resp->content() =~ /RequestToken=(.*)/); 043 044 $url = URI->new($auth_token_url); 045 046 $url->query_form( 047 oauth_consumer_key => $api_key, 048 oauth_nonce => int( rand 10000000 ), 049 oauth_signature => "$secret&", 050 oauth_signature_method => "PLAINTEXT", 051 oauth_timestamp => time(), 052 oauth_token => $request_token, 053 oauth_version => "1.0" 054 ); 055 056 $resp = $ua->get( $url ); 057 058 if( $resp->is_error() ) { 059 die "Can't get access token: ", 060 $resp->message(), " ", $resp->content(); 061 } 062 063 my $u = URI->new(); 064 $u->query( $resp->content() ); 065 my %form = $u->query_form; 066 067 $session_url = URI->new( $session_url ); 068 069 $session_url->query_form( 070 oauth_consumer_key => $api_key, 071 oauth_nonce => int( rand 10000000 ), 072 oauth_signature => 073 "$secret&$form{oauth_token_secret}", 074 oauth_signature_method => "PLAINTEXT", 075 oauth_timestamp => time(), 076 oauth_token => $form{oauth_token}, 077 oauth_version => "1.0" 078 ); 079 080 $resp = $ua->post( $session_url, 081 Content_Type => 082 'application/json; charset=utf-8', 083 Content => 084 q[ {"presenceState" : 0, 085 "presenceMessage" : "I'm alive!" }] ); 086 087 if( $resp->is_error() ) { 088 die "Can't get session: ", 089 $resp->message(), " ", $resp->content(); 090 } 091 092 my $data = from_json( $resp->content() ); 093 094 $message_url = URI->new( $message_url ); 095 096 $message_url->query_form( 097 oauth_consumer_key => $api_key, 098 oauth_nonce => int( rand 10000000 ), 099 oauth_signature => 100 "$secret&$form{oauth_token_secret}", 101 oauth_signature_method => "PLAINTEXT", 102 oauth_timestamp => time(), 103 oauth_token => $form{oauth_token}, 104 oauth_version => "1.0", 105 sid => $data->{sessionId}, 106 ); 107 108 $resp = $ua->post( $message_url, 109 Content_Type => 110 'application/json; charset=utf-8', 111 Content => 112 '{"message" : ' . qquote($msg) . ' }' 113 ); 114 115 if( $resp->is_error() ) { 116 die "Can't send message: ", 117 $resp->message(), " ", $resp->content(); 118 }