drupal rss+эскопрт в Яндекс-новости

Главные вкладки

Аватар пользователя smile smile 4 сентября 2006 в 23:17

Бегаю с бубном вокруг Друпала и никак не могу понять, окуда у него формируется рсс лента. Задача в общем-то простая (но не для друпала видимо) - экспортировать общую для всех нод (ту которая site.com/xml.rss) rss-ленту в формате, который хочет Яндекс.

Но блин никак не могу найти ни настроек (кроме дебильных, вроде кол-ва сообщений в ленте и вывода или только ттизера или только всего текста), ни вообще файла, отвечающего за формат рсс-ки.

Может кто-то имел опыт затачивания Друпала под Яндыкс. Подскажите плз.

Комментарии

Аватар пользователя itnovosti itnovosti (не проверено) 5 сентября 2006 в 11:21

Начало - примерно на строке 1198

  $channel_defaults = array(
  'version'     => '2.0',
    'title'       => variable_get('site_name', 'drupal') .' - '. variable_get('site_slogan', ''),
    'link'        => $base_url,
    'description' => variable_get('site_mission', ''),
    'language'    => $locale
  );
  $channel = array_merge($channel_defaults, $channel);

  $output = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
  $output .= "<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC \"-//W3C//ENTITIES Latin 1 for XHTML//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent\">]>\n";
  $output .= "<rss version=\"". $channel["version"] . "\" xml:base=\"". $base_url ."\" xmlns:yandex=\"http://news.yandex.ru\">\n";
  $output .= format_rss_channel($channel['title'], $channel['link'], $channel['description'], $items, $channel['language']);
  $output .= "</rss>\n";

  drupal_set_header('Content-Type: text/xml; charset=utf-8');
  print $output;
}

/**
 * Perform validation checks on the given node.
 */

Аватар пользователя smile smile 5 сентября 2006 в 12:47

эм... строке чего? и еще вопрос: можно ли изменить стандартный путь вида xml.rss на другой? например yandex.xml

Аватар пользователя Onza Onza 6 сентября 2006 в 15:32

smile, разобрался?
Актуально, тоже бегаю с бубном.. Smile Яндекс хочет получать одновременно и заголовки с тизерами, и полный вариант. Как это реализовать, интересно? И как исключить материалы из других (ненужных для яндекса) разделов, которые тоже публикуются на главной?

Аватар пользователя dyp@drupal.org dyp@drupal.org 6 сентября 2006 в 15:38

Quote:
И как исключить материалы из других (ненужных для яндекса) разделов, которые тоже публикуются на главной?

сделать через views выборку нужных яндексу материалов и подключить ленту.

Аватар пользователя Onza Onza 6 сентября 2006 в 15:44

dyp@drupal.org, спасибо, здесь ясно. Остается неясность с их обязательным полным варинатом сообщения yandex:full-text
Как его отдельно реализовать - совершенно непонятно Sad

Аватар пользователя itnovosti itnovosti (не проверено) 7 сентября 2006 в 10:39

Версия 4.6
includes/common.inc, примерно с 723 строки:

/**
 * Format a single RSS item.
 *
 * Arbitrary elements may be added using the $args associative array.
 */

function format_rss_item($title, $link, $description, $args = array()) {
  $output = "<item>\n";
  $output .= ' <title>'. check_plain($title) ."</title>\n";
  $output .= ' <link>'. check_url($link) ."</link>\n";
  $output .= ' <description><yandex:full-text>';
  $output .=  strip_tags ($description);
  $output .= ' </yandex:full-text></description>';
  foreach ($args as $key => $value) {
    if (is_array($value)) {
      if ($value['key']) {
        $output .= ' <'. $value['key'];
        if (is_array($value['attributes'])) {
          $output .= drupal_attributes($value['attributes']);
        }

        if ($value['value']) {
          $output .= '>'. $value['value'] .'</'. $value['key'] .">\n";
        }
        else {
          $output .= " />\n";
        }
      }
    }
    else {
      $output .= ' <'. $key .'>'. check_plain($value) ."</$key>\n";
    }
  }
  $output .= "</item>\n";

  return $output;
}

