«Движуха» — отслеживание изменений во «friend of»

new XML_RPC_Value($user,'string'), 'hpassword' => new XML_RPC_Value(md5(htmlentities($pass)),'string')), 'struct')); $msg = new XML_RPC_Message("LJ.XMLRPC.friendof", $params); $client = new XML_RPC_Client("/interface/xmlrpc", "www.livejournal.com", 80); $response = $client->send($msg); $v = $response->value(); if (!$response->faultCode()) { $usr_qwr = mysql_query('select date_format(usr_lastlogin,"%e.%m.%Y %T") from users where usr_name="'.$user.'"'); if (mysql_num_rows($usr_qwr)) { list($lastlogin) = mysql_fetch_row($usr_qwr); $stored = array(); $actual = array(); $old_qwr = mysql_query('select fof_friendname from friendof where fof_name="'.$user.'"'); while (list($old_friend) = mysql_fetch_row($old_qwr)) { array_push($stored,$old_friend); } list($key,$fo) = $v->structeach(); $i = 0; while ($friend = $fo->arraymem($i++)) { if ($friend->structmem('type')) { next; } else { $uname = $friend->structmem('username'); array_push($actual,$uname->scalarval()); } } $new = array_diff($actual,$stored); $retired = array_diff($stored,$actual); print 'Пользователь: '.$user.'
'; print 'Предыдущая проверка: '.$lastlogin.'
'; if (count($new)) { sort($new); print ((count($new) == 1)?'Добавил: ':'Добавили: '); for ($i = 0; $i < count($new); $i++) { print ($i?', ':'').'[info]'.$new[$i].''; mysql_query('insert into fof_changes values ("'.$user.'","'.$new[$i].'",now(),"+")'); mysql_query('insert into friendof values ("'.$user.'","'.$new[$i].'")'); } print '
'; } else { print 'Никто не добавил
'; } if (count($retired)) { sort($retired); print ((count($retired) == 1)?'Вас удалил LJ-user: ':'Вас удалили LJ-user\'ы: '); for ($i = 0; $i < count($retired); $i++) { print ($i?', ':'').'[info]'.$retired[$i].''; mysql_query('insert into fof_changes values ("'.$user.'","'.$retired[$i].'",now(),"-")'); mysql_query('delete from friendof where fof_name="'.$user.'" and fof_friendname="'.$retired[$i].'"'); } print '
'; } else { print 'Никто не удалил
'; } print '
'; $pls_qwr = mysql_query('SELECT count(foc_name) FROM fof_changes WHERE foc_name="'.$user.'" AND foc_direction = "+"'); list($plus) = mysql_fetch_row($pls_qwr); $min_qwr = mysql_query('SELECT count(foc_name) FROM fof_changes WHERE foc_name="'.$user.'" AND foc_direction = "-"'); list($minus) = mysql_fetch_row($min_qwr); print 'Прогресс: '.($plus - $minus).'

'; $foc_qwr = mysql_query('select foc_friendname,date_format(foc_when,"%e.%m.%Y") as foc_when,foc_direction from fof_changes where foc_name="'.$user.'" order by fof_changes.foc_when desc'); if (mysql_num_rows($foc_qwr)) { print 'Протокол:
'; $when = ""; while ($foc_obj = mysql_fetch_object($foc_qwr)) { if ($when != $foc_obj->foc_when) { print ($when?'
':'').$foc_obj->foc_when.'
'; $when = $foc_obj->foc_when; } print (($foc_obj->foc_direction == '+')?'+':'-').'[info]'.$foc_obj->foc_friendname.'
'; } } mysql_query('update users set usr_lastlogin=now() where usr_name="'.$user.'"'); } else { mysql_query('insert into users (usr_name,usr_lastlogin) values("'.$_POST['username'].'",now())'); list($key,$fo) = $v->structeach(); $i = 0; while ($friend = $fo->arraymem($i++)) { if ($friend->structmem('type')) { next; } else { $uname = $friend->structmem('username'); mysql_query('insert into friendof values ("'.$user.'","'.$uname->scalarval().'")'); } } print 'Вы здесь впервые. Список включивших Вас во френды ('.($i-1).') загружен с LJ-сервера. Теперь вы сможете отслеживать его изменения.'; } } else { print "Fault
"; print "Code: ".$response->faultCode()." Reason '".$response->faultString()."'\n"; } mysql_close($dbc); } else { ?>
Имя пользователя:  Пароль:  
Пароль нигде не сохраняется, и нужен только для доступа к LJ-серверу.
Но если Вы не уверены, что Вас не обманывают, то лучше не пользуйтесь этим сервисом (от греха :)