[РЕШЕНО] Модуль для экспорта в Яндекс.Новости

Прислано: eagle

вт, 10/03/2009 - 04:01

Встала у меня задача перевести один довольно популярный сайт на Drupal. При этом необходимо полностью повторить функционал, а в некоторых частях и расширить.
Поскольку сайт уже несколько лет висит в яндекс.новостях, стал искать подходящий модуль. Потратив на поиски три дня, я, честно говоря, обломался, так как ничего подходящего не нашел. Варианты делать экспорт через всеми любимый Views меня никак не устраивали, да и рабочих модулей под 6-й друпал и 2-й вьюс нет. Или я совсем искать не умею.
Вот сел сегодня ночью и нарисовал нечто. Вроде работает. Фид выдает по адресу rssyandex.xml

Что можно сделать, но я делать не буду (пока):

Страничку настройки модуля в админке,
Возможность настройки адреса выдачи фида,
Возможность настройки имени Автора (сейчас берется из слогана),
Возможность настройки логотипа (сейчас берется из папки с темой/images/yn-logo.png),
Возможность выбирать иллюстрации, аудио и видеофайлы из ноды и вставлять их в <enclosure>.

Отдельное спасибо следующим товарищам:
dan
dyp@drupal.org
vladsavitsky
Материалы и работы которых помогли в реализации.

P.S. Если кто подправит или проверит в работе модуль, буду очень признателен.
Пожалуйста, отпишитесь здесь о результатах.

Строка 43 в rssyandex.module задаете номера терминов для экспорта, через запятую.
Строка 74 в rssyandex.module задаете номер основного словаря, так как в яндекс.новостях может быть указана только одна категория, соответственно если у новости несколько тегов, то теги (не материалы) из неосновного словаря отсекаются.

Подправил 21/02/2012.
Работает на живом сайте нареканий не вызывает.
Тестируйте спокойно.

Прикрепленный файлРазмер
rssyandex.zip3.07 кб

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано batbug в вт, 10/03/2009 - 06:25.

Отлично. Сам давно думаю о таком модуле, так что думаю, я возьму ваш за базу, и попробую его доделать.


Опубликовано Valeratal в вт, 10/03/2009 - 06:44.

спасибо, полезно
хотя мои новости неинтересны яндексу


Опубликовано Stalker-g2 в вт, 10/03/2009 - 12:01.

год назад качал с друпал.ру такой модуль


Опубликовано eagle в вт, 10/03/2009 - 14:50.

"Stalker-g2" написал(а):

год назад качал с друпал.ру такой модуль

Было три варианта от указанных в моем посте товарищей, но они под 6-ку не работали корректно.
А работающего модуля я, к сожалению, не нашел.


Опубликовано afishi в чт, 21/05/2009 - 21:05.

а в 5 будет работать?


Опубликовано eagle в пт, 22/05/2009 - 20:12.

"afishi" написал(а):

а в 5 будет работать?

нет, но для 5-го тоже есть готовый модуль


Опубликовано eagle в пт, 22/05/2009 - 20:22.

Обновил модуль, подправил свой пост.


Опубликовано PVasili в пт, 22/05/2009 - 20:29.

Почему бы на org не выложить?


Опубликовано eagle в пт, 22/05/2009 - 20:36.

"PVasili" написал(а):

Почему бы на org не выложить?

Я как то не представляю, кого на org может заинтересовать экспорт в Яндекс.

А наши соотечественники, я думаю, на Drupal.RU точно заглянут.
Хотя... может и стоит выложить.


Опубликовано PVasili в пт, 22/05/2009 - 20:49.

Обязательно стоит!
Сервис линки, интеграция с платежными системами, пингер - все на рунет рассчитанное лежит там. Чем хуже мы хуже Новой Зеландии ;)?


Опубликовано eagle в пт, 22/05/2009 - 20:53.

Благодарю за наставление!
Выложу, раз стоит. Только описание напишу на английском, и сразу выложу.


Опубликовано jeehadina в сб, 23/05/2009 - 03:26.

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

а за модуль спасибо!


Опубликовано index в ср, 27/05/2009 - 12:53.

"jeehadina" написал(а):

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

