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 и она будет. Кодировка глючная
[Ответить]
Скажите, а можно автоматически комментировать чужие посты и (или) отвечать на чужие комментарии?
Если да, как это сделать? (не спамер).
[Ответить]