Скрипт для Яндекс.Новостей

+29
5.06K
В последнее время растёт популярность сервиса Яндекс.Новости. Но, пока ещё можно туда протиснуть сайт. Это здорово поднимает трафик, но может помочь только реальным СДЛ новостной направленности.
Основная проблема в экспортном файле, который у Яндекса очень даже эксклюзивный.Обсуждали это здесь Как с этим справиться?

Значит, так:
1. Шлём письмо о своём сайте сюда info@news.yandex.ru
2. Они его проверяют, и если он достаточно новостной, они напишут вам сами и дадут достаточно запутанные инструкции.
3. Заполняете присланные бланки, подпись, печать, скан и отправляете им. Потребуют копию ЕГРЮЛ или паспорта (смотря на кого домен). Всё отправляете по факсу или сканом.
4. Запаковываете оригиналы в конверт и отправляете сюда: 119021, Россия, г. Москва, ул. Льва Толстого, д. 16 Компания «Яндекс».
5. Здесь начинается самое интересное — экспортный файл. Стандартный RSS их не устраивает, надо делать свой по их требованиям. Вручную — большой гемор, учитывая, что может придётся делать его каждый день. Здесь вам на помощь придёт мой волшебный скрипт. Скрипт помещаем в корень сайта, ставим права 744. Запускаем его браузером (для тех, кто в танке: просто набираем в адресной строке site.ru/yarss.php), он выполняется (напишет «Всё ОК!») и формирует файл по адресу site.ru/yarss.xml — это и есть искомый нами и обретенный столь чудесно экспортный файл яндекса.
6. Скрипт меняет столь любимую нами 1251 на utf-8
7. Сообщаем о своей победе яндексу и не забываем всю процедуру повторять периодически.
Автозапуск делать не стал специально, мне он был не нужен.
Есть в скрипте мальнький косячек, я пока не разбирался в чем дело. Суть в том, что по всем правилам, скрипт должен обрезать текст статьи до открывающего тега блока «Похожие статьи», но, почему-то не хочет и обрезает после закрывающего тега. Может, кто из ассов подправит. У кого этот плагин не работает, тому нечего беспокоиться. Те, у кого он есть, могут отключать на время работы скрипта, иначе придётся потом править вручную.
Естественно в теле скрипта надо поставить свои адреса.

  1. <?php
  2.  
  3. $feedURL = "http://site.ru/rss/content/2/feed.rss";
  4.  
  5. $channelTitle = "Мой сайт";
  6. $channelDescription = "Мой любимый информационный сайт";
  7. $channelImage = 'http://site.ru/site.gif';
  8.  
  9. $feed = file_get_contents($feedURL);
  10.  
  11. $dom = new domDocument;
  12. $dom->preserveWhiteSpace = false;
  13. $dom->formatOutput = true;
  14. $dom->loadXML($feed);
  15. if (!$dom)
  16. {
  17. echo "Error parsing original feed\n";
  18. }
  19.  
  20. $rss = $dom->getElementsByTagName('rss')->item(0);
  21. $channel = $rss->getElementsByTagName('channel')->item(0);
  22. $title = $channel->getElementsByTagName('title')->item(0);
  23. if ($title->hasChildNodes()) { $title->removeChild($title->firstChild); }
  24. $title->appendChild(new DOMText($channelTitle));
  25.  
  26. $description = $channel->getElementsByTagName('description')->item(0);
  27. if ($description->hasChildNodes()) { $description->removeChild($description->firstChild); }
  28. $description->appendChild(new DOMText($channelDescription));
  29.  
  30. $firstItem = $channel->getElementsByTagName('item')->item(0);
  31.  
  32. $image = $dom->createElement('image');
  33. $imageUrl = $dom->createElement('url');
  34. $imageUrl->appendChild(new DOMText($channelImage));
  35. $imageAlt = $dom->createElement('title');
  36. $imageAlt->appendChild(new DOMText($channelTitle));
  37. $imageLink = $dom->createElement('link');
  38. $imageLink->appendChild(new DOMText($feedURL));
  39. $image->appendChild($imageUrl);
  40. $image->appendChild($imageAlt);
  41. $image->appendChild($imageLink);
  42. $channel->insertBefore($image, $firstItem);
  43.  
  44. $toDelete = array();
  45. $items = $channel->getElementsByTagName('item');
  46. for ($i = 0; $i < $items->length; $i++)
  47. {
  48. $item = $items->item($i);
  49.  
  50. $date = $item->getElementsByTagName('pubDate')->item(0)->textContent;
  51. $timediff = time() - strtotime($date);
  52. if ($timediff > 60*60*24*8)
  53. {
  54. $toDelete[] = $item;
  55. }
  56. else
  57. {
  58. $link = $item->getElementsByTagName('link')->item(0);
  59. $pdalink = $dom->createElement('pdalink');
  60. $pdalink->appendChild(new DOMText($link->textContent));
  61. $item->insertBefore($pdalink, $link);
  62.  
  63. $item->removeChild($item->getElementsByTagName('category')->item(0));
  64. $item->removeChild($item->getElementsByTagName('author')->item(0));
  65.  
  66.  
  67. $pageContent = file_get_contents($link->textContent);
  68.  
  69. if (preg_match("/class=\"con_text\"/", $pageContent, $matches, PREG_OFFSET_CAPTURE))
  70. {
  71. if (preg_match("/<p/", $pageContent, $matches, PREG_OFFSET_CAPTURE, $matches[0][1]))
  72. {
  73. $h3Found = preg_match("/<h3>Похожие статьи:/", $pageContent, $h3matches, PREG_OFFSET_CAPTURE, $matches[0][1]);
  74. $divendFound = preg_match("/\/div/", $pageContent, $divendmatches, PREG_OFFSET_CAPTURE, $matches[0][1]);
  75. if ($h3Found)
  76. {
  77. $end = min($h3matches[0][1], $divendmatches[0][1]);
  78. }
  79. else
  80. {
  81. $end = $divendmatches[0][1];
  82. }
  83.  
  84. $fulltext = iconv('cp1251', 'utf8', strip_tags(substr($pageContent, $matches[0][1], $end - $matches[0][1])));
  85. #$fulltext = html_entity_decode($fulltext);
  86.  
  87. $fulltexttag = $dom->createElement('yandex:full-text');
  88. $fulltexttag->appendChild(new DOMText($fulltext));
  89. $item->appendChild($fulltexttag);
  90.  
  91. # print "==================\n";
  92. # print $fulltext;
  93. # print "==================\n";
  94. # break;
  95. }
  96. }
  97. }
  98. }
  99.  
  100. foreach ($toDelete as $item)
  101. {
  102. $channel->removeChild($item);
  103. }
  104.  
  105. $dom->encoding = 'utf-8';
  106. $yarss = $dom->saveXML();
  107. file_put_contents('yarss.xml', $yarss);
  108.  
  109. echo "Всё ок"?>
  110.  
