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

Опубликовано: 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. Сообщаем о своей победе яндексу и не забываем всю процедуру повторять периодически.
Автозапуск делать не стал специально, мне он был не нужен.
Есть в скрипте мальнький косячек, я пока не разбирался в чем дело. Суть в том, что по всем правилам, скрипт должен обрезать текст статьи до открывающего тега блока «Похожие статьи», но, почему-то не хочет и обрезает после закрывающего тега. Может, кто из ассов подправит. У кого этот плагин не работает, тому нечего беспокоиться. Те, у кого он есть, могут отключать на время работы скрипта, иначе придётся потом править вручную.
Естественно в теле скрипта надо поставить свои адреса.

Код 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 "Всё ок"?>
Скачать архив со скриптом
Шаблон на divax | Прайс для InstantShop
Fuze # 8 сентября 2010 в 19:22 0
P.S. специальный совет для fuze - прежде, чем что-то сделать, попробуй немного подумать....
Обиделся за минус в карму что ли?))))
Олег с клещами # 8 сентября 2010 в 19:30 0
Конечно! за что....? cry
Fuze # 8 сентября 2010 в 19:33 +2
Не бери в голову)))
Если тебе легче станет, то плюсану, как появятся ссылки.
Олег с клещами # 8 сентября 2010 в 19:47 +2
Ладно, забили! Будем и дальше простираться к совершенству!
0 # 8 сентября 2010 в 20:00 +4
да ладно тебе сам ведь мне давал совет!
Олег:
maxisoft:
насчет тех дятлов которые вдолбят еще с 10 минусов
А тебе не пофиг на них? Да и кто будет долбить если сделал нужное дело?!
lezginka.ru # 8 сентября 2010 в 23:32 -1
нужная вещь ++
Олег, если ты написал бы еще и скрипт переписки с яндексом, который делает первые 4 пункта(1,2,3,4) вот это было класс :))
lezginka.ru # 8 сентября 2010 в 23:38 0
а здесь вообще есть юзеры сделавшие новостной проект по стандарту ящи ?
Олег с клещами # 9 сентября 2010 в 08:38 0
Пока только я и jumangee
lezginka.ru # 9 сентября 2010 в 13:01 0
Олег, а как посмотреть, интересно однако :)
Олег с клещами # 9 сентября 2010 в 13:21 0
Смотря что посмотреть? Если результат то вот. Скрипт смотри сам, готовый файл можешь сам сделать без проблем или посмотри мой.
0 # 10 сентября 2010 в 10:54 0
Или вот  мой!
lezginka.ru # 10 сентября 2010 в 15:28 0
я немого иначе спрошу:
в каких случаях,при каких запросах и из каких регионов должны быть запросы, чтобы увидеть ваши сайты в яща.новостях ?
Олег с клещами # 10 сентября 2010 в 15:54 0
Например, ты написал статью про лезгинку. Любой в любой точке планеты заходет в яша.новости, набирает "Лезгинка" и видит твою статью.
lezginka.ru # 10 сентября 2010 в 16:27 0
у ящи есть главная страница и наверху есть ссылка - "Сегодня в новостях " там будет показан ?
2. я набрал в поиске статью "Второе подряд землетрясение в Туапсе" но твой сайте не появился в поиске,хотя здесь http://news.yandex.ru/smi/newtuapse.ru есть это,почему ?
Олег с клещами # 15 сентября 2010 в 00:12 0
Всё работает, посмотри здесь и ты просто с ума сойдёшь от вопиющей наглости песочных сайтов! Учти, что это всероссийская выдача.............
0 # 1 октября 2010 в 11:50 0
у меня скрипт почемуто откразывается работать, при запуске просто белый екран :(
Олег с клещами # 1 октября 2010 в 12:35 0
Результат работы на экране и не должен быть. Он только формирует файл yarss.xml в корне сайта. Это и есть искомый файл для яши.
0 # 4 октября 2010 в 11:51 0
Как написано в инструкции скрипт должен отобразить надпись «Всё ОК!» - этого не происходит. Файл xml не создается!
Олег с клещами # 4 октября 2010 в 12:49 0
Надо ещё раз всё внимательно проверить: права на файл, прописку своих адресов в скрипте... Всё рабочее, однозначно.
0 # 5 октября 2010 в 12:38 0
вот начало моего файла, я так понял больше нигде ничего менять не нужно. Права стоят 744 (пробовал разные варианты, тоже не помогло)

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

$channelTitle = "Новини України та світу";
$channelDescription = "Інформаційне інтренет видання. Найсвіжіші новини зі всього світу!";
$channelImage = 'http://ifomir.com.ua/111111111.jpg;
0 # 5 октября 2010 в 12:39 0
Проблему нашол - кривые рукиsmileпровтыкал поставить кавычку в строке с изображением!
0 # 5 октября 2010 в 12:41 0
а файл http://ifomir.com.ua/yarss.xml то пустой оказывается :(
Олег с клещами # 5 октября 2010 в 14:30 0
Скрипт автоматом отсекает все статьи, старше 8 дней. Это требование яндекса.
0 # 5 октября 2010 в 14:53 0
на сайте есть 8 статтей опубликованых сегодня, но несмотря на это в .xml файле они не отображаются.
Олег с клещами # 5 октября 2010 в 15:13 +1
Если файл создаётся, с атрибутами xml, но там просто нет этих статей, то проблема может быть только в самих статьях или в языке статей.
0 # 6 октября 2010 в 11:46 0
я в програмирование не силен, но в вашем скрипте я не нашол настроек языка. Может там что-то с кодировкой? огда я пересохранил сам скрипт в кодировку utf-8 то в файле xml появился заголовок, но новости все-равно не отображаются, но при просмотре исходного кода файла xml видно что новости всеже там есть но только анонсы а не полные!
0 # 6 октября 2010 в 18:26 0
Очень полезная штука, то Яша не берет мой сайт, говорит: мало новостей! :))))
lezginka.ru # 6 октября 2010 в 19:31 0
а с этой штукой взяли ?
сайт посмотреть можно ?
0 # 6 октября 2010 в 20:28 0
сколько новостей на сайте? у меня просто их 44 за неделю, как думаете хватит?
Олег с клещами # 6 октября 2010 в 23:05 0
Яша решает сам, насколько новостной сайт. Уговорить невозможно. ГС - даже не пытайтесь, "песочница" - 50/50, остальные должны доказать, что контент не грабберный и не копипаст. Даты принимаются сторого со временем в стиле год:месяц:час:минута, это для проверки уника контента.
0 # 11 октября 2010 в 20:53 0
ТС, спсибо за скрипт, вот и меня приняли в Яндекс.Новости. Осталось только документы подписать и отправить :)
клинер # 15 февраля 2012 в 19:27 0
Скрипт очень нужный. Протащил один из своих ресурсов в ЯН и озадачился тем, что необходимо вручную каждый раз создвать файл. Однако, сравнив получающийся файл с новыми требованиями Яши, вынужден попросить внести изменения в скрипт с учетом последней редакции рекомендаций по созданию файла.
Вот каким ЯН хочет видеть файл 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> 
Если нужно, могу выслать весь файл с рекомендациями