[РЕШЕНО] Модуль для экспорта в Яндекс.Новости
Прислано: 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.zip | 3.07 кб |
- eagle's blog
- Для комментирования войдите или зарегистрируйтесь
Отлично. Сам давно думаю о таком модуле, так что думаю, я возьму ваш за базу, и попробую его доделать.
- Для комментирования войдите или зарегистрируйтесь
спасибо, полезно
хотя мои новости неинтересны яндексу
- Для комментирования войдите или зарегистрируйтесь
год назад качал с друпал.ру такой модуль
- Для комментирования войдите или зарегистрируйтесь
год назад качал с друпал.ру такой модуль
Было три варианта от указанных в моем посте товарищей, но они под 6-ку не работали корректно.
А работающего модуля я, к сожалению, не нашел.
- Для комментирования войдите или зарегистрируйтесь
а в 5 будет работать?
- Для комментирования войдите или зарегистрируйтесь
а в 5 будет работать?
нет, но для 5-го тоже есть готовый модуль
- Для комментирования войдите или зарегистрируйтесь
Обновил модуль, подправил свой пост.
- Для комментирования войдите или зарегистрируйтесь
Почему бы на org не выложить?
- Для комментирования войдите или зарегистрируйтесь
Почему бы на org не выложить?
Я как то не представляю, кого на org может заинтересовать экспорт в Яндекс.
А наши соотечественники, я думаю, на Drupal.RU точно заглянут.
Хотя... может и стоит выложить.
- Для комментирования войдите или зарегистрируйтесь
Обязательно стоит!
Сервис линки, интеграция с платежными системами, пингер - все на рунет рассчитанное лежит там. Чем хуже мы хуже Новой Зеландии ;)?
- Для комментирования войдите или зарегистрируйтесь
Благодарю за наставление!
Выложу, раз стоит. Только описание напишу на английском, и сразу выложу.
- Для комментирования войдите или зарегистрируйтесь
полагаю, на орг лучше выкладывать полностью законченные модули.
а то и охота отпадет на орг лезть, потому что там большая часть модулей хз как написана.
а за модуль спасибо!
- Для комментирования войдите или зарегистрируйтесь
полагаю, на орг лучше выкладывать полностью законченные модули.
а то и охота отпадет на орг лезть, потому что там большая часть модулей хз как написана.
К чему такой педантизм? Любое, даже самое черновое решение пригодится многим и будет доведено до ума.
- Для комментирования войдите или зарегистрируйтесь
Вопрос: как изменить страницу вывода ленты?
- Для комментирования войдите или зарегистрируйтесь
как изменить страницу вывода ленты?
Строка 13
$items['rssyandex.xml'] = array(
изменить по вкусу.
- Для комментирования войдите или зарегистрируйтесь
$items['rssyandex.xml'] = array(
Да, это я понял. Просто дело вот в чем:
1. Страницу вывода надо менять до установки модуля. Я пытался сделать наоборот, в итоги ничего не получалось.
2. Если вы сперва установили модули, а потом меняя страницу, пытаетесь зайти на вновь созданную, то не получается. Проблема решается простым update.php
Спасибо за модуль. Его я и ждал, чтобы на 6 перейти :-)
- Для комментирования войдите или зарегистрируйтесь
Ну, я как то думал, что это естесственная последовательность действий, после правки модулей делать update.php
К сожалению, сейчас нет времени доработать его до идеала, к тому-же писался модуль под конкретную задачу, и в коде есть несколько лишних строчек (парсер), которые при отсутствии необходимости в них, лучше удалить.
59, 60, 61,
63, 64, 65.
Если их убрать, то это несколько уменьшит нагрузку.
- Для комментирования войдите или зарегистрируйтесь
А можно по-подробнее описать, что делать после его установки?
Установился то он нормально, а дальше "не вижу" что делать.
Спасибо.
- Для комментирования войдите или зарегистрируйтесь
eagle, спасибо за модуль, на локальной машине все заработало, посмотрим что скажет яндекс.
Быть может для реализации админки посмотреть в сторону "смежного" модуля
Google News?
Anodonta, как написано выше, заменить в rssyandex.module номера терминов таксономии на собственные
- Для комментирования войдите или зарегистрируйтесь
заменить в rssyandex.module номера терминов таксономии на собственные
А Вы могли бы привести пример рабочего (с настроенными параметрами) этого модуля, какого-либо сайта (например своего)?
Спасибо.
- Для комментирования войдите или зарегистрируйтесь
А Вы могли бы привести пример рабочего (с настроенными параметрами) этого модуля, какого-либо сайта (например своего)
Вот мой сайт:
Министерство печати и массовых коммуникаций Республики Южная Осетия
А вот и результат:
- Для комментирования войдите или зарегистрируйтесь
Быть может для реализации админки посмотреть в сторону "смежного" модуля Google News?
Спасибо за наводку.
К сожалению, модули используют несколько разный подход к выборке,
мой на основе таксономии, а гугловский на основе типов материалов.
Надо будет поковырять на досуге.
- Для комментирования войдите или зарегистрируйтесь
Маладца! Так держать.
- Для комментирования войдите или зарегистрируйтесь
Вот мой сайт:
Спасибо огромное!
А справа внизу у Вас картинки (хочу так) красиво так выводятся, это что-то стандартное (бесплатное) или самодельное (профессиональное и дорогое)?
- Для комментирования войдите или зарегистрируйтесь
Маладца! Так держать.
Валентин, Спасибо огромное! Без вашей поддержки так и не перешел бы на друпал никогда!
Для тех кто не в курсе, direqtor сделал пловину черновой работы по переводу сайта на друпал, а также оказал огромную помощь в обучении.
А справа внизу у Вас картинки (хочу так) красиво так выводятся, это что-то стандартное (бесплатное) или самодельное (профессиональное и дорогое)?
Это Highslide JS прикручен на уровне темизации, применяется на картинки при вставке специального кода в BuEditor.
- Для комментирования войдите или зарегистрируйтесь
В середине файла видим, как выводится содержимое тегов ___ А ВОТ КАК:
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...
Есть ли возможность сделать так, чтобы в таком вот разрешении (оказывается, с ним довольно много посетителей ходит) картинка к примеру сжималась, или вообще не выводилась? Какие еще могут быть решения?
- Для комментирования войдите или зарегистрируйтесь
Кстати, какая-то дикая заморочка с временной зоной вышла в этом модуле. В новость вставляет по UTC как задаешь в профиле автора ноды, а в РСС все равно отгружает локально. Возился полдня. Решение следующее. Добавляем пару строчек. +0300 - это, к примеру, Tiraspol или Kiev. Нужную мне для Яндекса +0200 дал Осло.
// Выставление временной зоны +0200
date_default_timezone_set('Europe/Oslo');
место размещения - выше этой строки: $extra = array(array('key' => ...............
- Для комментирования войдите или зарегистрируйтесь
// Очищение тизера и ноды от всего, что не нужно Яндекс-Новостям
$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' =>
- Для комментирования войдите или зарегистрируйтесь
Сейчас возникла задача в подобном модуле, но функционала текущего модуля для меня недостаточна. Поэтому я взялся за разработку своего модуля. Если автор не против, то позаимствую немного его кода. Думаю модуль к концу недели будет готов. Ждите релизов;)
- Для комментирования войдите или зарегистрируйтесь
Если автор не против, то позаимствую немного его кода
Автор совсем не против, автор просто очень занят до сентября и сам его доработать не успевает. :)
- Для комментирования войдите или зарегистрируйтесь
:) Правда с неделей я погорячился. Сначала сделал под себя и понял, что он решает только мои задачи, но не глобальные) Поэтому решил сделать плагин для Views, но с документацией по ним как-то туго...
- Для комментирования войдите или зарегистрируйтесь
Поставил модуль, вот что ответил Яндекс:
...
- исключите, пожалуйста, из тегов ссылки на изображения.
....
- в тегах необходимо указывать имя и фамилию автора сообщения.
....
- в Вашем экспортном файле регулярно повторяется ошибка – двойное
квотирование служебных символов - "
С автором разобрался, с квотированием, как я понял - это коммент "Очищение тизера и ноды от всего, что не нужно Яндекс-Новостям" поможет. А вот как оттуда ссылки на изображения удалить? Можно вообще совсем. Я так понимаю, что там одной строчки достаточно, но в PHP как-то не очень.
- Для комментирования войдите или зарегистрируйтесь
А вот как оттуда ссылки на изображения удалить?
А как к ноде изображения прикрепляются? У меня они вырезаются нормально.
Обратите внимание вот на эту часть кода:
<?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)));?>Вырезаются все изображения, все аудио и видео материалы. Это в тексте ноды, а что касается тегов, так что там вообще ссылки на изображения делают?
- Для комментирования войдите или зарегистрируйтесь
Вот, что у меня в description выдаёт:
<description><a href="/node/1645"><img src="http://ast-news.ru/sites/default/files/images/555.thumbnail.jpeg" alt="Молодёжь в законе. Как областные власти относятся к проблемам молодых людей" title="Молодёжь в законе. Как областные власти относятся к проблемам молодых людей" class="image image-thumbnail " width="100" height="75" /></a><p>«Молодым везде у нас дорога, Старикам везде у нас почёт…», - говорит песня.<br /> В обществе, где наплевательски относятся ко всему народу, тщательно детализируют работу с отдельными категориями населения.<br />
А в node - нормально, там уже этого изображения нет.
Этот кусок кода я даже править пытался, добавлял класс изображения - всё равно остаётся.
- Для комментирования войдите или зарегистрируйтесь
Можно ссылки на сайт и на ленту?
- Для комментирования войдите или зарегистрируйтесь
http://ast-news.ru/
соответственно, лента http://ast-news.ru/rssyandex.xml
- Для комментирования войдите или зарегистрируйтесь
Подскажите пожалуйста
через какой промежуток времени создается rssyandex.xml?
и какое количество новостей выводится?
- Для комментирования войдите или зарегистрируйтесь
После установки модуля (он как я понял вырезает картинки)
некоторые статьи в rss начинаются:
<p</p<p
как это можно исправить?
- Для комментирования войдите или зарегистрируйтесь
Модуль кал. Ничего не делает. Вообще ничего. Вид проще создать.
Обязательные элементы каждого сообщения: заголовок, время/дата, URL, полный текст. Полный текст сообщения необходим только для индексации поисковым роботом и на страницах Яндекса не размещается. Трансляция полного текста позволяет существенно улучшить качество поиска и, как следствие, повысить посещаемость издания - партнера службы Яндекс.Новости.
Ничего этого модуль не делает.
КАЛ.
- Для комментирования войдите или зарегистрируйтесь
// Очищение тизера и ноды от всего, что не нужно Яндекс-Новостям
$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' =>
чего то не помогает.
выдает:
<div class="field field-type-date field-field-date" и другую такую же лабуду
в и
Помогите победить, пожалуйста!!!
P.S. проблему можно посмотреть здесь
- Для комментирования войдите или зарегистрируйтесь
Модуль кал. Ничего не делает.
Не согласен, делает — http://wingexpress.ru/rssyandex.xml
Правда после доводки под нужды сайта.
- Для комментирования войдите или зарегистрируйтесь
а как устранить проблемы?
- Для комментирования войдите или зарегистрируйтесь
Вижу тут полную темизацию для RSS YAndex
http://wingexpress.ru/rssyandex.xml
РАССКАЖИТЕ КАК? модулем rssysndex? - не получается его запустить!
Опишите с нуля пожалуйста! )
- Для комментирования войдите или зарегистрируйтесь
+ как сделать выборку RSS чтобы при создании новости можно было выбирать - ставить ли в RSS или нет!?
- Для комментирования войдите или зарегистрируйтесь
РАССКАЖИТЕ КАК? Опишите с нуля пожалуйста! )
+ как сделать выборку RSS?
За документацией — к автору, пожалуйста. В кратце мое решение:
- Для новостей я создал словарь таксономии «Yandex RSS» и в нем единственный термин «Добавить в RSS». Термин получил id 15 (/taxonomy/term/15), его я и указал в модуле (строка 43):
$taxo_id_arr = array(15); // Номера терминов - Чтобы в форме редактирования новости термин выбирался с помощью флажка (галочкой «Добавить в RSS», а не стандартным раскрывающимся списком), установил модуль Content Taxonomy, в типе материала добавил поле этого типа (Название: field_rss, Заголовок: Yandex RSS, Widget type: Checkboxes/Radios), сделал необязательным, привязал словарь «Yandex RSS»
- Указал словарь, термин из которого будет использоваться в теге
<category>(строка 76):
if ($term->vid == 1){ // Remove terms from unneeded vocabularies
По правилам Яндекса этот тег должен содержать только одну категорию новости и не может быть пуст, иначе следует его исключить. - Добавил код очистки и правку для имени автора, предложенные выше dniester'ом.
- Где-то в конце прописал свое лого (Яндекс требует в формате .gif, без анимации, размер 100 пикселей по максимальной стороне):
$output .= ' <url>'. check_url($link) . base_path() . path_to_theme() ."/images/yn-logo.gif</url>\n";
И заработало =)
- Для комментирования войдите или зарегистрируйтесь
сделал все как описано выше, rss формируется но возникает проблема
не убираются теги:
<p</p<p и <br /
хотя код очистки добавлен (п.4)
http://chaspik.pp.ua/?q=rssyandex.xml
что делать?
- Для комментирования войдите или зарегистрируйтесь
http://chaspik.pp.ua/?q=rssyandex.xml
что делать?
Если проблему так и не решили, то пришлите файл модуля и номер аськи (или что там у Вас) на master|сабака|koter.ru — я проверю.
- Для комментирования войдите или зарегистрируйтесь
Отказался указывать словари, термины из которых не будут включены в ленту (строка 76):
if ($term->vid == 0){ // Remove terms from unneeded vocabularies
Осторожно, я ошибся! Если сделать так, то тэг станет пустым и Яндекс перестанет кушать канал. Указывайте словарь, термин которого должен выводится.
(прежний коммент поправлю)
- Для комментирования войдите или зарегистрируйтесь
index я тоже сперва удивился насчёт строки 76 и не поставил номер словаря, от яндекса пришел ответ заполнить "категорию" или удалить.
Кто нибудь знает как убрать закрытий тег autor ?
и почему он единственный закрытый?
- Для комментирования войдите или зарегистрируйтесь














Комментарии