К чему такой педантизм? Любое, даже самое черновое решение пригодится многим и будет доведено до ума.


Опубликовано makartsoft в ср, 27/05/2009 - 19:06.

Вопрос: как изменить страницу вывода ленты?


Опубликовано eagle в чт, 28/05/2009 - 05:49.

"makartsoft" написал(а):

как изменить страницу вывода ленты?

Строка 13

$items['rssyandex.xml'] = array(

изменить по вкусу.


Опубликовано makartsoft в чт, 28/05/2009 - 06:19.

"eagle" написал(а):

$items['rssyandex.xml'] = array(

Да, это я понял. Просто дело вот в чем:
1. Страницу вывода надо менять до установки модуля. Я пытался сделать наоборот, в итоги ничего не получалось.
2. Если вы сперва установили модули, а потом меняя страницу, пытаетесь зайти на вновь созданную, то не получается. Проблема решается простым update.php

Спасибо за модуль. Его я и ждал, чтобы на 6 перейти :-)


Опубликовано eagle в чт, 28/05/2009 - 09:09.

Ну, я как то думал, что это естесственная последовательность действий, после правки модулей делать update.php

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

59, 60, 61,
63, 64, 65.

Если их убрать, то это несколько уменьшит нагрузку.


Опубликовано Anodonta в ср, 03/06/2009 - 08:09.

А можно по-подробнее описать, что делать после его установки?
Установился то он нормально, а дальше "не вижу" что делать.
Спасибо.


Опубликовано ravik в чт, 04/06/2009 - 15:31.

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

Быть может для реализации админки посмотреть в сторону "смежного" модуля  Google News?

Anodonta, как написано выше, заменить в rssyandex.module номера терминов таксономии на собственные


Опубликовано Anodonta в пт, 05/06/2009 - 07:36.

"ravik" написал(а):

заменить в rssyandex.module номера терминов таксономии на собственные

А Вы могли бы привести пример рабочего (с настроенными параметрами) этого модуля, какого-либо сайта (например своего)?
Спасибо.


Опубликовано eagle в пт, 05/06/2009 - 19:52.

"Anodonta" написал(а):

А Вы могли бы привести пример рабочего (с настроенными параметрами) этого модуля, какого-либо сайта (например своего)

Вот мой сайт:

Министерство печати и массовых коммуникаций Республики Южная Осетия

А вот и результат:

Яндекс.Новости


Опубликовано eagle в пт, 05/06/2009 - 20:08.

"ravik" написал(а):

Быть может для реализации админки посмотреть в сторону "смежного" модуля Google News?

Спасибо за наводку.

К сожалению, модули используют несколько разный подход к выборке,
мой на основе таксономии, а гугловский на основе типов материалов.

Надо будет поковырять на досуге.


Опубликовано direqtor в ср, 10/06/2009 - 07:24.

Маладца! Так держать.


Опубликовано Anodonta в ср, 10/06/2009 - 16:14.

"eagle" написал(а):

Вот мой сайт:

Спасибо огромное!
А справа внизу у Вас картинки (хочу так) красиво так выводятся, это что-то стандартное (бесплатное) или самодельное (профессиональное и дорогое)?


Опубликовано eagle в ср, 10/06/2009 - 19:12.

"direqtor" написал(а):

Маладца! Так держать.

Валентин, Спасибо огромное! Без вашей поддержки так и не перешел бы на друпал никогда!

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

"Anodonta" написал(а):

А справа внизу у Вас картинки (хочу так) красиво так выводятся, это что-то стандартное (бесплатное) или самодельное (профессиональное и дорогое)?

Это Highslide JS прикручен на уровне темизации, применяется на картинки при вставке специального кода в BuEditor.


Опубликовано dniester в вт, 14/07/2009 - 22:57.

В середине файла видим, как выводится содержимое тегов ___ А ВОТ КАК:

array('key' => 'autor', 'value' => variable_get('site_slogan', ''))

Яндекс-Новости требует сейчас точное имя автора новости, а не слоган сайта. Как вывести имя автора ноды таким образом? В примере осетинского портала выводится тоже слоган. Как вогнать сюда переменную и какую именно. Тогда, вероятно, Яндекс устроило то, что предлагает автор ветки. Сегодня, увы, нет. Проблема решается так:

array('key' => 'autor', 'value' => $item->name)

Вот что выходит у меня: http://dniester.ru/rssyandex.xml

И еще. Может, кто-нибудь в курсе, как убирается ошибка – двойное квотирование служебных символов - & amp;quot; ? Яндексу тоже не нравится это дело... встречающиеся в тексте символы < > & ' " необходимо заменять на соответствующие элементы:
& на & amp;
< на & lt;
> на & gt;
' на & apos;
" на & quot;
(пробелы добавлены мной, чтоб видно было)Замены должны производиться во всех элементах и – в , , , и др.

И еще... Яндекс увы дико возражает по поводу больших картинок в ноде. Пишут вот мне:

- согласно нашим техническим требованиям, каждое сообщение должно располагаться на отдельной странице, открывающейся по указанному адресу, при этом заголовок и начало текста сообщения должны быть доступны в первом экране при разрешении 1024х768. Некоторые сообщения не отвечают этому требованию, например: http://dniester.ru/content/bankovskiy-sektor-v-pridnestrove-posledstviya...

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


Опубликовано dniester в ср, 15/07/2009 - 12:58.

Кстати, какая-то дикая заморочка с временной зоной вышла в этом модуле. В новость вставляет по UTC как задаешь в профиле автора ноды, а в РСС все равно отгружает локально. Возился полдня. Решение следующее. Добавляем пару строчек. +0300 - это, к примеру, Tiraspol или Kiev. Нужную мне для Яндекса +0200 дал Осло.

// Выставление временной зоны +0200
date_default_timezone_set('Europe/Oslo');

место размещения - выше этой строки: $extra = array(array('key' => ...............


Опубликовано dniester в чт, 16/07/2009 - 13:39.

// Очищение тизера и ноды от всего, что не нужно Яндекс-Новостям

$search1 = array ("']*?>.*?'si", // Вырезает javaScript
"'<[\/\!]*?[^<>]*?>'si", // Вырезает HTML-теги
"'([\r\n])[\s]+'", // Вырезает пробельные символы
"'&(quot|#34);'i", // Заменяет HTML-сущности
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e"); // интерпретировать как php-код

$replace1 = array ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");

$text1 = preg_replace($search1, $replace1, $item->body);
$item->body = $text1;
$text2 = preg_replace($search1, $replace1, $item->teaser);
$item->teaser = $text2;
$item->body = $item->teaser . $item->body;

ВСТАВЛЯЕМ ЭТО ПЕРЕД: $extra = array(array('key' =>


Опубликовано Dock@drupal.org в пн, 27/07/2009 - 10:30.

Сейчас возникла задача в подобном модуле, но функционала текущего модуля для меня недостаточна. Поэтому я взялся за разработку своего модуля. Если автор не против, то позаимствую немного его кода. Думаю модуль к концу недели будет готов. Ждите релизов;)


Опубликовано eagle в ср, 29/07/2009 - 03:31.

"Dock@drupal.org" написал(а):

Если автор не против, то позаимствую немного его кода

Автор совсем не против, автор просто очень занят до сентября и сам его доработать не успевает. :)


Опубликовано Dock@drupal.org в ср, 29/07/2009 - 05:32.

:) Правда с неделей я погорячился. Сначала сделал под себя и понял, что он решает только мои задачи, но не глобальные) Поэтому решил сделать плагин для Views, но с документацией по ним как-то туго...


Опубликовано Комсомолец в ср, 23/09/2009 - 09:38.

Поставил модуль, вот что ответил Яндекс:
...
- исключите, пожалуйста, из тегов ссылки на изображения.
....
- в тегах необходимо указывать имя и фамилию автора сообщения.
....
- в Вашем экспортном файле регулярно повторяется ошибка – двойное
квотирование служебных символов - "

С автором разобрался, с квотированием, как я понял - это коммент "Очищение тизера и ноды от всего, что не нужно Яндекс-Новостям" поможет. А вот как оттуда ссылки на изображения удалить? Можно вообще совсем. Я так понимаю, что там одной строчки достаточно, но в PHP как-то не очень.


Опубликовано eagle в ср, 23/09/2009 - 20:04.

-


Опубликовано eagle в ср, 23/09/2009 - 20:02.

"Комсомолец" написал(а):

А вот как оттуда ссылки на изображения удалить?

А как к ноде изображения прикрепляются? У меня они вырезаются нормально.
Обратите внимание вот на эту часть кода:

<?php    // Clean up feed
    
$item->body preg_replace"#<div class=\"video\">(.+?)</div>#is"""$item->body );
    
$item->body preg_replace"#<div class=\"audio\">(.+?)</div>#is"""$item->body );
    
