Скрипт для Яндекс.Новостей
|
|
Автор: Олег с клещами
Опубликовано: 622 дня назад (8 сентября 2010)
Блог: Чайникоблог
Рубрика: Скрипты
Редактировалось: 4 раза — последний 17 марта 2011
Настроение: среднее
Играет: Pink Floyd - 77
|
+18↑ Голосов: 18 |
В последнее время растёт популярность сервиса Яндекс.Новости. Но, пока ещё можно туда протиснуть сайт. Это здорово поднимает трафик, но может помочь только реальным СДЛ новостной направленности.
Основная проблема в экспортном файле, который у Яндекса очень даже эксклюзивный.Обсуждали это здесь Как с этим справиться?
Значит, так:
1. Шлём письмо о своём сайте сюда info@news.yandex.ru
2. Они его проверяют, и если он достаточно новостной, они напишут вам сами и дадут достаточно запутанные инструкции.
3. Заполняете присланные бланки, подпись, печать, скан и отправляете им. Потребуют копию ЕГРЮЛ или паспорта (смотря на кого домен). Всё отправляете по факсу или сканом.
4. Запаковываете оригиналы в конверт и отправляете сюда: 119021, Россия, г. Москва, ул. Льва Толстого, д. 16 Компания «Яндекс».
5. Здесь начинается самое интересное — экспортный файл. Стандартный RSS их не устраивает, надо делать свой по их требованиям. Вручную — большой гемор, учитывая, что может придётся делать его каждый день. Здесь вам на помощь придёт мой волшебный скрипт. Скрипт помещаем в корень сайта, ставим права 744. Запускаем его браузером (для тех, кто в танке: просто набираем в адресной строке http://site.ru/yarss.php), он выполняется (напишет «Всё ОК!») и формирует файл по адресу http://site.ru/yarss.xml — это и есть искомый нами и обретенный столь чудесно экспортный файл яндекса.
6. Скрипт меняет столь любимую нами 1251 на utf-8
7. Сообщаем о своей победе яндексу и не забываем всю процедуру повторять периодически.
Автозапуск делать не стал специально, мне он был не нужен.
Есть в скрипте мальнький косячек, я пока не разбирался в чем дело. Суть в том, что по всем правилам, скрипт должен обрезать текст статьи до открывающего тега блока «Похожие статьи», но, почему-то не хочет и обрезает после закрывающего тега. Может, кто из ассов подправит. У кого этот плагин не работает, тому нечего беспокоиться. Те, у кого он есть, могут отключать на время работы скрипта, иначе придётся потом править вручную.
Естественно в теле скрипта надо поставить свои адреса.
Основная проблема в экспортном файле, который у Яндекса очень даже эксклюзивный.Обсуждали это здесь Как с этим справиться?
Значит, так:
1. Шлём письмо о своём сайте сюда info@news.yandex.ru
2. Они его проверяют, и если он достаточно новостной, они напишут вам сами и дадут достаточно запутанные инструкции.
3. Заполняете присланные бланки, подпись, печать, скан и отправляете им. Потребуют копию ЕГРЮЛ или паспорта (смотря на кого домен). Всё отправляете по факсу или сканом.
4. Запаковываете оригиналы в конверт и отправляете сюда: 119021, Россия, г. Москва, ул. Льва Толстого, д. 16 Компания «Яндекс».
5. Здесь начинается самое интересное — экспортный файл. Стандартный RSS их не устраивает, надо делать свой по их требованиям. Вручную — большой гемор, учитывая, что может придётся делать его каждый день. Здесь вам на помощь придёт мой волшебный скрипт. Скрипт помещаем в корень сайта, ставим права 744. Запускаем его браузером (для тех, кто в танке: просто набираем в адресной строке http://site.ru/yarss.php), он выполняется (напишет «Всё ОК!») и формирует файл по адресу http://site.ru/yarss.xml — это и есть искомый нами и обретенный столь чудесно экспортный файл яндекса.
6. Скрипт меняет столь любимую нами 1251 на utf-8
7. Сообщаем о своей победе яндексу и не забываем всю процедуру повторять периодически.
Автозапуск делать не стал специально, мне он был не нужен.
Есть в скрипте мальнький косячек, я пока не разбирался в чем дело. Суть в том, что по всем правилам, скрипт должен обрезать текст статьи до открывающего тега блока «Похожие статьи», но, почему-то не хочет и обрезает после закрывающего тега. Может, кто из ассов подправит. У кого этот плагин не работает, тому нечего беспокоиться. Те, у кого он есть, могут отключать на время работы скрипта, иначе придётся потом править вручную.
Естественно в теле скрипта надо поставить свои адреса.
Код PHP:
Скачать архив со скриптом<?php
$feedURL = "http://site.ru/rss/content/2/feed.rss";
$channelTitle = "Мой сайт";
$channelDescription = "Мой любимый информационный сайт";
$channelImage = 'http://site.ru/site.gif';
$feed = file_get_contents($feedURL);
$dom = new domDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($feed);
if (!$dom)
{
echo "Error parsing original feed\n";
exit;
}
$rss = $dom->getElementsByTagName('rss')->item(0);
$channel = $rss->getElementsByTagName('channel')->item(0);
$title = $channel->getElementsByTagName('title')->item(0);
if ($title->hasChildNodes()) { $title->removeChild($title->firstChild); }
$title->appendChild(new DOMText($channelTitle));
$description = $channel->getElementsByTagName('description')->item(0);
if ($description->hasChildNodes()) { $description->removeChild($description->firstChild); }
$description->appendChild(new DOMText($channelDescription));
$firstItem = $channel->getElementsByTagName('item')->item(0);
$image = $dom->createElement('image');
$imageUrl = $dom->createElement('url');
$imageUrl->appendChild(new DOMText($channelImage));
$imageAlt = $dom->createElement('title');
$imageAlt->appendChild(new DOMText($channelTitle));
$imageLink = $dom->createElement('link');
$imageLink->appendChild(new DOMText($feedURL));
$image->appendChild($imageUrl);
$image->appendChild($imageAlt);
$image->appendChild($imageLink);
$channel->insertBefore($image, $firstItem);
$toDelete = array();
$items = $channel->getElementsByTagName('item');
for ($i = 0; $i < $items->length; $i++)
{
$item = $items->item($i);
$date = $item->getElementsByTagName('pubDate')->item(0)->textContent;
$timediff = time() - strtotime($date);
if ($timediff > 60*60*24*8)
{
$toDelete[] = $item;
}
else
{
$link = $item->getElementsByTagName('link')->item(0);
$pdalink = $dom->createElement('pdalink');
$pdalink->appendChild(new DOMText($link->textContent));
$item->insertBefore($pdalink, $link);
$item->removeChild($item->getElementsByTagName('category')->item(0));
$item->removeChild($item->getElementsByTagName('author')->item(0));
$pageContent = file_get_contents($link->textContent);
if (preg_match("/class=\"con_text\"/", $pageContent, $matches, PREG_OFFSET_CAPTURE))
{
if (preg_match("/<p/", $pageContent, $matches, PREG_OFFSET_CAPTURE, $matches[0][1]))
{
$h3Found = preg_match("/<h3>Похожие статьи:/", $pageContent, $h3matches, PREG_OFFSET_CAPTURE, $matches[0][1]);
$divendFound = preg_match("/\/div/", $pageContent, $divendmatches, PREG_OFFSET_CAPTURE, $matches[0][1]);
if ($h3Found)
{
$end = min($h3matches[0][1], $divendmatches[0][1]);
}
else
{
$end = $divendmatches[0][1];
}
$fulltext = iconv('cp1251', 'utf8', strip_tags(substr($pageContent, $matches[0][1], $end - $matches[0][1])));
#$fulltext = html_entity_decode($fulltext);
$fulltexttag = $dom->createElement('yandex:full-text');
$fulltexttag->appendChild(new DOMText($fulltext));
$item->appendChild($fulltexttag);
# print "==================\n";
# print $fulltext;
# print "==================\n";
# break;
}
}
}
}
foreach ($toDelete as $item)
{
$channel->removeChild($item);
}
$dom->encoding = 'utf-8';
$yarss = $dom->saveXML();
file_put_contents('yarss.xml', $yarss);
echo "Всё ок"?>
| # 8 сентября 2010 в 19:22 0 | |||
|
| # 8 сентября 2010 в 19:30 0 | ||
|
| # 8 сентября 2010 в 19:33 +2 | ||
|
| # 8 сентября 2010 в 19:47 +2 | ||
|
| # 8 сентября 2010 в 20:00 +4 | ||||
|
| # 8 сентября 2010 в 23:32 -1 | ||
|
| # 8 сентября 2010 в 23:38 0 | ||
|
| # 9 сентября 2010 в 08:38 0 | ||
|
| # 9 сентября 2010 в 13:01 0 | ||
|
| # 9 сентября 2010 в 13:21 0 | ||
|
| # 10 сентября 2010 в 15:28 0 | ||
|
| # 10 сентября 2010 в 15:54 0 | ||
|
| # 10 сентября 2010 в 16:27 0 | ||
|
| # 15 сентября 2010 в 00:12 0 | ||
|
| # 1 октября 2010 в 11:50 0 | ||
|
| # 1 октября 2010 в 12:35 0 | ||
|
| # 4 октября 2010 в 11:51 0 | ||
|
| # 4 октября 2010 в 12:49 0 | ||
|
| # 5 октября 2010 в 12:38 0 |
| # 5 октября 2010 в 12:39 0 | ||
|
| # 5 октября 2010 в 12:41 0 | ||
|
| # 5 октября 2010 в 14:30 0 | ||
|
| # 5 октября 2010 в 14:53 0 | ||
|
| # 5 октября 2010 в 15:13 +1 | ||
|
| # 6 октября 2010 в 11:46 0 |
| # 6 октября 2010 в 18:26 0 | ||
|
| # 6 октября 2010 в 19:31 0 | ||
|
| # 6 октября 2010 в 20:28 0 | ||
|
| # 6 октября 2010 в 23:05 0 |
| # 11 октября 2010 в 20:53 0 | ||
|
| # 15 февраля 2012 в 19:27 0 |
провтыкал поставить кавычку в строке с изображением!