из joomla в livejournal

16 ноября, 2008 · Posted in Без рубрики · 1 Comment 

Знаю, о том, как транслировать в ЖЖ произвольный текст написано немало. Но я, все же, напишу. Может даже для себя. А там, глядишь, и кому-то пригодится.

Итак. Есть 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 библиотеками):