Скачать архив со скриптом
0
Fuze Fuze 14 лет назад #
P.S. специальный совет для fuze - прежде, чем что-то сделать, попробуй немного подумать....
Обиделся за минус в карму что ли?))))
+1
Олег с клещами Олег с клещами 14 лет назад #
Конечно! за что....? cry
+3
Fuze Fuze 14 лет назад #
Не бери в голову)))
Если тебе легче станет, то плюсану, как появятся ссылки.
+4
Олег с клещами Олег с клещами 14 лет назад #
Ладно, забили! Будем и дальше простираться к совершенству!
+4
14 лет назад #
да ладно тебе сам ведь мне давал совет!
Олег:
maxisoft:
насчет тех дятлов которые вдолбят еще с 10 минусов
А тебе не пофиг на них? Да и кто будет долбить если сделал нужное дело?!
-1
lezginka.ru lezginka.ru 14 лет назад #
нужная вещь ++
Олег, если ты написал бы еще и скрипт переписки с яндексом, который делает первые 4 пункта(1,2,3,4) вот это было класс :))
0
lezginka.ru lezginka.ru 14 лет назад #
а здесь вообще есть юзеры сделавшие новостной проект по стандарту ящи ?
+1
Олег с клещами Олег с клещами 14 лет назад #
Пока только я и jumangee
0
lezginka.ru lezginka.ru 14 лет назад #
Олег, а как посмотреть, интересно однако :)
+1
Олег с клещами Олег с клещами 14 лет назад #
Смотря что посмотреть? Если результат то вот. Скрипт смотри сам, готовый файл можешь сам сделать без проблем или посмотри мой.
0
14 лет назад #
Или вот мой!
0
lezginka.ru lezginka.ru 14 лет назад #
я немого иначе спрошу:
в каких случаях,при каких запросах и из каких регионов должны быть запросы, чтобы увидеть ваши сайты в яща.новостях ?
+1
Олег с клещами Олег с клещами 14 лет назад #
Например, ты написал статью про лезгинку. Любой в любой точке планеты заходет в яша.новости, набирает "Лезгинка" и видит твою статью.
0
lezginka.ru lezginka.ru 14 лет назад #
у ящи есть главная страница и наверху есть ссылка - "Сегодня в новостях " там будет показан ?
2. я набрал в поиске статью "Второе подряд землетрясение в Туапсе" но твой сайте не появился в поиске,хотя здесь http://news.yandex.ru/smi/newtuapse.ru есть это,почему ?
+1
Олег с клещами Олег с клещами 14 лет назад #
Всё работает, посмотри здесь и ты просто с ума сойдёшь от вопиющей наглости песочных сайтов! Учти, что это всероссийская выдача.............
0
14 лет назад #
у меня скрипт почемуто откразывается работать, при запуске просто белый екран :(
+1
Олег с клещами Олег с клещами 14 лет назад #
Результат работы на экране и не должен быть. Он только формирует файл yarss.xml в корне сайта. Это и есть искомый файл для яши.
0
14 лет назад #
Как написано в инструкции скрипт должен отобразить надпись «Всё ОК!» - этого не происходит. Файл xml не создается!
+1
Олег с клещами Олег с клещами 14 лет назад #
Надо ещё раз всё внимательно проверить: права на файл, прописку своих адресов в скрипте... Всё рабочее, однозначно.
0
14 лет назад #
вот начало моего файла, я так понял больше нигде ничего менять не нужно. Права стоят 744 (пробовал разные варианты, тоже не помогло)

Код PHP:
$feedURL = "http://ifomir.com.ua/rss/content/15/feed.rss";

$channelTitle = "Новини України та світу";
$channelDescription = "Інформаційне інтренет видання. Найсвіжіші новини зі всього світу!";
$channelImage = 'http://ifomir.com.ua/111111111.jpg;
0
14 лет назад #
Проблему нашол - кривые рукиsmileпровтыкал поставить кавычку в строке с изображением!
0
14 лет назад #
а файл http://ifomir.com.ua/yarss.xml то пустой оказывается :(
+1
Олег с клещами Олег с клещами 14 лет назад #
Скрипт автоматом отсекает все статьи, старше 8 дней. Это требование яндекса.
0
14 лет назад #
на сайте есть 8 статтей опубликованых сегодня, но несмотря на это в .xml файле они не отображаются.
+2
Олег с клещами Олег с клещами 14 лет назад #
Если файл создаётся, с атрибутами xml, но там просто нет этих статей, то проблема может быть только в самих статьях или в языке статей.
0
14 лет назад #
я в програмирование не силен, но в вашем скрипте я не нашол настроек языка. Может там что-то с кодировкой? огда я пересохранил сам скрипт в кодировку utf-8 то в файле xml появился заголовок, но новости все-равно не отображаются, но при просмотре исходного кода файла xml видно что новости всеже там есть но только анонсы а не полные!
0
14 лет назад #
Очень полезная штука, то Яша не берет мой сайт, говорит: мало новостей! :))))
0
lezginka.ru lezginka.ru 14 лет назад #
а с этой штукой взяли ?
сайт посмотреть можно ?
0
14 лет назад #
сколько новостей на сайте? у меня просто их 44 за неделю, как думаете хватит?
+1
Олег с клещами Олег с клещами 14 лет назад #
Яша решает сам, насколько новостной сайт. Уговорить невозможно. ГС - даже не пытайтесь, "песочница" - 50/50, остальные должны доказать, что контент не грабберный и не копипаст. Даты принимаются сторого со временем в стиле год:месяц:час:минута, это для проверки уника контента.
0
14 лет назад #
ТС, спсибо за скрипт, вот и меня приняли в Яндекс.Новости. Осталось только документы подписать и отправить :)
0
клинер клинер 12 лет назад #
Скрипт очень нужный. Протащил один из своих ресурсов в ЯН и озадачился тем, что необходимо вручную каждый раз создвать файл. Однако, сравнив получающийся файл с новыми требованиями Яши, вынужден попросить внести изменения в скрипт с учетом последней редакции рекомендаций по созданию файла.
Вот каким ЯН хочет видеть файл RSS:
Код PHP:
<?xml version="1.0" encoding="windows-1251"?> 
<rss xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" version="2.0"> 

