Отправка заметок с помощью PHP-сокетов в LiveJournal

отправка сообщения в LiveJournal через PHP-сокет Вчера завершился курс по PHP. Во время занятия, один из слушателей предложил замечательную идею - настроить отправку сообщений с помощью PHP-клиента XML-RPC в LiveJournal. А тут еще прочитал очень интересный отчет Интернет 2012 , решил попробовать. Предлагаемая реализация:

  1. вооружаемся XML-RPC функциями PHP или сокетами
  2. изучаем API журнала (особенно событие postevent)
  3. отправляем запрос
  4. получаем ответ

можно посмотреть результат отправки через сокет

Подготовил время отправки, сформировал XML-строку

  1. $query = '<?xml version="1.0" encoding="UTF-8"?>
  2. <methodCall>
  3. <methodName>LJ.XMLRPC.postevent</methodName>
  4. <params>
  5. <param>
  6.  
  7. <value><struct>
  8. <member><name>username</name>
  9. <value><string>YOURNAME</string></value>
  10. </member>
  11.  
  12. <member><name>password</name>
  13. <value><string>YOURPASSWORD</string></value>
  14. </member>
  15.  
  16. <member><name>event</name>
  17. <value><string>Сегодня на &lt;a href="http://www.specialist.ru/dictionary/definition/php"&gt;курсах&lt;/a&gt; , слушатели предложили с помощью XML-RPC сервера на PHP, организовать отправку заметок в LJ. Если вы видите эту заметку, то это значит опыт удался и клиент на PHP работает. Подробней о работе клиента напишу в блоге и на &lt;a href="http://phpspec.ru"&gt;сайте о PHP&lt;/a&gt;
  18. </string></value></member>
  19.  
  20.  
  21. <member><name>subject</name>
  22. <value><string>Тест XML-RPC клиента на PHP для LJ</string></value>
  23. </member>
  24.  
  25. <member><name>lineendings</name>
  26. <value><string>pc</string></value>
  27. </member>
  28.  
  29. <member><name>year</name>
  30. <value><int>'.$year.'</int></value>
  31. </member>
  32.  
  33.  
  34. <member><name>mon</name>
  35. <value><int>'.$month.'</int></value>
  36. </member>
  37.  
  38.  
  39. <member><name>day</name>
  40. <value><int>'.$day.'</int></value>
  41. </member>
  42.  
  43. <member><name>hour</name>
  44. <value><int>'.$hour.'</int></value>
  45. </member>
  46.  
  47. <member><name>min</name>
  48. <value><int>'.$minute.'</int></value>
  49. </member>
  50. </struct></value>
  51.  
  52. </param>
  53. </params>
  54. </methodCall>';

Запрос отправил через сокет

  1. $length = strlen($query);
  2.  
  3. $fp=fsockopen("livejournal.com",80, $errno,$errstr,30);
  4. if (!$fp) {
  5. echo$errstr . ($errno) . "<br />";
  6. } else {
  7. $out= "POST /interface/xmlrpc HTTP/1.0\r\n";
  8. $out.= "User-Agent: XMLRPC Client 1.0\r\n";
  9. $out.= "Host: www.livejournal.com\r\n";
  10. $out.= "Content-Type: text/xml\r\n";
  11. $out.= "Content-Length: ".$length."\r\n\r\n".$query;
  12. fwrite($fp, $out);
  13. while (!feof($fp)) {
  14. echo fgets($fp,128);
  15. }
  16. fclose($fp);
  17. }