Аватар пользователя Onza Onza 8 сентября 2006 в 0:39

Нет, не получается Sad
Возникают ошибки что-то типа "...namespaces.." то nbsp, то dc:creator, то еще что-то. И еще все-таки непонятно - как настроить yandex:full-text, если фид выдает текст публикации, включающий атрибуты, Typografic'у и теги форматирования, а они требуют - цитата: "В полном тексте не должны содержаться название источника и дата/время сообщения, а также контактная информация и любая другая информация, которая повторяется в каждом сообщении. Кроме того, просим исключать из полного текста все тэги форматирования".
Вероятно, фид все же надо как-то "разделить" на два - один стандарный, другой для yandex:full-text. Или я ошибаюсь?

У нас сейчас нет кодера, а если у кого-либо есть возможность помочь в настройке транслятора на "Я-новости" за небольшое вознаграждение - сообщите пожалуйста!
(Друпал 4.7.3)

Аватар пользователя itnovosti itnovosti (не проверено) 8 сентября 2006 в 10:51

Знакомые грабли. Я тоже сначала думал поделить выдачу на "нормальную" и "для яндекса". В силу неочевидности реализации не стал морочиться.
А в яндексовском xmlns действительно запрещены многие html-теги. Я лечил вычищением &lt &gt &nbsp из [b]всех[/b] уже существующих материалов - можно редактированием, можно через MySQL.
Было и ещё забавное следствие - пришлось отключить wysiwyg для редакторов, чтобы лишнего в материалы не попадало.
Вот ссылка на мой фид: http://itnovosti.ru/taxonomy/term/1+2/0/feed В браузере видно, где что берется.
Onza, если и это не поможет, то попробую за "небольшое вознаграждение", но материалы всё-равно Вам самостоятельно от форматирования чистить придётся. Начните прямо с этого - в сообщении об ошибке указано место (материал, строка), где вставлен мешающий яндексу код.

Аватар пользователя Onza Onza 8 сентября 2006 в 14:03

itnovosti, большое спасибо за советы, все посмотрел. Получается, что в таком варианте у новостных материалов на сайте будут убраны типографика и форматирование, что не есть хорошо. Еще одно (самое плохое) следствие - надо хачить код модуля node и common.inc. Соответственно потом проблемы с обновлениями и т.п.
Ошибки да, я смотрел строки - ладно еще nbsp, но там он ругается еще на атрибуты типа того же dc:creator. Т.е. опять же надо где-то хачить, чтобы эти "лишние" атрибуты убрать... Невеселая картина получается Sad

>>>Я тоже сначала думал поделить выдачу на “нормальную” и “для яндекса”. В силу неочевидности реализации не стал морочиться.

Раньше, на старом сайте на другом древнем движке (еще до меня) - люди делали так: завели папку "yandex" и в ней лежал файлик rss2.xml, в который они руками копировали опубликованную новость и яндесовский робот ее оттуда кушал. Конечно это геморой Smile И новостей публиковалось гораздо меньше, чем сейчас.
Интересно, можно ли реализовать аналогично, но чтобы при публикации новости (у нас это тип материала story) друпал сам перезаписывал .xml, размещенный в отдельной папке?

Аватар пользователя itnovosti itnovosti (не проверено) 8 сентября 2006 в 14:27

Да, так и получается, хотя можно поиграться с  strip_tags ($description); и пытаться вырезать ненужное в момент формирования фида.
Можно сделать иначе: взять сторонний скрипт, который будет преобразовывать дефолтный rss-поток Друпала в соответствие с xmlns яндекса и скармливать уже преобразованный поток яндексу.
В любом случае, сдаётся мне, что стандартными средствами Друпала и рыбку съесть и на лошадке покататься не получится.

Аватар пользователя Onza Onza 8 сентября 2006 в 14:49

>>>Можно сделать иначе: взять сторонний скрипт, который будет преобразовывать дефолтный rss-поток Друпала в соответствие с xmlns яндекса и скармливать уже преобразованный поток яндексу.