<channel> 

<title>Российские новости</title> 
<link>http://www.rossiyskie-novosti.ru/</link> 
<description> Ежедневная иллюстрированная московская общественно-политическая газета.</description> 

<image> 
<url>http://www.rossiyskie-novosti.ru/logo.gif</url> 
<title>Российские новости</title> 
<link>http://www.rossiyskie-novosti.ru/</link> 
</image> 

<item> 
<title>Яндекс ищет на президентском сайте</title> 
<link>http://www.rossiyskie-novosti.ru/2003/03/25/yandex.html</link> 
<pdalink>http://www.m.rossiyskie-novosti.ru/2003/03/25/yandex.html</pdalink> 
<description>Программный продукт Яndex.Site установлен на официальном сайте президента  
России</description> 

<author>Иван Петров</author> 
<category>Технологии</category> 

<enclosure url="http://www.rossiyskie-novosti.ru/2003/03/25/yandex.jpg" type="image/jpeg"/> 
<enclosure url="http://www.rossiyskie-novosti.ru/2003/03/25/yandex1.jpg" type="image/jpeg"/> 
<enclosure url="http://www.rossiyskie-novosti.ru/video/100237" type="video/x-ms-asf"/> 

<pubDate>Sun, 29 Sep 2002 19:59:01 +0400</pubDate> 

