Как написать генератор rss для стрима

Наша копилка знаний

Модераторы: dushik, Slim

Ответить
Аватара пользователя
dushik
Admin
Сообщения: 2204
Зарегистрирован: Вс сен 03, 2006 4:51 pm

Как написать генератор rss для стрима

Сообщение dushik » Ср окт 31, 2012 4:46 pm

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

Для добавляемых галерей в rss-е передается следующая информация:
url - урл галереи
description - описание
тумбы - одна или несколько
pubDate - дата публикации
pics и movs - количество изображений и видеороликов в галерее
duration - продолжительность видео
info - поле инфо (обычно его используют для перечисления тэгов галереи)
sponsor и paysite
поле content - в этом поле храниться информация для создания локальных галерей (embed-код, или url flv видео)
Есть еще несколько тэгов для "внутреннего использования", которые либо тестируются, либо не имеют практического смысла для вас.

Для удаления галь передается url (внешний) и поле content.

Выглядит rss так:

Код: Выделить всё

<?xml version="1.0"?>
<rss xmlns:streamrotator="http://streamscripts.com/rss/1.0/" version="2.0">
<channel>
		<title>Stream Rotator Export RSS</title>
		<description><![CDATA[all, Gallery type: ALL, Rotators: ALL, Paysites: ALL]]></description>
		<link>http://www.streamscripts.com</link>
		<generator>Stream Rotator 1.011</generator>
		<item>
			<title>DESC</title>
			<link>URL</link>
			<description><![CDATA[<a href= GALLERY_URL><img src=THUMB_URL_1><img src=THUMB_URL_2><img src=THUMB_URL_3></a>]]></description>
			<pubDate>PUB_DATE</pubDate>
			<StreamRotatorPics>PICS</StreamRotatorPics>
			<StreamRotatorMovies>MOVS</StreamRotatorMovies>
			<StreamRotatorDuration>DURATION</StreamRotatorDuration>
			<StreamRotatorInfo>INFO</StreamRotatorInfo>
			<StreamRotatorSponsor>SPONSOR_NAME</StreamRotatorSponsor>
			<StreamRotatorPaysite>PAYSITE_NAME</StreamRotatorPaysite>
			<StreamRotatorContent>CONTENT</StreamRotatorContent>
		</item>


		<deleteditem>
			<link>DELETED_URL</link>
			<StreamRotatorContent>CONTENT</StreamRotatorContent>
		</deleteditem>
	</channel>
</rss>
Сначала идет заголовок.
Потом для каждой галереи которую нужно импортировать - блок <item>…</item>
Для галерей, которые нужно удалить - <deleteditem>…</deleteditem>
В конце закрываем открытые тэги.

Стрим не отслеживает соблюдение этого формата, в простейшем случае ему достаточно такого rss-а:

Код: Выделить всё

<item>
	<link>URL</link>
</item>
Без заголовка, окончания, и прочих тэгов. Так что пишите только то, что необходимо передать и не забивайте голову прочей ненужной ерундой ).

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

Для разбивки rss на части необходимо прописать в заголовке (после <channel> и перед первым <item>) несколько дополнительных тэгов:

<StreamRotatorTmpId>RSS_ID</StreamRotatorTmpId>
<StreamRotatorNextPart>NEXT_PART</StreamRotatorNextPart>
<StreamRotatorRemains>REMAINS</StreamRotatorRemains>

<StreamRotatorTmpId>RSS_ID</StreamRotatorTmpId> - RSS_ID это уникальный идентификатор rss-а. Он необходим потому что в каждый момент времени стрим может отдавать несколько rss-ов, для разных сайтов, с разным количеством запрошенных галерей и т.д. В общем если пришел запрос на новый rss, создавайте новый RSS_ID.
<StreamRotatorNextPart>2</StreamRotatorNextPart> - означает что существует вторая часть rss-а.
<StreamRotatorRemains>REMAINS</StreamRotatorRemains> - сколько еще галерей ожидается.

Следующий кусок rss-а будет запрошен с такими параметрами:
http://domain.com/rss.rss?tmpid=RSS_ID&part=2
Следующий:
http://domain.com/rss.rss?tmpid=RSS_ID&part=3
и т.д.
В последнем куске не должно быть тэгов StreamRotatorTmpId и StreamRotatorNextPart.


