Форумы: Помощь:

Помогите начать пользоваться этим сервисом.



До прихода сюда пользовался feed43.com Так как он благополучно издох, решим попробовать.
Для примера помогите с простой задачкой, что бы понять логику.
Беру ссылку без РСС
http://pda.rbc.ru/quotes.shtml
вставляю в DevTools закладка "парсер" нахожу нужный мне блок
в закладке "свойства" он отображается:

nodeName: table
---
xpath: /html/body/div[3]/div[1]/table[1]
---
childNodes.length: 5

и теперь у меня тупик, не могу заставить отображаться в закладке "темплэйт"
Помогите с этим примером, надеюсь дальше сам разберусь.
lfc-su, все просто :)
Ваш случай - создание RSS-ленты без RSS вообще, причем вся нужная информация сосредоточена на одной странице. На этом сайте есть похожие ленты, например:
http://rss-farm.ru/channels/diggi/weather - погода в Москве

Что и как делать:
На вкладке Templates вводим Source Url (http://pda.rbc.ru/quotes.shtml), Channel title (РБК: ключевые индикаторы), Encoding (windows-1251). Снимаем галочку RSS based (http://pda.rbc.ru/quotes.shtml - обычная страница). А в Channel template пишем такое заклинание:
try{
	// Что бы было потом проще, выделим XPath в отдельную переменную
	var mainXpath = '/html/body/div[3]/div[1]/table[1]';

	// Создаем документ, используя нужный адрес
	var d = new Document(channel.url, channel.encoding);

	// В отдельную переменную получаем те данные, которые нам нужны
	var body = d.getElementsByXPath(mainXpath)[0];
	
	// Создаем элемент RSS-ленты, и кладем в него полученные данные
	var a = new Article();
	a.body = body.outerHTML;

	// Созданный элемент ленты кладем, собственно, в ленту
	channel.articles.push(a);
}catch(e){
	errorMessages.Add(e);
}
Благодарю, за оперативную помощь, уже стараюсь разобраться на существующих примерах.
Вскипел мой разум не смышлённый. Не могу понять принцип выделения нужных новостей на странице...
вот пример, не сложный в feed43(тут для меня тупик):
http://www.liverpoolfc.tv/mediawatch/a_index.shtml
iso-8859-1
в DevTools закладка "парсер" нахожу нужный мне блок
в закладке "свойства" он отображается:
/html/body/p[4]
Но это одна новость, в правой колонке все новости обозначены одинаково
p(7)
<p class="body"> ххххх </p>
пробую:
var links = d.getElementsByAttr('p', 'class', 'body');
но видимо это не для этого случая и вываливается куча ошибок.

В продолжение, полная статья ите по ссылке
/drilldown/a_MW15028090907-1138.shtml
в том же виде
<p class="body"> ххххх </p>
Добавлю по первому вопросу.
канал не обновляется, в (UpLog)
пишет
rbc-ru HALTED
8 сентября 2009 г., 14:41:16 | lfc-su
Article must have an id Parameter name: articleDTO

rbc-ru OK
8 сентября 2009 г., 14:41:14 | lfc-su
Started
> Article must have an id Parameter name: articleDTO
Точно! :) Я совсем забыл. Для каждой статьи нужно задать 2 свойства:
	...
	a.url = a.id = channel.url + '#'+ DateTime.Now.Date;

	// Созданный элемент ленты кладем, собственно, в ленту
	channel.articles.push(a);
	...

> http://www.liverpoolfc.tv/mediawatch/a_index.shtml
Напишу чуть позже. Я так понимаю, Вам нужно вытащить все материалы, которые расположены по ссылкам на этой странице?

В (UpLog)
всё равно пишет:
rbc-ru HALTED
8 сентября 2009 г. 20:44
Article must have an id
Parameter name: articleDTO

Вот шаблон полностью:
<?xml version="1.0" encoding="utf-8"?><Template type="ScriptUpdater"><Url>http://pda.rbc.ru/quotes.shtml</Url><Title>rbc.ru</Title><Description>КЛЮЧЕВЫЕ ИНДИКАТОРЫ</Description><Encoding>windows-1251</Encoding><UserAgent></UserAgent><ChannelTemplate><![CDATA[try{

// Что бы было потом проще, выделим XPath в отдельную переменную

var mainXpath = '/html/body/div[3]/div[1]/table[1]';



// Создаем документ, используя нужный адрес

var d = new Document(channel.url, channel.encoding);



// В отдельную переменную получаем те данные, которые нам нужны

var body = d.getElementsByXPath(mainXpath)[0];



// Создаем элемент RSS-ленты, и кладем в него полученные данные

var a = new Article();

a.body = body.outerHTML;

a.url = a.id = channel.url + '#'+ DateTime.Now.Date;


// Созданный элемент ленты кладем, собственно, в ленту

channel.articles.push(a);

}catch(e){

errorMessages.Add(e);

}

]]></ChannelTemplate><ArticleTemplate><![CDATA[]]></ArticleTemplate><IsRSSBased>False</IsRSSBased></Template>
> rbc-ru HALTED
Это поправил, подождем обновления.
> liverpoolfc.tv
Попробуйте вот такой шаблон:

Url: http://www.liverpoolfc.tv/mediawatch/a_index.shtml
Encoding: utf-8
IsRSSBased: False
ChannelTemplate:
try{
	var d = new Document(channel.url, channel.encoding);
	var links = d.getElementsByAttr('p', 'class', 'body');	

	for (var i=0; i< links.length; i++){
		var el = links[i];
		var a = new Article();

       	a.id = el.childNodes[1].getAttribute('href');
		a.url = 'http://www.liverpoolfc.tv' + a.id;
		a.header = el.childNodes[1].innerText;
		a.date = DateTime.Now.Date;

		channel.articles.push(a);
	}
}catch(e){
	errorMessages.Add(e);
}
ArticleTemplate:
try{
	var d = new Document(article.url, channel.encoding);
	var h1 = d.getElementsByAttr('h1', 'class', 'head synopsis')[0];

	var cel = h1.nextSibling;
	article.body = '';
	while (cel!=null && cel.innerText.indexOf('OTHER HEADLINES')  < 0){
		article.body += cel.outerHTML;
		cel = cel.nextSibling;
	}
}catch(e){
	errorMessages.Add(e);
}

Всё здорово, это шаблон заработал, на нём сделал три ленты
http://rss-farm.ru/my/channels/lfc-media
http://rss-farm.ru/my/channels/lfc-hn
http://rss-farm.ru/my/channels/lfc-n
то что мне нужно.

единственное НО, перед заголовком вылезает
<!-- START HEADLINE1 --> <!-- END HEADLINE1 -->
что нибудь можно сделать?
Ещё, ссылки внутри новости ссылаются на rss-farm.ru, типа
http://feeds.rss-farm.ru/team/squad/aurelio/a_index.shtml
а хотелось бы, что бы
http://www.liverpoolfc.tv/team/squad/aurelio/a_index.shtml
В заголовках правильные ссылки.
и с рисунками в теле новости та же беда, ссылка не фото
http://feeds.rss-farm.ru/images5/bolton33.jpg
а должна быть
http://www.liverpoolfc.tv/images5/bolton33.jpg
Ссылки можно исправить так:
article.body = article.body.replace(/href="/g, 'href="http://www.liverpoolfc.tv/')

Эту строку нужно пометить в конце ArticleTemplate перед
...
       }
}catch(e)....

Картинки и заголовки - аналогично.
в этом случае ссылки начинают выглядеть так
http://www.liverpoolfc.tvhttp//www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tv/team/squad/aurelio/a_index.shtml
В этой строке убрал " и /
article.body = article.body.replace(/href="/g, 'href="http://www.liverpoolfc.tv/')
получилось
article.body = article.body.replace(/href="/g, 'href=http://www.liverpoolfc.tv')
но теперь ссылка выглядит
http://www.liverpoolfc.tv/team/squad/johnson/a_index.shtml%22
то есть добавляется
%22
и не открывается
То есть если оставляю " то ссылка получается
http://www.liverpoolfc.tvhttp//www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tvhttp://www.liverpoolfc.tv/team/squad/johnson/a_index.shtml
а если убираю " то к ссылке добавляется %22 и все равно она не работает
http://www.liverpoolfc.tv/team/squad/johnson/a_index.shtml%22
...упёрся
> http://www.liverpoolfc.tvhttp//www.liverpoolfc.tvhttp://...
:)
Нужно вынести строчку из цикла while, я скопировал лишнюю скобку :)
                cel = cel.nextSibling;
        }
        article.body = article.body.replace(/href="/g, 'href=http://www.liverpoolfc.tv')
}catch(e){
И кавычку оставить.
Так и есть скобку перенёс выше и все ОК
Вот как окончательно выглядит ArticleTemplate:
try{
var d = new Document(article.url, channel.encoding);
var h1 = d.getElementsByAttr('h1', 'class', 'head synopsis')[0];
var cel = h1.nextSibling;
article.body = '';
while (cel!=null && cel.innerText.indexOf('OTHER HEADLINES') < 0){
article.body += cel.outerHTML;
cel = cel.nextSibling;
}
article.body = article.body.replace(/href="/g, 'href="http://www.liverpoolfc.tv')
}catch(e){
errorMessages.Add(e);
}
Теперь хотел бы вернуться:
перед заголовком вылезает
<!-- START HEADLINE1 --> <!-- END HEADLINE1 -->
что нибудь можно сделать?

http://feeds.rss-farm.ru/lfc-su/lfc-media
ChannelTemplate:
...
a.header = el.childNodes[1].innerText;
a.header = a.header.replace('<!-- START HEADLINE2 -->','');
a.header = a.header.replace('<!-- END HEADLINE2 -->','');
a.date = DateTime.Now.Date;
...
Тут засада в том, что первая новость обозначается
<!-- START HEADLINE1 -->
<!-- END HEADLINE1 -->
вторая новость
<!-- START HEADLINE2 -->
<!-- END HEADLINE2 -->
третья
<!-- START HEADLINE3 -->
<!-- END HEADLINE3 -->
вообще закомментированные фразы
<!-- хххххх -->
не видны в ХТМЛках, возможно ли и здесь их спрятать?
Да, просмотрел. Но нет ничего невозможного! :)
a.header = a.header.substring(a.header.lastIndexOf('-->')+3, a.header.length);
Нужно вставить на место предыдущего решения.
не получается удалить каналы на которых экспериментировал:
lfc-media: Liverpool tv
lfc-hn: Liverpool tv
lfc-n: Liverpool tv
Выбрасывает на ошибку
500
500
Хм.. надо разобраться, спасибо за сообщение об ошибке :)
Еще вопрос, это ошибка или так должно быть?
Время какого часового пояса установлено на этом сайте?
У меня сейчас 10:21 утра по Москве.
А вот время создания этого сообщения присваиваемое движком этого сайта
====>>
ошибся, прошу прощения.
> не получается удалить каналы на которых экспериментировал <br/>
Попробуйте теперь, я исправил ошибку.
Были найдены ошибки и я вернул все обратно. Проблема с удалением каналов все еще решается.
lfc-su, попробуйте теперь удалить ненужные каналы.
OK. Три лишних канала удалил.