<yandex:genre>message</yandex:genre> 

<yandex:full-text>Для поиска по сайту www.kremlin.ru выбрана программа Яndex.Site. Этот программный  
продукт был исследован провайдером президентского сайта - Федеральным агентством правительственной  
связи и информации. ФАПСИ сочло возможным использование поисковой системы &lt;Яндекса&gt; на  
www.kremlin.ru. По результатам исследования программа была скомпилирована, протестирована и  
установлена на сайт </yandex:full-text> 

<yandex:related> 
<link url="http://www.kremlin.ru/">Президент России</link> 
</yandex:related> 

</item> 

</channel> 
</rss> 
Если нужно, могу выслать весь файл с рекомендациями
0
Def Def 12 лет назад #
был бы признателен если вышлете
0
МитяЙ МитяЙ 12 лет назад #
Кто нибудь нашел решения по новым стандартам yndex
+2
Def Def 12 лет назад #
и работает ли на 1.10?
0
micmix micmix 9 лет назад #
Подскажите, а для ветки 2 это актуально, или код скрипта не подойдет? Все испробовал - не работает скрипт на 2-ке.

Еще от автора

Добавление материалов гостями без регистраци
Много предлагалось способов как разрешить гостям добавлять материалы. Перепробовал все, на сегодня ни один не работает. Пришлось изобрести велосипед.
Фиктивный счетчик клиентов
Иногда требуется вывести на сайте фиктивный счетчик клиентов. Я люблю максимально простые решения.
Вставка из Word в CKEditor 1.хх
Не раз уже на форуме обсуждали проблемку в CKEditor когда нельзя вставить текст из Word (нет кнопки). Решения я не увидел, поэтому полез сам
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.