PHP скрипт автоматического постинга в LiveJournal (ЖЖ)

Опять-же, аналогично автопостингу в WordPress, я перерыл половину инета, чтоб найти нормальный php-скрипт постинга в ЖЖ. И опять-же, оказалось, что надо не искать, а самому разобраться с библиотекой XMLRPC, с помощью которой возможно постить как в WordPress, так и в LiveJournal.

Оказалось, это еще проще, чем писать оснастку для постинга в WP. Качаем XML-RPC библиотеку и смотрим код:

<?php
//входные данные
$login = 'crawler';
$passw = 'i-love-leksus';
$subj = 'Тестовый пост в ЖЖ';
$text = 'Если вы читаете этот текст у себя в ЖЖ - значит, тест прошел! ура!';

// включаем библиотеку XML-RPC
include("lib/xmlrpc.inc");

// Задаем кодировку
$xmlrpc_internalencoding = 'UTF-8';

// Задаем время поста (А не время постинга! Учтите, что пост будет опубликован сразу!)
$date = time();
$year = date("Y", $date);
$mon = date("m", $date);
$day = date("d", $date);
$hour = date("G", $date);
$min = date("i", $date);

// Перед формированием массива данных, нужно удостовериться, что данные subj и text находятся в правильной кодировке! Если кодировка не та, конвертируем в UTF-8

// заполняем массив с необходимыми переменными
$post = array(
 "username" => new xmlrpcval($login, "string"),
 "password" => new xmlrpcval($passw, "string"),
 "event" => new xmlrpcval($text, "string"),
 "subject" => new xmlrpcval($subj, "string"),
 "lineendings" => new xmlrpcval("unix", "string"),
 "year" => new xmlrpcval($year, "int"),
 "mon" => new xmlrpcval($mon, "int"),
 "day" => new xmlrpcval($day, "int"),
 "hour" => new xmlrpcval($hour, "int"),
 "min" => new xmlrpcval($min, "int"),
 "ver" => new xmlrpcval(2, "int")
);

// на основе массива создаем структуру
$post2 = array(
 new xmlrpcval($post, "struct")
);

// создаем XML сообщение для сервера
$f = new xmlrpcmsg('LJ.XMLRPC.postevent', $post2);

// описываем сервер
$c = new xmlrpc_client("/interface/xmlrpc", "www.livejournal.com", 80);
$c->request_charset_encoding = "UTF-8";

// по желанию смотрим на XML-код того что отправится на сервер
//echo nl2br(htmlentities($f->serialize()));

// отправляем XML сообщение на сервер
$r = $c->send($f);

// анализируем результат
if(!$r->faultCode()) {
 // сообщение принято успешно и вернулся XML-результат
 $v = php_xmlrpc_decode($r->value());
 print_r($v);
} else {
 // сервер вернул ошибку
 print "An error occurred: ";
 print "Code: ".htmlspecialchars($r->faultCode());
 print "Reason: '".htmlspecialchars($r->faultString())."'\n";
}
?>

В случае удачного постинга скрипт вернет массив с тремя значениями, одно из которых будет URLом новго поста.

Архив обсуждения

Исторические комментарии сохранены из старого блога. Это архив, новые комментарии не добавляются. Всего: 22.

  1. Стосег

    Бля, нахуй ты код сделал с номерами строк? Как это копипастить?

    1. Никита

      Лол, чувак, если включить мозг, то можно нажать ⌘⌥J (консоль) и ввести команду:
      $('.number code').remove();
      И не нужно будет ручками работать.

  2. Стосег

    Уважаемая редакция, посмотрите пожалуйста на приедённую ниже цитату.

    19.$hor = date("G", $date);
    34. "hour" =&gt; new xmlrpcval($hour, "int"),

    Это я такой молодец, нашёл ошибку в коде или может быть есть в этом какой-то тайный смысл?

  3. leksus

    Хмм.. Такой ошибки я что-то не наблюдаю, возможно, вы что-то напутали...

  4. Яванский

    Кто-нибудь что-то толковое скажет? Скрипт работает или нет?

  5. Igor

    Спасибо! Нашел еще пару варианотов скрипта, но у них с кодировкой проблеммы были. Ваша версия сразу заработала! После того как стёр номера строк ))

    1. leksus

      Даблин, косяк с плагином оформления кода пхп ))

  6. Аlexey

    А кто-нибудь знает как в сообщество посттить?

    1. Yevhen

      Для этого в массиве $post нужно добавить еще один элемент:
      "usejournal" =&gt; new xmlrpcval("ИМЯ ЖУРНАЛА", "string")

      p.s. Админ, у меня кнопка «отправить» под формой ответа на комментарий не видна. Так надо? Пришлось через Firebug «вытаскивать».

      1. leksus

        Да, у меня тоже не видна, косяк... то ли темы, то ли я когда ее ковырял что-то попортил. Вообще, пора бы бложик проапгрейдить, времени все нет. Спасибо за замечание :)

  7. coguar

    Энибоди, меня интересует скрипт работает на данный момент? потому что у меня был свой скрипт и вот начиная с конца октября он почему-то перестал работать.

    вот думаю стоит ли заморачиваться или сразу писать код на прямую авторизацию и постинг через сайт.

  8. bebexxl1

    free for all..never pay for aline to all those payservers....

  9. pikasso

    Интересный вариант конечно! но такие скрипты быстро умирают - из-за смены програмного кода у ЖЖ и таких сайтов...

  10. Sttas

    А у меня вот что выдает((( :

    An error occurred: Code: -1Reason: 'Application failed during request deserialization: not well-formed (invalid token) at line 14, column 21, byte 347 at /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/XML/Parser.pm line 187

    Оны пытается использовать перловский обработчик чтоли? Или это ретранслированный ответ жжшного сервака?

    1. leksus

      Да, это похоже на ошибку, сгенерированную на сервере ЖЖ. Видимо, там поменялся формат представления данных, которые отсылаются нашим скриптом.

  11. Rolling

    Попробовал Ваш скрипт - на локальном хостинге все отлично работает.
    У хостера почему-то выдает ошибку "An error occurred: Code: 5Reason: 'Connect error: Operation timed out (60)'"
    Не могли бы подсказать, чем это может быть вызвано?

    1. Остап

      Вам нужно внести изменения в настройки php на хостинге. Сейчас у вас выставлено, что после 60 секунд выполнения php-скрипта закрывается соединение, не дождавшись результата его выполнения.

  12. deep

    Боже как вы уже достали "школьники", какой смысл копипастить статью которая содержит абсолютно идентичный код, ни чем не отличается от миллиона других статей, скопировали код, добавили seo ключей и счастливы. Понимания кода - 0, понимания принципа работы - 0. Не знаешь вообще не пиши.

    1. leksus

      Эм, как бы тебе сказать, тут дело в том, что этот пост трехлетней давности, и есть очень большая вероятность того, что этот код и есть тот исходник, с которого копировали миллион других статей.

  13. pawww

    Годный скрипт, все работает - спасибо огромное, кучу времени сэкономил.

  14. Дмитрий

    заработал, можно в пример сразу добавить картинку - просто в текст тэг img src и она будет. Кодировка глючная

  15. Михаил

    Скажите, а можно автоматически комментировать чужие посты и (или) отвечать на чужие комментарии?
    Если да, как это сделать? (не спамер).