из joomla в livejournal
Знаю, о том, как транслировать в ЖЖ произвольный текст написано немало. Но я, все же, напишу. Может даже для себя. А там, глядишь, и кому-то пригодится.
Итак. Есть Joomla, необходимо постить в жж новый материал.
Открываем файл /components/com_content/models/article.php
Находим строки(418-421):
if ($isNew) { $this->_id = $article->_db->insertId(); }
после них вставляем это:
function LJpost($post,$subj){ require_once ("/ваш путь к джумле/xmlrpc/IXR_Library.inc.php"); define('LJ_HOST', 'www.livejournal.com'); define('LJ_PATH', '/interface/xmlrpc'); define('LJ_LOGIN', '********'); define('LJ_PASSWD', '*******'); $ljClient = new IXR_Client(LJ_HOST, LJ_PATH); if (!$ljClient->query('LJ.XMLRPC.getchallenge')) { echo 'Error [' . $ljClient->getErrorCode().'] '.$ljClient->getErrorMessage(); } else { $ljResponse = $ljClient->getResponse(); $ljChallenge = $ljResponse['challenge']; $ljArgs = array(); $ljArgs['username'] = LJ_LOGIN; $ljArgs['auth_method'] = 'challenge'; $ljArgs['auth_challenge'] = $ljChallenge; $ljArgs['auth_response'] = md5($ljChallenge . md5(LJ_PASSWD)); $ljArgs['ver'] = "1"; $ljArgs['event'] = $post; //iconv('windows-1251', 'UTF-8', $post); если ваш текст и заголовок не в UTF, используйте строчку с iconv $ljArgs['subject'] = $subj; //iconv('windows-1251', 'UTF-8', $subj); $time_difference = 2; //timezone=Kiev :) $year = date('Y', (time() + ($time_difference * 3600))); $month = date('m', (time() + ($time_difference * 3600))); $day = date('d', (time() + ($time_difference * 3600))); $hour = date('H', (time() + ($time_difference * 3600))); $minute = date('i', (time() +($time_difference * 3600))); $ljArgs['year'] = $year; $ljArgs['mon'] = $month; $ljArgs['day'] = $day; $ljArgs['hour'] = $hour; $ljArgs['min'] = $minute; $ljArgs['usejournal'] = 'pdahelp'; //в какой журнал или сообщество постим. Не забываем стать френдом\присоединиться к сообществу перед этим $ljArgs['props'] = array( 'opt_preformatted' => true, 'opt_backdated' => false, 'taglist' => 'pda, pocket pc, news, article', //iconv('windows-1251', 'UTF-8', 'pda, pocket pc, news, article'), ); $ljArgs['security'] = 'public'; $ljMethod = 'LJ.XMLRPC.postevent'; if (!$ljClient->query($ljMethod, $ljArgs)) { $err='error ['.$ljClient->getErrorCode().'] '.$ljClient->getErrorMessage(); } else { $ljResponse = $ljClient->getResponse(); $err=false; //print_r($ljResponse); } } return $err; } $text_id=$this->_id ; $subj=$article->title; $post=$article->introtext; $fulltxt=$article->fulltext; if (strlen($fulltxt)>10) { $post.="..."; } $post.="<p style=\"border:1px black solid;text-align:center\">эта статья опубликована на сайте <a href=\"http://pdahelp.net\">pdahelp.net</a><br>"; $post.="полный текст статьи можно прочитать по этой ссылке: <a href=\"http://www.pdahelp.net/index.php?view=article&id=".$text_id."\">".$subj."</a></p>"; $err=LJpost($post,$subj); if ($err) { $file=fopen('ваш путь к джумле/tmp/output.txt','w+'); fwrite($file,$err); fclose($file); }
Поскольку joomla не выдает ошибок в коде, на этапе отладки просматриваем файл output.txt на предмет ошибок.
Не забываем положить в каталог xmlrpc этот файл (в распакованном виде).
Недостатки:
- Пост в ЖЖ происходит сразу, без утверждения.
- Пост в ЖЖ происходит только при публикации материала с главной страницы. Не из админки.
- Ссылка на статью выглядит некрасиво. Впрочем, документация о том, как сделать из нее «красоту», доступна.
Функция LJPost взята отсюда
Зачем вообще все это ? Две цели:
1. удобство для пользователей ЖЖ.
2. собственно реклама.
Для примера, работающие трансляции (некоторые отличаются xmlrpc библиотеками):