$item->body check_plain(decode_entities(strip_tags($item->body)));
    
$item->teaser preg_replace"#<div class=\"video\">(.+?)</div>#is"""$item->teaser );
    
$item->teaser preg_replace"#<div class=\"audio\">(.+?)</div>#is"""$item->teaser );
    
$item->teaser check_plain(decode_entities(strip_tags($item->teaser)));?>

Вырезаются все изображения, все аудио и видео материалы. Это в тексте ноды, а что касается тегов, так что там вообще ссылки на изображения делают?


Опубликовано Комсомолец в чт, 24/09/2009 - 16:04.

Вот, что у меня в description выдаёт:

<description>&lt;a href=&quot;/node/1645&quot;&gt;&lt;img src=&quot;http://ast-news.ru/sites/default/files/images/555.thumbnail.jpeg&quot; alt=&quot;Молодёжь в законе. Как областные власти относятся к проблемам молодых людей&quot; title=&quot;Молодёжь в законе. Как областные власти относятся к проблемам молодых людей&quot;  class=&quot;image image-thumbnail &quot; width=&quot;100&quot; height=&quot;75&quot; /&gt;&lt;/a&gt;&lt;p&gt;«Молодым везде у нас дорога, Старикам везде у нас почёт…», - говорит песня.&lt;br /&gt;
В обществе, где наплевательски относятся ко всему народу, тщательно детализируют работу с отдельными категориями населения.&lt;br /&gt;

