из 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 библиотеками):

