Сижу в и-нете с КПК, поэтому возможности ограничены...
Есть такой научно-популярный журнал "Популярная механика", у них есть RSS-канал: http://www.popmech.ru/rss/
Хочется сделать полнотекстовую версию. Ссылки на статьи имеют вид: http://www.popmech.ru/article/5724-kak-ustroen-ohotnik/
Есть ещё версия для печати, отличается лишь наличием слова "print" между адресом сайта и продолжением:
http://www.popmech.ru/print/article/5724-kak-ustroen-ohotnik/ - это вообще то что доктор прописал!
Кто-нибудь, сделайте пожалуйста доброе дело - создайте полнотекстовый канал для этого журнала!
Vovansky, а тут уже все есть :)
http://feeds.rss-farm.ru/DeepDreamer/PopMech
спасибо, а я почему-то не нашёл этот канал в каталоге
Vovansky, он мог не быть в каталоге, нужно было посмотреть тут: http://rss-farm.ru/channels/
<?xml version="1.0" encoding="utf-8"?>
<Template type="ScriptUpdater">
<Url>http://www.echo.msk.ru/programs/personalno/rss-fulltext.xml</Url>
<Title>Зхо Москвы</Title>
<Description>Особое мнение с Шендеровичем</Description>
<Encoding>utf-8</Encoding>
<UserAgent></UserAgent>
<ChannelTemplate><![CDATA[var d = new Document(article.url, channel.encoding);
var el = d.getElementsByAttr("text", "class" , "content")[8];
article.body = el.innerHTML;
]]></ChannelTemplate>
<ArticleTemplate><![CDATA[]]></ArticleTemplate>
<IsRSSBased>True</IsRSSBased>
</Template>
Ну никак Шендеровича показывать не хочет! Что ни так?
var mainXpath = '/rss[1]/channel[1]/item[8]';
var d = new Document(channel.url, channel.encoding);
var el = d.getElementsByXPath(mainXpath)[0];
article.body = el.innerHTML;
Так тоже пробовал, результата - нет
На вкладке Parser нужно указывать другие адреса, в вашем случае например эти:
http://echo.msk.ru/programs/personalno/623035-echo/
http://echo.msk.ru/programs/personalno/623305-echo/
http://echo.msk.ru/programs/personalno/623982-echo/
...
Особое мнение с Шендеровичем
<?xml version="1.0" encoding="utf-8"?>
<Template type="ScriptUpdater">
<Url>http://www.echo.msk.ru/programs/personalno/rss-fulltext.xml</Url>
<Title>Эхо Москвы</Title>
<Description>Особое мнение с Шендеровичем</Description>
<Encoding>utf-8</Encoding>
<UserAgent></UserAgent>
<ChannelTemplate><![CDATA[
]]></ChannelTemplate>
<ArticleTemplate><![CDATA[try{
article.body = '';
var d = new Document(article.url, channel.encoding);
var el = d.getElementsByAttr("span", "class" , "_ga1_on_")[0];
article.body = el.innerHTML;
}catch(ex){
errorMessages.Add(ex + article.url);
}]]></ArticleTemplate>
<IsRSSBased>True</IsRSSBased>
</Template>
Спасибо огромное за ответ!
Т.е. в Parser я должен указать url на конкретный html, а в template на xlm rrs?
А так можно: var el = d.getElementsByAttr("div", "class" , "padding")[0];
> Т.е. в Parser я должен указать url на конкретный html, а в template на xlm rrs?
Да, в Parser адрес конкретной новости или статьи, template - ссылка на RSS-ленту.
> А так можно: var el = d.getElementsByAttr("div", "class" , "padding")[0];
Да, можно попробовать.
Как создать канал с использованием различных классов? Например RSS-канал http://www.rg.ru/xml/index.xml (полный текст http://www.rg.ru/2009/10/06/evsyukov.html) имеет элемент «table» с атрибутом «class» равным «HeaderArticle», а элемент «div» с атрибутом «class» равным «BodyArticleText», как создать канал с двумя этими элементами?
> Как создать канал с использованием различных классов?
Смотря что именно нужно сделать. Для http://www.rg.ru/xml/index.xml полный текст можно вытащить так:
var d = new Document(article.url, channel.encoding);
var el = d.getElementsByAttr("div", "class", "bodyArticleText")[0];
article.body = el.innerHTML;
Зачем нужен элемент «table» с атрибутом «class» равным «HeaderArticle»?
в bodyArticleText только текст статьи. Нужны же еще заголовки. Или я что-то не понимаю?
Попробуйте вот что:
1. Запустите ДевТулз (тут написано как http://rss-farm.ru/docs.dev.quickstart/)
2. В Url введите http://www.rg.ru/xml/index.xml , в Encoding - windows-1251
3. В Article template введите
var d = new Document(article.url, channel.encoding);
var el = d.getElementsByAttr("div", "class", "bodyArticleText")[0];
article.body = el.innerHTML;
Затем нажмите кнопку Update и посмотрите что произойдет. Это то, что нужно?
Спасибо за ответ, но я это уже пробовал. Тексты статей там получаются не полные.
Вообще тяжело конечно не имея полноценных средств отладки что-то сделать самостоятельно.
Уважаемый diggi можно ли сделать более подробное SDK, если он уже есть, то можно ли ссылку на него (этот я уже видел http://rss-farm.ru/docs.dev.objects/). И хотелось бы увидеть побольше примеров, желательно - сложных, связанных с компоновкой.
mata497, пожалуйста, опишите конкретнее что не получается и не ясно. Я постараюсь помочь :)
Не получается создать канал для http://www.rg.ru
Шаблон:
<?xml version="1.0" encoding="utf-8"?>
<Template type="ScriptUpdater">
<Url>http://www.rg.ru/xml/index.xml</Url>
<Title>Российская Газета</Title>
<Description></Description>
<Encoding>windows-1251</Encoding>
<UserAgent></UserAgent>
<ChannelTemplate><![CDATA[]]></ChannelTemplate>
<ArticleTemplate><![CDATA[try{
var d = new Document(article.url, channel.encoding);
var el = d.getElementsByAttr("div", "class", "bodyArticleText")[0];
article.body = el.innerHTML;
}catch(ex){
errorMessages.Add(ex + article.url);
}
]]></ArticleTemplate>
<IsRSSBased>True</IsRSSBased>
</Template>
Новости получаются полные - вот
картинка из девтулз. Или там чего-то не хватает?
Часть новостей имеет не полный формат
Приведите примеры со ссылками, я не нашел сразу.