Хорошо, соглашусь. Но для меня это откровенно говоря неважно. Упоминание имени будет встречаться только на Яндексе, а нигде на сайте использовано не будет. Посему уж лучше будут логины.
Эээ. Я вообще только сейчас увидел, что тут еще и деньги дают. Не возьму, я за опенсорс ) Лучше отправьте их в копилку проекта LS. Кошельки тут написаны.
Не согласен. Если вы вовсю используете на сайте имена пользователей, то конечно такой вариант имеет право на жизнь. Я лично привык идентифицировать пользователя по его логину на любом сервисе. К примеру, на сайтах LS в комментариях пишется логин, а не имя.
$tb_sock = fsockopen($target["host"], 80);
fputs($tb_sock, "POST ". $target["path"]. $target["query"]. " HTTP/1.1\r\n");
fputs($tb_sock, "User-Agent: The Incutio XML-RPC PHP Library (multicall client)\r\n");
fputs($tb_sock, "Host: ". $target["host"]. "\r\n");
fputs($tb_sock, "Content-Type: text/xml\r\n");
fputs($tb_sock, "Content-length: ". strlen($tb_send). "\r\n");
fputs($tb_sock, "Connection: close\r\n\r\n");
fputs($tb_sock, $tb_send);
// Gather result
while (!feof($tb_sock)) {
$response .= fgets($tb_sock, 128);
}
// Close socket
fclose($tb_sock);
// Did the trackback ping work
strpos($response, '<error>0</error>')? $return = true: $return = false;
// send result
return $return;
}
В файле classes/modules/Topic/Topic.class.php дописал в методы AddTopic и UpdateTopic:
ping ("ping.blogs.yandex.ru/RPC2", $oTopic->getUserLogin(),$oTopic->getBlogUrlFull());
Ответ от сервера яндекса получаю OK. Отправляется соответственно логин оставившего пост и урл на обновленный блог. Как вариант — оставлять ссылку на конкретный элемент, но это можно сделать для комментариев.
В итоге валидатор сказал мне: «This is a valid RSS feed.»
НО! Вопрос с почтой для авторов остается открытым.
Заменил шаблон index.tpl у rss:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>{$aChannel.title}</title>
<link>{$aChannel.link}</link>
<atom:link href="http://www.controlmusic.ru/rss/" rel="self" type="application/rss+xml" />
<description><![CDATA[{$aChannel.description}]]></description>
<language>{$aChannel.language}</language>
<managingEditor><![CDATA[{$aChannel.managingEditor} ({$aChannel.managingEditorName})]]></managingEditor>
<generator>{$aChannel.generator}</generator>
{foreach from=$aItems item=oItem}
<item>
<title><![CDATA[{$oItem.title|escape:'html'}]]></title>
<guid isPermaLink="true">{$oItem.guid}</guid>
<link>{$oItem.link}</link>
<description><![CDATA[{$oItem.description}]]></description>
<pubDate>{date_format date=$oItem.pubDate format="r"}</pubDate>
<author><![CDATA[{$oItem.author}@somesite.ru ({$oItem.author})]]></author>
<category><![CDATA[{$oItem.category|replace:',':']]></category>
<category><![CDATA['}]]></category>
</item>
{/foreach}
</channel>
</rss>
У меня из ошибок выдает только:
<author>###</author>
Т.е. не хватает мыла пользователя. Но имхо это неправильно, почту юзверей открывать нельзя.
Остальное — рекомендации по вычищению из rss скриптов и object, добавление atom:link и объявление mime-типа контента как rss+xml.
joesmith@example.com (Joe Smith) Будет валидным.
Дописываем в Topic.entity.class.php:
public function getRssUrl() {
if ($this->getBlogType()=='personal') {
return DIR_WEB_ROOT.'/rss/log/'.$this->getUserLogin().'/';
} else {
return DIR_WEB_ROOT.'/rss/blog/'.$this->getBlogUrl().'/';
}
}
и уже пинг используем так:
ping ("
Закинул вот такую функцию в конец файла include/function.php:
function ping ($url, $blogname, $blogurl) {
$tb_send='<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param>
<value>'.$blogname.'</value>
</param>
<param>
<value>'.$blogurl.'</value>
</param>
</params>
</methodCall>';
$target=parse_url($url);
$tb_sock = fsockopen($target["host"], 80);
fputs($tb_sock, "POST ". $target["path"]. $target["query"]. " HTTP/1.1\r\n");
fputs($tb_sock, "User-Agent: The Incutio XML-RPC PHP Library (multicall client)\r\n");
fputs($tb_sock, "Host: ". $target["host"]. "\r\n");
fputs($tb_sock, "Content-Type: text/xml\r\n");
fputs($tb_sock, "Content-length: ". strlen($tb_send). "\r\n");
fputs($tb_sock, "Connection: close\r\n\r\n");
fputs($tb_sock, $tb_send);
// Gather result
while (!feof($tb_sock)) {
$response .= fgets($tb_sock, 128);
}
// Close socket
fclose($tb_sock);
// Did the trackback ping work
strpos($response, '<error>0</error>')? $return = true: $return = false;
// send result
return $return;
}
В файле classes/modules/Topic/Topic.class.php дописал в методы AddTopic и UpdateTopic:
ping ("
Ответ от сервера яндекса получаю OK. Отправляется соответственно логин оставившего пост и урл на обновленный блог. Как вариант — оставлять ссылку на конкретный элемент, но это можно сделать для комментариев.