Feed építés HTML-ből [update]
2008-02-03 16:32 | kommentek
Longhand Domain szemle bejegyzését olvasva merült fel bennem a gondolat, hogy milyen jó lenne a várólistán levő domaineket egy RSS feedben követni. Léteznek olyan online eszközök, amelyekkel ezt könnyen meg lehet oldani, én többek között a feed43-val próbálkoztam. Sajnos nem hozta azt, amit vártam tőle, ezért úgy döntöttem, hogy egy kis Ruby szkripttel oldom meg a feladatot.
Amúgy az egészről longhand már írt, én a továbbiakban pár szóban leírom, hogy milyen eszközökkel készült a dolog.
Update
Két dolog történt. Átvittem a feedeket FeedBurner-re, és a lejáró domainekhez hozzáadtam egy PageRank sort is. Mivel a lejáró domainek általában olyanok, amik már senkit sem érdekelnek, ezért ez legtöbb esetben nem elérhető érték, vagy 0, de előfordul egy-két normális PageRankkel rendelkező domain is.
Technikai részletek
A html forrás feldolgozásához egy már korábbi bejegyzésben bemutatott hpricot gemet használtam fel. Ezzel gyerekjáték kiszedni a legkuszább html oldalból is az általunk érdekesnek ítélt részeket.
doc = Hpricot(open('http://www.domain.hu/domain/varolista/ido.html'))
conv = Iconv.new('utf-8', 'iso-8859-2')
items = []
doc.at("table[@border=1]").search("tr") do |tr|
num, domain, claimant, date = (tr / "td").map {|t| conv.iconv(t.to_plain_text)}
more = (tr % "td a" or {})['href']
if num =~ /^\d+$/ and more
items << {
:domain => domain,
:claimant => claimant,
:date => Chronic.parse(date),
:more => URI.encode('http://www.domain.hu/domain/varolista/'+more)}
end
break if items.size >= 300
end
A szükséges adatok összegyűjtése után az RSS formába öntés még ennél is egyszerűbb feladat volt. Ehhez az rss/maker Standard Ruby Library volt segítségemre.
content = RSS::Maker.make('2.0') do |m|
m.channel.title = ".hu domain regisztrációs várólista"
m.channel.link = "http://www.domain.hu/domain/varolista/ido.html"
m.channel.description = "kéthetes .hu domain regisztrációs várólista legfrisebb elemei"
m.items.do_sort = true
items.each do |item|
i = m.items.new_item
i.title = item[:domain]
i.link = item[:more]
i.date = item[:date]
i.description = item[:claimant]
end
end