В смысле, модуль написать для строго определенного фида? Т.е. если у нас фид новостной ленты .../news/allnews/feed - то модуль будет преобразовывать для яндекса только его. Как считаешь, это реально?

Аватар пользователя itnovosti itnovosti (не проверено) 8 сентября 2006 в 16:17

Думаю да. Приладить php-шный striptags + чтобы yandex:fulltext вставлял в поток.

Аватар пользователя Смайл которому лень логиница Смайл которому ... (не проверено) 8 сентября 2006 в 15:26

Не, не разобрался. Яндыксу хочется читый текст получать. А в базе все с форматированием идет. Самое простое, что мне пришло на ум, запускать по хрону пхпшный скриптец,который бы делал фид специально для яндекса, "на лету" убирая все, что не Яндыксу не нравицо.

Сложностей с этим никаких , кроме разве что перевода из timestamp в человеческий формат даты.

В общем мне такой вариант - написать отдельный скрипт, а не ковыряться в трех модулях движка и при обновлении повторять танец с бубном - кажется наиболее правильным.

Вообще чем больше ковыряюсь с Друпалом, тем больше разочаровываюсь если честно. Да, бесплатный, да опен сорс, но вот это вот "сделай сам" постоянное уже несколько достало. Сколько всего видел - МТ, Вордпресс и т.д. - нигде такого нет.

Аватар пользователя Onza Onza 8 сентября 2006 в 15:37

Да, с "мелочами" в Друпале туго...

>>>В общем мне такой вариант - написать отдельный скрипт, а не ковыряться в трех модулях движка и при обновлении повторять танец с бубном - кажется наиболее правильным.

Вот и я о том же Smile
Вопрос: кто бы взялся это написать? В смысле, не бесплатно конечно.

Аватар пользователя itnovosti itnovosti (не проверено) 8 сентября 2006 в 16:19

>> Вопрос: кто бы взялся это написать? В смысле, не бесплатно конечно.

Я бы тоже не отказался от услуг толкового программиста на drupal, есть несколько разнокалиберных задач, но, похоже, "настоящих буйных мало" (с)

Аватар пользователя Onza Onza 8 сентября 2006 в 16:29

itnovosti, тогда предлагаю вывесить объявление в отдельную тему.
Если ОК, опиши актуальные для тебя задачи. У меня пока горит "Янедекс-новости", затем еще будут задачи небольшие.
Других вариантов пока не вижу...

Аватар пользователя emzi emzi 8 сентября 2006 в 16:43

в силу специфики разных видов новостей пришлось писать свой "фид" для РСС. Если требуется настроить стандартный вывод, то по-моему, можно это сделать, переопределив функцию RSS через темплейты

Аватар пользователя Smile которому по-прежнему регистрироваться в лом Smile которому ... (не проверено) 8 сентября 2006 в 16:45

Господа, рсска решается довольно просто. Особенным друпаловским программером быть не надо, достаточно просто знать php в связке с базой.

Пхпшные мастера на все руки, готовые за разные деньги решать разные пхпшные задачи живут тут: http://phpclub.ru

Аватар пользователя Onza Onza 8 сентября 2006 в 17:08

>>>Особенным друпаловским программером быть не надо, достаточно просто знать php в связке с базой.

Дело в том, что у нас пока нет человека, который бы хорошо ориентировался в PHP. Ну нет его и все тут Smile А поскольку и готовых вариантов к сожалению нет (т.е. есть, но только с хаками) - ничего не остается, как заказывать написание скрипта.

Аватар пользователя itnovosti itnovosti (не проверено) 11 сентября 2006 в 11:26

Onza, видел Ваше предложение тут: [url]http://phpclub.ru/talk/showthread.php?s=e0bc4b02e3177b7a57347a0761f9777a... [/url]. Кто-нибудь откликнулся?
Похоже, что спрос на людей, разбирающихся в _программировании_ под drupal сильно превышает предложение... А я только-только список задач самых актуальных начал писать:

1. Перевод сайта с 4.6 на 4.7|5.0, далее до бесконечности. Постоянная техническая поддержка (те же грабли с yandex rss к примеру).
2. Написание модуля для интеграции ecommerce с yandex.money.
3. Работы по тюнингу производительности.
Это то, что нужно делать "уже сейчас".

P.S. Доля здорового пессимизма: мне кажется, что откликов на это предложение не будет.

Аватар пользователя inc inc 11 сентября 2006 в 12:07

Попробую безвозмездно помочь сделать выгрузку в Яндекс.Новости, мне тоже это интересно.
Пожалуйста, напиши ОТЛИЧИЯ между форматами: который возвращает Drupal и который нужен для Яндекса. Ну и все соображения, наработки в этом направлении.
Желательно напиши в отдельный файл и прикрепи к посту

Аватар пользователя emzi emzi 11 сентября 2006 в 12:25

кто-нибудь может скинуть ссылку с описанием их требований? Я сделал простой вывод с тизерами, и яндекс скушал его совершенно без проблем.

Аватар пользователя Гость Гость (не проверено) 11 сентября 2006 в 13:34
ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ

Экспорт Данных для размещения заголовков и аннотаций новостей на Яндекс.ру (в том числе на сайте Яндекс.Новости) осуществляется в XML-based (http://www.w3.org/TR/REC-xml) формате RSS 2.0 (http://blogs.law.harvard.edu/tech/rss). Ниже содержится описание используемых для экспорта Данных элементов RSS 2.0, необходимые комментарии и пример экспортного файла.

1. Описание элементов RSS 2.0, используемых для экспорта Данных
Корневым элементом RSS-файла является <rss>, атрибут version которого должен иметь значение 2.0: <rss version="2.0">.

Внутри элемента <rss> содержится элемент <channel>, который включает информацию об источнике и его содержание. Обязательными элементами <channel> считаются следующие элементы:

<title> - название RSS-потока.
В случае, если экспортируется содержание целого сайта, то в здесь должно быть его название, например: <title>Российские новости</title>; если же часть сайта, то в названии должно быть отражено, какая именно часть, например: <title>Российские новости: технологии</title>. На Яндекс.ру название RSS-потока не показывается, экспортируемые Данные маркируются тем названием источника, которое было  указано в анкете.

<link> - URL сайта, данные которого транслируются в потоке.
Пример: <link>http://www.rossiyskie-novosti.ru</link>

<description> - описание потока. Одно предложение.
Пример: <description>Ежедневная иллюстрированная московская общественно-политическая газета.</description>

В Яндекс.Новостях также используется входящий в <channel> обязательный элемент  <image>, который должен содержать ссылку на графический файл с изображением логотипа издания. Эта ссылка дается во вложенном элементе <url>, название (будет написано в html-атрибуте alt) - в <title> (необходимо еще раз повторить название издания), URL издания - в <link>. Логотип должен быть в формате .gif, без анимации. Размер логотипа – 100 пикселей по максимальной стороне.

В <channel> может содержаться любое количество элементов <item>. Каждый <item> описывает одно сообщение и должен содержать следующие элементы, необходимые для экспорта Данных <title> - заголовок сообщения.
Написание заголовка целиком ПРОПИСНЫМИ буквами не допускается.  Не допускается также наличие точки в конце заголовка. В заголовке не должны содержаться название источника и дата/время сообщения, а также служебные примечания («(обновлено)», «(дополнено)», «(фоторепортаж)», «(видео)» и др.) и неинформативные обороты, не представляющие собой неотъемлемой части заголовка («Срочно!»,  «Сенсация:» и тп.).

Пример: <title>Яндекс ищет на президентском сайте</title>

<link> - URL сообщения, считается уникальным идентификатором сообщения.
Внимание: каждое сообщение должно располагаться на отдельной странице, открывающейся по указанному адресу, при этом заголовок и начало текста сообщения должны быть доступны в первом экране при разрешении 800х600.
При переходе с заголовка, размещенного на Яндекс.Новостях, должна открываться только одна страница, содержащая сообщение, соответствующее заголовку.
Наличие по URL, указанному в <link> более одной новости (ленты новостей) не допускается.
URL, различающиеся только в части после '#' (только якорями), т.е. вида: http://www.some-host.ru/news.html#2545 и http://www.some-host.ru/news.html#5794 считаются идентичными и НЕ допускаются.
Пример: <link>http://www.rossiyskie-novosti.ru/2003/03/25/yandex.html</link>

<description> - аннотация сообщения. Необязательный элемент.
Пример: <description>Программный продукт Яndex.Site установлен на официальном сайте президента России</description>

<author> - автор сообщения. Необязательный элемент.
Пример: <author>Иван Петров</author> (e-mail автора, описанный в спецификации RSS 2.0, в Яндекс.Новостях не используется).

<category> - рубрика (раздел, категория) сообщения.
Внимание: этот элемент не является обязательным, но в том случае, если в издании есть рубрики, здесь должно быть помещено название рубрики (оригинальное, как в издании), в которой опубликовано сообщение. Одному сообщению может соответствовать только одна рубрика.
Об изменении рубрикации издания или добавлении в экспортный файл материалов новых рубрик необходимо сообщать по адресу info@news.yandex.ru. Без такого уведомления сообщения, принадлежащие ранее не существовавшим или переименованным рубрикам издания, не индексируются.
Пример: <category>Технологии</category>

<enclosure> - элемент для иллюстраций, аудио и видеофайлов. Не является обязательным. В случае, если в сообщении содержится несколько иллюстраций, или иллюстрация и видеофайл, элемент <enclosure> повторяется.
Принимаются иллюстрации с шириной не менее 100 и не более 600 пикселов. Если есть несколько вариантов одной иллюстрации, отличающихся размером, то в <enclosure> должен быть указан URL фото наибольшего размера.
Иллюстрации должны быть разрешены к индексированию в файле robots.txt. Дополнительную информацию о robots.txt можно посмотреть здесь: http://www.yandex.ru/info/webmaster2.html#robots
Пример: <enclosure url="http://www.rossiyskie-novosti.ru/2003/03/25/yandex.jpg" type="image/jpeg"/>
Для изображений параметр type должен совпадать с тем, что отдаётся по указанному URL.

<pubDate> - Время публикации сообщения на Сайте источника Данных (сайте издания) в формате RFC-822 (см. http://asg.web.cmu.edu/rfc/rfc822.html#sec-5).
Регистр в названии <pubDate> имеет значение - буква D должна быть прописной.
Пример: <pubDate>Tue, 12 Aug 2003 14:15:00 +0400</pubDate>
Эта запись означает, что новость датирована 12 августа 2003, 14.15 московского летнего времени.

Внимание: +0400 не означает никаких арифметических действий над временем и является просто указанием на часовой пояс (в приведенном примере это московское время).
Смещение (+0400) указывается относительно GMT, которое НЕ переводится на час зимой/летом. Таким образом, с переводом московского времени на час назад, разница станет не 4, а 3 часа: <pubDate>Wed, 29 Jan 2002 19:59:01 +0300</pubDate>
Указанное в экспортном файле время обязательно должно совпадать с фактическим временем публикации на сайте.

2. Специальный элемент для экспорта полного текста сообщений

Кроме стандартных элементов RSS 2.0, для экспорта Данных используется специальный элемент <yandex:full-text>, который должен содержать полный текст сообщения. Этот элемент является обязательным. Полный текст сообщения необходим для индексирования поисковым роботом и на Яндекс.ру не размещается. В полном тексте не должны содержаться название источника и дата/время сообщения, а также контактная информация и любая другая информация, которая повторяется в каждом сообщении. Кроме того, просим исключать из полного текста все тэги форматирования.

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

3. Символы и кодировки

По умолчанию (если это не указано явно в заголовке) кодировкой файла считается utf-8. В противном случае выставление кодировки xml файла обязательно. Наиболее часто употребляемые кодировки: windows-1251, utf-8, koi8-r

Внимание: фактическая кодировка, отдаваемая веб-сервером, ВСЕГДА должна совпадать с кодировкой, указанной в заголовке XML.

Встречающиеся в тексте символы < > & ' " необходимо заменять на соответствующие элементы:
& на &amp;
< на &lt;
> на &gt;
' на &apos;
" на &quot;
(здесь точка с запятой - это не разделитель данного списка, а обязательная часть элемента!)
Замены должны производиться во всех элементах <item> и <channel> - в <yandex:full-text>, <link>,  <title>, <enclosure> и др.

Например, ссылка "http://some.host.ru/?id=1&page=10" приводится к виду "http://some.host.ru/?id=1&amp;page=10".

В случае, если RSS-файл передается в koi8-r, необходимо также заменить встречающиеся в тексте символы кодировки windows-1251 на аналоги из koi8-r:
многоточие                            код симвода 133
en-dash (короткое тире),            код симвода 150
em-dash (длинное тире),              код симвода 151
"Русский" номер                     код симвода 185
Кавычки-"ёлочки"                   коды символов 171 и 187
"Сглаженные" кавычки-"лапки"      коды символов 147 и 148
"Сглаженные" апострофы:              коды символов 145 и 146

 4. Механизм экспорта Данных

Для экспорта Данных необходимо положить RSS-файл на сервер издания и обновлять его с определенной периодичностью (например, файл может пополняться в течение дня и перезаписываться утром). Файл должен быть доступен по http, его индексирование (скачивание) происходит каждые 10 минут. Экспортный файл, который не удалось полностью загрузить за 10 секунд, считается недоступным.

5. Пример экспортного файла

<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0"
xmlns="http://backend.userland.com/rss2"
xmlns:yandex="http://news.yandex.ru">
    <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>
            <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:full-text>Для поиска по сайту www.kremlin.ru выбрана программа Яndex.Site. Этот программный продукт был исследован провайдером президентского сайта - Федеральным агентством правительственной связи и информации. ФАПСИ сочло возможным использование поисковой системы &lt;Яндекса&gt; на www.kremlin.ru. По результатам исследования программа была скомпилирована, протестирована и установлена на сайт. &lt;Мы надеемся, - говорит руководитель пресс-службы Президента России Наталья Тимакова, - что хороший поиск поможет людям лучше ориентироваться на президентском сайте и получать исчерпывающую информацию&gt;. Яndex.Site является частью пакета программных продуктов, предназначенного для поиска информации по одному или нескольким веб-сайтам, локального поиска или поиска в корпоративных сетях и базах данных. Он основан на тех же технологиях, что используются в поиске www.yandex.ru, и учитывает морфологию русского и многих других языков. Помимо Яndex.Site, компания &lt;Яндекс&gt; поставляет Яndex.CD - для поиска в коллекциях документов, издаваемых на CD ROM, и Яndex.Lib, предоставляющий низкоуровневые средства для встраивания поиска в любые другие программы.
            </yandex:full-text>
        </item>
    </channel>
</rss>

Аватар пользователя emzi emzi 11 сентября 2006 в 14:25

я-то думал, это про блоговский РСС идет речь... Но и в том виде, который описан у них, вполне рельно сделать. Непонятно только, как обрабатывать картинки. Выдирать из текста?

Аватар пользователя emzi emzi 11 сентября 2006 в 15:38

если суть новости заключается в картинке, то node будет иметь тип image, в этом случае экспортируем описание + картинку. Если сообщение текстовое с картинками, то либо выдираем теги img из текста и вставляем их в яндексовом представлении, либо не указывем вовсе.

Аватар пользователя Onza Onza 11 сентября 2006 в 16:21

itnovosti, откликнулись два человека пока (сегодня). Я еще не связывался, щас времени нет, займусь вечером. Т.е. пока не ясно. В принципе задачи похожие, только у меня не надо апгрейдить до 4.7.

emzi, спасибо, если есть возможность помочь - тоже скину все их требования и пример файла, который им нужен.

Аватар пользователя emzi emzi 11 сентября 2006 в 17:45

как только появится немножко времени, напишу тестовый модуль для яндексовой отдачи по приведенному выше документу. По результатам отпишусь тут.

Аватар пользователя yurg yurg 11 сентября 2006 в 17:48

У меня RSS пока ждёт (работает - руками не трогаю). Актуален исполнитель на другие задачи. Будет что-то интересное из кандидатов, дадите знать?

Аватар пользователя Onza Onza 11 сентября 2006 в 21:05

itnovosti >>Будет что-то интересное из кандидатов, дадите знать?

Да, конечно.

inc >>Пожалуйста, напиши ОТЛИЧИЯ между форматами: который возвращает Drupal и который нужен для Яндекса. Ну и все соображения, наработки в этом направлении.
Желательно напиши в отдельный файл и прикрепи к посту

Сегодня сделаю, немного попозже.

Аватар пользователя smile smile 12 сентября 2006 в 1:09

Отличия такие:
1. Друпал отдает или только тизеры или только фултекст. Яндексу нужно И ТО И ДРУГОЕ.
2. Яндексу нужен ЧИСТЫЙ ТЕКСТ. Без тегов.
3. У яндекса специфический синтаксис рсс-ки ()

Аватар пользователя Onza Onza 12 сентября 2006 в 5:48

Скопировал и выложил в txt технические требования яндекса сюда:
UPD: убрал линк.
Пункт 2 там - это тот самый их yandex:full-text, который хотелось бы реализовать отдельным модулем.. Или не знаю, - тогда наверное логичнее отдельный модуль/скрипт для преобразования стандартного друпаловского фида в формат для "я-новостей" (в отдельный поток).

Там же, внизу, после их требований, вставлен пример друпаловского фида с нашего сайта на 4.7.3.

Аватар пользователя smile smile 12 сентября 2006 в 13:57

inc, благодарю. логика ясна в общем-то. но скромно замечу что на выходе - файл далекий от формата яндекса. там только полный текст ноды, когда я хочет и тизер и полный текст. кроме того, не совсем понятно, что происходит если в тексте картинка есть.

Аватар пользователя inc inc 12 сентября 2006 в 15:55

Все что делает модуль - это добавляет в стандартный вывод RSS потока поле yandex:full-text если присутствует from=yandex.
Для совместимости с Яндексом в настройках RSS должен стоять тип вывода "название с тизером".
Не удалось достигнуть замены символа ' на ' из-за особенностей Drupal API. Сейчас ' заменяется на '

Потестируйте и напишите, на что ругается Яндекс.
У меня сейчас нет возможности проверить работу этого модуля.

Аватар пользователя inc inc 12 сентября 2006 в 16:04

Сейчас из тела ноды вначале удаляются все тэги функцией strip_tags, однако при этом еще и конвертируются спецсимволы в HTML-сущности. Поэтому затем происходит обратное преобразование функцией html_entity_decode. После функция format_rss_item конвертирует символы <, >, ', " и & в HTML-сущности.
Т.О. в тексте остаются неконвертированные спецсимволы типа значка копирайта(которому соответствует &copy;), неразрывный пробел(&nbsp;) и прочие.

Проверьте, не ругается ли на них Яндекс.

Если не вызывать html_entity_decode, то в потоке остаются HTML-сущности и после format_rss_item получается что-то типа &amp;nbsp;

Аватар пользователя emzi emzi 13 сентября 2006 в 14:41

модуль

что НЕ работает:
выборка из контейнеров (словарей)
вставка картинок
ограничение количества выводимых статей
возможны проблемы с модулем category

с картинками принципиальная неясность: по стандарту требуется указать тип, но откуда его брать, непонятно. Можно анализировать расширение, но будет ли это правильно?

Аватар пользователя Onza Onza 19 сентября 2006 в 14:48

Одним словом - не работает так как им надо.
По идее, надо писать скрипт - не для преобразования друпаловского фида, а который будет по крону перезаписывать отдельный (специально для яндекса) xml-файл, лежащий где-нибудь в папке files. Похоже, что это будет наиболее "чистый" метод.
Интересно, кто бы за это взялся, и сколько примерно будет стоить?

Аватар пользователя emzi emzi 19 сентября 2006 в 17:05

вообще-то мой модуль не фид преобразовывает, а делает свой собственный фид, именно под яндекс. Возможны проблемы из-за ограничений производительности (яндекс хочет все всосать за 10сек), тогда действительно, лучше по крону в файл. Насчет такого варианта приглашаю в личку.

Аватар пользователя rariteth rariteth 20 сентября 2006 в 2:48

и ещё интересен вопрос про yandex:money и webmoney? да и ещё особенно буду благодарен - как сделать чтоб при оформлении товара он просто заполнил форму и она пришла к нам на почту? без систем платежей

Аватар пользователя emzi emzi 20 сентября 2006 в 13:38

насчет вебденег и заказов - зависит от того, каким модулем пользуетесь для организации магазина

Аватар пользователя rariteth rariteth 23 сентября 2006 в 2:59

модуль eccomerce, но не потльзуемся он для paypal... неподходит, пока до этого не дошло, но думю в итоге просто форму которая приходит к нам на почту, вот тока как чтоб в этой форме выводились все товары или при клике на товар он появлялся в начале формы. Никто не замарачивался ещё?

Аватар пользователя Lalex Lalex (не проверено) 30 сентября 2006 в 17:17

ну если еще не сделали - попробуйте этот вариант:
на самом яндексе эту версию не проверял (предыдущая не прошла).
P.S. красивостю кода не занимался - не пинайте плз

<?php
/**
 * yandex news rss
 *
 */

require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$items='';

$st_sql = "SELECT n.nid,n.created,n.type,n.title,n.sticky,nr.teaser,nr.body FROM node n INNER JOIN node_revisions nr WHERE n.nid=nr.nid AND n.status = 1 ORDER BY created DESC LIMIT 20";
$st_result = db_query($st_sql);
while($rnode = db_fetch_object($st_result)) {
        $cteaser = filter_xss($rnode->teaser,preg_split('/\s+|<|>/','<a> <b> <br> <dd> <dl> <dt> <em> <i> <li> <ol> <p> <strong> <u> <ul>', -1, PREG_SPLIT_NO_EMPTY));
        $cbody = filter_xss($rnode->body,preg_split('/\s+|<|>/','<a> <b> <br> <dd> <dl> <dt> <em> <i> <li> <ol> <p> <strong> <u> <ul>', -1, PREG_SPLIT_NO_EMPTY));
        $items .= "<item>\n<title>".strip_tags($rnode->title)."</title>\n<link>".url("node/{$rnode->nid}",NULL,"node-{$rnode->nid}",TRUE)."</link>\n<description>".check_plain($cteaser)."</description>\n<pubDate>".date('r', $rnode->created)."</pubDate>\n<yandex:full-text>".check_plain($cteaser)."".check_plain($cbody)."</yandex:full-text>\n</item>\n";
}

global $locale;

$cversion  = '2.0';
$ctitle  = "internet.ru - RSS лента";
$clink = 'http://internet.ru/';
$cdescription= 'internet.ru - все статьи сайта';
$clanguage= $locale;
$cimg = '<image><url>http://internet.ru/img/internet.ru-logo.gif</url><title>Новости интернет</title><link>http://internet.ru/</link></image>';

 
$output = '<rss version="2.0" xmlns="http://backend.userland.com/rss2" xmlns:yandex="http://news.yandex.ru">' . "\n";
$output .= '<channel><title>'.$ctitle.'</title><link>'.$clink.'</link><description>'.$cdescription.'</description>'.$cimg;
$output .= $items;
$output .= "</channel></rss>\n";

drupal_set_header('Content-Type: text/xml; charset=utf-8');
print $output;

?>

Аватар пользователя smile smile 30 сентября 2006 в 18:26

НЕ катит. И знаете почему? В самом скрипте все ок, но Яндексовский робот,который фиды собирает, хочет получить фид полностью в течении 10 секунд.

Аватар пользователя smile smile 1 октября 2006 в 1:52

Уважаемый, Вы правда с Интернет.ру? Вас же Яндекс идексирует (фид в новости) - покажите рабочий вариант Smile

Тут просто предлагали пяток вариантов и вроде как никто не доложил о положительном внедрении.