А в node - нормально, там уже этого изображения нет.
Этот кусок кода я даже править пытался, добавлял класс изображения - всё равно остаётся.


Опубликовано eagle в пт, 25/09/2009 - 06:24.

Можно ссылки на сайт и на ленту?


Опубликовано Комсомолец в пт, 25/09/2009 - 07:19.

http://ast-news.ru/
соответственно, лента http://ast-news.ru/rssyandex.xml


Опубликовано sergebw в чт, 29/10/2009 - 13:51.

Подскажите пожалуйста
через какой промежуток времени создается rssyandex.xml?
и какое количество новостей выводится?


Опубликовано sergebw в чт, 29/10/2009 - 14:13.

После установки модуля (он как я понял вырезает картинки)
некоторые статьи в rss начинаются:

<p</p<p

как это можно исправить?


Опубликовано andron13 в сб, 31/10/2009 - 17:41.

Модуль кал. Ничего не делает. Вообще ничего. Вид проще создать.
Обязательные элементы каждого сообщения: заголовок, время/дата, URL, полный текст. Полный текст сообщения необходим только для индексации поисковым роботом и на страницах Яндекса не размещается. Трансляция полного текста позволяет существенно улучшить качество поиска и, как следствие, повысить посещаемость издания - партнера службы Яндекс.Новости.
Ничего этого модуль не делает.
КАЛ.


Опубликовано nesca в чт, 05/11/2009 - 14:51.

dniester написал(а):

// Очищение тизера и ноды от всего, что не нужно Яндекс-Новостям

