Я использую следующий ruby-скрипт из этот лихой виджет, который извлекает RSS-канал, анализирует его и отправляет который проанализировал заголовок и описание виджета.
require 'net/http'
require 'uri'
require 'nokogiri'
require 'htmlentities'
news_feeds = {
"seattle-times" => "http://seattletimes.com/rss/home.xml",
}
Decoder = HTMLEntities.new
class News
def initialize(widget_id, feed)
@widget_id = widget_id
# pick apart feed into domain and path
uri = URI.parse(feed)
@path = uri.path
@http = Net::HTTP.new(uri.host)
end
def widget_id()
@widget_id
end
def latest_headlines()
response = @http.request(Net::HTTP::Get.new(@path))
doc = Nokogiri::XML(response.body)
news_headlines = [];
doc.xpath('//channel/item').each do |news_item|
title = clean_html( news_item.xpath('title').text )
summary = clean_html( news_item.xpath('description').text )
news_headlines.push({ title: title, description: summary })
end
news_headlines
end
def clean_html( html )
html = html.gsub(/<\/?[^>]*>/, "")
html = Decoder.decode( html )
return html
end
end
@News = []
news_feeds.each do |widget_id, feed|
begin
@News.push(News.new(widget_id, feed))
rescue Exception => e
puts e.to_s
end
end
SCHEDULER.every '60m', :first_in => 0 do |job|
@News.each do |news|
headlines = news.latest_headlines()
send_event(news.widget_id, { :headlines => headlines })
end
end
Пример rss-канала работает правильно, потому что URL-адрес предназначен для файла xml. Однако я хочу использовать это для другого RSS-канала, который не предоставляет фактический XML-файл. Этот rss-канал, который мне нужен, находится по адресу http://www.ttc.ca/RSS/Service_Alerts/index.rss Кажется, это ничего не отображает в виджете. Вместо использования "http://www.ttc.ca/RSS/Service_Alerts/index.rss", я также попробовал "http://www.ttc.ca/RSS/Service_Alerts/index.rss?format=xml" и "view-source:http://www.ttc.ca/RSS/Service_Alerts/index.rss", но безуспешно. Кто-нибудь знает, как я могу получить фактические данные xml, связанные с этим rss-каналом, чтобы я мог использовать их с этим рубиновым скриптом?