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ом новго поста.

Бля, нахуй ты код сделал с номерами строк? Как это копипастить?
[Ответить]
Никита Reply:
декабря 15, 2012 at 14:36
Лол, чувак, если включить мозг, то можно нажать ⌘⌥J (консоль) и ввести команду:
$(‘.number code’).remove();
И не нужно будет ручками работать.
[Ответить]
Уважаемая редакция, посмотрите пожалуйста на приедённую ниже цитату.
19.$hor = date(«G», $date);
34. «hour» => new xmlrpcval($hour, «int»),
Это я такой молодец, нашёл ошибку в коде или может быть есть в этом какой-то тайный смысл?
[Ответить]
Хмм.. Такой ошибки я что-то не наблюдаю, возможно, вы что-то напутали…
[Ответить]
Кто-нибудь что-то толковое скажет? Скрипт работает или нет?
[Ответить]
Спасибо! Нашел еще пару варианотов скрипта, но у них с кодировкой проблеммы были. Ваша версия сразу заработала! После того как стёр номера строк ))
[Ответить]
leksus Reply:
ноября 29, 2010 at 22:11
Даблин, косяк с плагином оформления кода пхп ))
[Ответить]
А кто-нибудь знает как в сообщество посттить?
[Ответить]
Yevhen Reply:
июня 15, 2011 at 11:15
Для этого в массиве $post нужно добавить еще один элемент:
«usejournal» => new xmlrpcval(«ИМЯ ЖУРНАЛА», «string»)
p.s. Админ, у меня кнопка «отправить» под формой ответа на комментарий не видна. Так надо? Пришлось через Firebug «вытаскивать».
[Ответить]
leksus Reply:
июня 19, 2011 at 19:35
Да, у меня тоже не видна, косяк… то ли темы, то ли я когда ее ковырял что-то попортил. Вообще, пора бы бложик проапгрейдить, времени все нет. Спасибо за замечание :)
[Ответить]
Энибоди, меня интересует скрипт работает на данный момент? потому что у меня был свой скрипт и вот начиная с конца октября он почему-то перестал работать.
вот думаю стоит ли заморачиваться или сразу писать код на прямую авторизацию и постинг через сайт.
[Ответить]
free for all..never pay for aline to all those payservers….
[Ответить]
Интересный вариант конечно! но такие скрипты быстро умирают — из-за смены програмного кода у ЖЖ и таких сайтов…
[Ответить]
А у меня вот что выдает((( :
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
Оны пытается использовать перловский обработчик чтоли? Или это ретранслированный ответ жжшного сервака?
[Ответить]
leksus Reply:
декабря 23, 2012 at 16:57
Да, это похоже на ошибку, сгенерированную на сервере ЖЖ. Видимо, там поменялся формат представления данных, которые отсылаются нашим скриптом.
[Ответить]
Попробовал Ваш скрипт — на локальном хостинге все отлично работает.
У хостера почему-то выдает ошибку «An error occurred: Code: 5Reason: ‘Connect error: Operation timed out (60)'»
Не могли бы подсказать, чем это может быть вызвано?
[Ответить]
Остап Reply:
ноября 25, 2015 at 11:27
Вам нужно внести изменения в настройки php на хостинге. Сейчас у вас выставлено, что после 60 секунд выполнения php-скрипта закрывается соединение, не дождавшись результата его выполнения.
[Ответить]
Боже как вы уже достали «школьники», какой смысл копипастить статью которая содержит абсолютно идентичный код, ни чем не отличается от миллиона других статей, скопировали код, добавили seo ключей и счастливы. Понимания кода — 0, понимания принципа работы — 0. Не знаешь вообще не пиши.
[Ответить]
leksus Reply:
сентября 3, 2013 at 19:17
Эм, как бы тебе сказать, тут дело в том, что этот пост трехлетней давности, и есть очень большая вероятность того, что этот код и есть тот исходник, с которого копировали миллион других статей.
[Ответить]
Годный скрипт, все работает — спасибо огромное, кучу времени сэкономил.
[Ответить]
заработал, можно в пример сразу добавить картинку — просто в текст тэг img src и она будет. Кодировка глючная
[Ответить]
Скажите, а можно автоматически комментировать чужие посты и (или) отвечать на чужие комментарии?
Если да, как это сделать? (не спамер).
[Ответить]