$search1 = array ("']*?>.*?'si", // Вырезает javaScript
"'<[\/\!]*?[^<>]*?>'si", // Вырезает HTML-теги
"'([\r\n])[\s]+'", // Вырезает пробельные символы
"'&(quot|#34);'i", // Заменяет HTML-сущности
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e"); // интерпретировать как php-код

$replace1 = array ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");

$text1 = preg_replace($search1, $replace1, $item->body);
$item->body = $text1;
$text2 = preg_replace($search1, $replace1, $item->teaser);
$item->teaser = $text2;
$item->body = $item->teaser . $item->body;

ВСТАВЛЯЕМ ЭТО ПЕРЕД: $extra = array(array('key' =>

чего то не помогает.
выдает:
&lt;div class=&quot;field field-type-date field-field-date&quot; и другую такую же лабуду
в и
Помогите победить, пожалуйста!!!
P.S. проблему можно посмотреть здесь


Опубликовано index в сб, 07/11/2009 - 11:31.

andron13 написал(а):

Модуль кал. Ничего не делает.

Не согласен, делает — http://wingexpress.ru/rssyandex.xml
Правда после доводки под нужды сайта.


Опубликовано sergebw в пн, 09/11/2009 - 10:08.

а как устранить проблемы?


Опубликовано TommyFar в пт, 13/11/2009 - 14:45.

Вижу тут полную темизацию для RSS YAndex
http://wingexpress.ru/rssyandex.xml

РАССКАЖИТЕ КАК? модулем rssysndex? - не получается его запустить!
Опишите с нуля пожалуйста! )


Опубликовано TommyFar в пт, 13/11/2009 - 14:50.

+ как сделать выборку RSS чтобы при создании новости можно было выбирать - ставить ли в RSS или нет!?


Опубликовано index в сб, 21/11/2009 - 12:15.

TommyFar написал(а):

РАССКАЖИТЕ КАК? Опишите с нуля пожалуйста! )
+ как сделать выборку RSS?

За документацией — к автору, пожалуйста. В кратце мое решение:

  1. Для новостей я создал словарь таксономии «Yandex RSS» и в нем единственный термин «Добавить в RSS». Термин получил id 15 (/taxonomy/term/15), его я и указал в модуле (строка 43):
    $taxo_id_arr = array(15);  // Номера терминов
  2. Чтобы в форме редактирования новости термин выбирался с помощью флажка (галочкой «Добавить в RSS», а не стандартным раскрывающимся списком), установил модуль Content Taxonomy, в типе материала добавил поле этого типа (Название: field_rss, Заголовок: Yandex RSS, Widget type: Checkboxes/Radios), сделал необязательным, привязал словарь «Yandex RSS»
  3. Указал словарь, термин из которого будет использоваться в теге <category> (строка 76):
    if ($term->vid == 1){ // Remove terms from unneeded vocabularies
    По правилам Яндекса этот тег должен содержать только одну категорию новости и не может быть пуст, иначе следует его исключить.
  4. Добавил код очистки и правку для имени автора, предложенные выше dniester'ом.
  5. Где-то в конце прописал свое лого (Яндекс требует в формате .gif, без анимации, размер 100 пикселей по максимальной стороне):
    $output .= '   <url>'. check_url($link) . base_path() . path_to_theme() ."/images/yn-logo.gif</url>\n";

И заработало =)


Опубликовано sergebw в пн, 16/11/2009 - 12:01.

сделал все как описано выше, rss формируется но возникает проблема
не убираются теги:

<p</p<p и <br /

хотя код очистки добавлен (п.4)
http://chaspik.pp.ua/?q=rssyandex.xml

что делать?


Опубликовано index в вт, 17/11/2009 - 12:12.

"sergebw" написал(а):

http://chaspik.pp.ua/?q=rssyandex.xml
что делать?

Если проблему так и не решили, то пришлите файл модуля и номер аськи (или что там у Вас) на master|сабака|koter.ru — я проверю.


Опубликовано index в сб, 21/11/2009 - 12:09.

"index" написал(а):

Отказался указывать словари, термины из которых не будут включены в ленту (строка 76):
if ($term->vid == 0){ // Remove terms from unneeded vocabularies

Осторожно, я ошибся! Если сделать так, то тэг станет пустым и Яндекс перестанет кушать канал. Указывайте словарь, термин которого должен выводится.
(прежний коммент поправлю)


Опубликовано jelio в пн, 23/11/2009 - 13:10.

index я тоже сперва удивился насчёт строки 76 и не поставил номер словаря, от яндекса пришел ответ заполнить "категорию" или удалить.

Кто нибудь знает как убрать закрытий тег autor ?
и почему он единственный закрытый?


Ссылки партнёров