PHP-Скрипт для загрузки iTunes и Twitter Вконтакт

Только для Mac OS! :)


error_reporting(E_ALL);
/*
tvkontakte 0.3
vkontakte.ru status updater from twitter
modified by Alexander Simonov
modified for iTunes Support by Igor Goroun
made by Vladimir Smirnoff
http://orl.sumy.ua
mail@smirnoff.sumy.ia
*/
// SETTINGS, EDIT ME
define ('TWITTER_USERNAME','username');
define ('VKONTAKTE_LOGIN','vkontake_email');
define ('VKONTAKTE_PASSWORD','vkontakte_password');
define ('PREPEND_WORD_ITUNES','iTunes: '); // max lenght - 20 = 160 in vkontakte - 140 in twitter
define ('PREPEND_WORD_TWITTER','Twitter: '); // max lenght - 20 = 160 in vkontakte - 140 in twitter


class vkuserapi {
private $curlh = null;
public $uid = null; // vkontakte userid
private $sid = null; // vkontakte session id

public function __construct ($login,$password) {
$this->curlh = curl_init();
$request = 'http://login.userapi.com/auth?site=2&login=force&pass='.urlencode($password).'&email='.urlencode($login);
curl_setopt($this->curlh, CURLOPT_URL,$request);
curl_setopt($this->curlh, CURLOPT_FAILONERROR, true);
curl_setopt($this->curlh, CURLOPT_FOLLOWLOCATION, false); // no redirects
curl_setopt($this->curlh, CURLOPT_RETURNTRANSFER, true);
curl_setopt($this->curlh, CURLOPT_POST, false);
curl_setopt($this->curlh, CURLOPT_HEADER, true);
$auth_result = curl_exec($this->curlh);
if (preg_match("/remixmid=(\d+)/", $auth_result, $matches)) $this->uid = $matches[1]; // get user id from http headers
if (preg_match("/.*;sid=(\w*)/", $auth_result, $matches)) $this->sid = $matches[1]; // get session id from http headers
}

public function call ($func,$params) {
curl_setopt($this->curlh, CURLOPT_HEADER, false);
$request = 'http://userapi.com/data?act='.$func.'&'.http_build_query ($params).'&sid='.$this->sid;
curl_setopt($this->curlh, CURLOPT_URL,$request);
$result = curl_exec($this->curlh);
return json_decode($result);
}

public function __destruct () {
$request = 'http://login.userapi.com/auth?​login=logout&site=2&​sid='.$this->sid;
curl_setopt($this->curlh, CURLOPT_URL,$request);
curl_exec($this->curlh);
curl_close ($this->curlh);
}
}

// get twitter last status
//$rss = simplexml_load_file('http://twitter.com/statuses/user_timeline.xml?screen_name='.TWITTER_USERNAME.'&count=1');
//$last_status_twitter = html_entity_decode($rss->status->text,ENT_QUOTES);

// get iTunes song
exec("/usr/bin/osascript -e 'tell application \"iTunes\" to player state as string'",$itstate);
if ($itstate[0]=="playing") {
exec("/usr/bin/osascript -e 'tell application \"iTunes\" to name of current track as string'",$trackname);
exec("/usr/bin/osascript -e 'tell application \"iTunes\" to artist of current track as string'",$trackartist);
$last_itunes_track = html_entity_decode($trackartist[0]." - ".$trackname[0]);

$vkontakte = new vkuserapi (VKONTAKTE_LOGIN,VKONTAKTE_PASSWORD);
$status = $vkontakte->call ('activity',array('id'=>$vkontakte->uid,'from'=>0,'to'=>1));
$last_status_vkontakte = str_replace (PREPEND_WORD_ITUNES,'',html_entity_decode($status->d[0][5],ENT_QUOTES));
if ($last_status_vkontakte != $last_itunes_track.'.' && $last_status_vkontakte != $last_itunes_track)
$vkontakte->call ('set_activity',array('ts'=>time(),'text'=>PREPEND_WORD_ITUNES.$last_itunes_track));
else echo ("no update needed\n");

} else {
// get twitter last status
$rss = simplexml_load_file('http://twitter.com/statuses/user_timeline.xml?screen_name='.TWITTER_USERNAME.'&count=1');
$last_status_twitter = $rss->status->text;
$saved_twitter_status = file_get_contents(dirname(__FILE__).'/lasttweet.txt', 160);
if ( $saved_twitter_status != $last_status_twitter) {
file_put_contents(dirname(__FILE__).'/lasttweet.txt',$last_status_twitter);
// get vkontakte last status
$vkontakte = new vkuserapi (VKONTAKTE_LOGIN,VKONTAKTE_PASSWORD);
$vkontakte->call ('set_activity',array('ts'=>time(),'text'=>PREPEND_WORD_TWITTER.$last_status_twitter));
}
else {
echo "no updates";
}
}


unset ($vkontakte); //logout

Комментариев нет:

Отправить комментарий