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ом новго поста.
Бля, нахуй ты код сделал с номерами строк? Как это копипастить?
Лол, чувак, если включить мозг, то можно нажать ⌘⌥J (консоль) и ввести команду:
$('.number code').remove();
И не нужно будет ручками работать.
Уважаемая редакция, посмотрите пожалуйста на приедённую ниже цитату.
19.$hor = date("G", $date);
34. "hour" => new xmlrpcval($hour, "int"),
Это я такой молодец, нашёл ошибку в коде или может быть есть в этом какой-то тайный смысл?
Хмм.. Такой ошибки я что-то не наблюдаю, возможно, вы что-то напутали...
Кто-нибудь что-то толковое скажет? Скрипт работает или нет?
Спасибо! Нашел еще пару варианотов скрипта, но у них с кодировкой проблеммы были. Ваша версия сразу заработала! После того как стёр номера строк ))
Даблин, косяк с плагином оформления кода пхп ))
А кто-нибудь знает как в сообщество посттить?
Для этого в массиве $post нужно добавить еще один элемент:
"usejournal" => new xmlrpcval("ИМЯ ЖУРНАЛА", "string")
p.s. Админ, у меня кнопка «отправить» под формой ответа на комментарий не видна. Так надо? Пришлось через Firebug «вытаскивать».
Да, у меня тоже не видна, косяк... то ли темы, то ли я когда ее ковырял что-то попортил. Вообще, пора бы бложик проапгрейдить, времени все нет. Спасибо за замечание :)
Энибоди, меня интересует скрипт работает на данный момент? потому что у меня был свой скрипт и вот начиная с конца октября он почему-то перестал работать.
вот думаю стоит ли заморачиваться или сразу писать код на прямую авторизацию и постинг через сайт.
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
Оны пытается использовать перловский обработчик чтоли? Или это ретранслированный ответ жжшного сервака?
Да, это похоже на ошибку, сгенерированную на сервере ЖЖ. Видимо, там поменялся формат представления данных, которые отсылаются нашим скриптом.
Попробовал Ваш скрипт - на локальном хостинге все отлично работает.
У хостера почему-то выдает ошибку "An error occurred: Code: 5Reason: 'Connect error: Operation timed out (60)'"
Не могли бы подсказать, чем это может быть вызвано?
Вам нужно внести изменения в настройки php на хостинге. Сейчас у вас выставлено, что после 60 секунд выполнения php-скрипта закрывается соединение, не дождавшись результата его выполнения.
Боже как вы уже достали "школьники", какой смысл копипастить статью которая содержит абсолютно идентичный код, ни чем не отличается от миллиона других статей, скопировали код, добавили seo ключей и счастливы. Понимания кода - 0, понимания принципа работы - 0. Не знаешь вообще не пиши.
Эм, как бы тебе сказать, тут дело в том, что этот пост трехлетней давности, и есть очень большая вероятность того, что этот код и есть тот исходник, с которого копировали миллион других статей.
Годный скрипт, все работает - спасибо огромное, кучу времени сэкономил.
заработал, можно в пример сразу добавить картинку - просто в текст тэг img src и она будет. Кодировка глючная
Скажите, а можно автоматически комментировать чужие посты и (или) отвечать на чужие комментарии?
Если да, как это сделать? (не спамер).