Сколько галерей должно быть в rss?
В rss я рекомендую выкладывать только новые галереи. Стримы при настройках по умолчанию грабят rss каждые 12 часов. Поэтому хорошее решение - иметь в rss-е галереи добавленные за последние 12 часов. Идеальное - за последние 24 часа, чтобы в случае форс-мажоров скрипты получили обновления со второго раза.

Как понять, что стрим хочет получить не обычный rss с текущими обновлениями, а специальный, со стольким количеством гелерей, сколько ему нужно?
Для этого надо добавить в скрипт обработку нескольких дополнительных GET параметров.
type - если значение равно advanced, значит стрим просит предоставить не текущий rss, а сделать отдельную, разовую выборку, на основе еще двух параметров из GET:
count - число, количество запрашиваемых галерей
order - значения top или latest. Лучшие или самые свежие.

Если ваш скрипт формирования rss-ов поддерживает обработку этих параметров, нужно в тело rss-а добавить
<generator>Stream Rotator</generator>
(как на примере выше). Это необходимо для того, что бы стримы понимали, что они могут делать такие расширенные запросы (advanced grabbing).
Последний раз редактировалось dushik Чт май 08, 2014 2:28 pm, всего редактировалось 1 раз.

st01en
Сообщения: 22
Зарегистрирован: Вт июл 05, 2011 9:49 pm

Сообщение st01en » Пн май 13, 2013 9:46 pm

Меня интересует рсс для передачи из блога в стрим. Это, насколько я понял для стрим-стрим?
Так вот, что должно быть во входящем фиде?
Какие поля обязательны? Как выглядит нода для одной и нескольких тумб? Если в линке встречаются &, надо ли заворачивать линк в CDATA?

Аватара пользователя
dushik
Admin
Сообщения: 2204
Зарегистрирован: Вс сен 03, 2006 4:51 pm

Сообщение dushik » Вт май 14, 2013 6:11 am

st01en писал(а):Меня интересует рсс для передачи из блога в стрим. Это, насколько я понял для стрим-стрим?
не только для "стрим-стрим"
st01en писал(а):Так вот, что должно быть во входящем фиде?
пример кода выше в первом сообщении
st01en писал(а):Какие поля обязательны?
dushik писал(а):Стрим не отслеживает соблюдение этого формата, в простейшем случае ему достаточно такого rss-а:

Код: Выделить всё

Код:
<item> 
   <link>URL</link> 
</item>
Без заголовка, окончания, и прочих тэгов. Так что пишите только то, что необходимо передать и не забивайте голову прочей ненужной ерундой ).

st01en писал(а): Как выглядит нода для одной и нескольких тумб?
dushik писал(а):

Код: Выделить всё

<description><![CDATA[<a href= GALLERY_URL><img src=THUMB_URL_1><img src=THUMB_URL_2><img src=THUMB_URL_3></a>]]></description>
st01en писал(а):Если в линке встречаются &, надо ли заворачивать линк в CDATA?
Нет не, нужно, но нужно поменять & на &

АвтоЗАЗ
Сообщения: 13
Зарегистрирован: Вс авг 23, 2015 10:04 am

Re: Как написать генератор rss для стрима

Сообщение АвтоЗАЗ » Сб июл 18, 2020 1:15 pm

Для удаления галь передается url (внешний) и поле content.
<deleteditem>
<link>DELETED_URL</link>
<StreamRotatorContent>CONTENT</StreamRotatorContent>
</deleteditem>
Оба поля обязательны? Не достаточно будет внешнего урла?

Аватара пользователя
dushik
Admin
Сообщения: 2204
Зарегистрирован: Вс сен 03, 2006 4:51 pm

Re: Как написать генератор rss для стрима

Сообщение dushik » Вс июл 19, 2020 4:08 pm

АвтоЗАЗ писал(а):
Сб июл 18, 2020 1:15 pm
Для удаления галь передается url (внешний) и поле content.
<deleteditem>
<link>DELETED_URL</link>
<StreamRotatorContent>CONTENT</StreamRotatorContent>
</deleteditem>
Оба поля обязательны? Не достаточно будет внешнего урла?
урла достаточно

Ответить