teemue kirjoitti:Mietin, että kuinkahan nuo jälkimmäisen tekstit saisi suomeksi? Siis toisinsanoen jotain string replace komentoa haetaan.
E: Selvennetään sen verran, että suomeksi tarkoitus olisi saada siis tuon koodipätkän tulostama teksti. Esim. "Freezing Rain" "Mostly Cloydy" yms.
sed:in 's'-käsky tulee nimenomaan sanasta 'substitute', mutta IMHO se on ehkä hieman väärä työkalu tähän käyttöön (siis tiedonhakuun, ei kääntämiseen) koska html-parserilla homma on huomattavasti helpompaa ja varmempaa.
Eli jos kääntää haluaa niin muotohan on ihan perus 's/haettava sana tai lause/sana tai lause jolla korvataan/', ja 'g' lopussa tarkoittaa 'globaaliutta', joka sed:issä tarkoittaa koko riviä.
Ongelmana on, että GeekTool ei ymmärrä UTF-8:aa, eli ääkkösten mukaan saaminen ei ehkäpä ole vaivan arvoista.
Mutta vielä hetkeksi tuohon html-parseriin; tuo yahoon sivuhan on xml:ää, ja vaikkei rubyn hpricot olekaan varsinaisesti xml-parseri niin silti se helpottaa apu-objektien luonnissa todella paljon. Esim.
Koodi: Valitse kaikki
ruby -e '%w(rubygems hpricot open-uri).each {|l| require l};
uri = "http://xml.weather.yahoo.com/forecastrss?p=FIXX0020&u=c";
doc = Hpricot(open(uri)); # <- koko dokumentti omaksi objektikseen
cond = (doc/"yweather:condition").first; # säätieto-"tagi" omaksi objektikseen
# tämän jälkeen yo. objektilta voidaan kysellä mm. sen attribuutteja:
puts "#{cond["temp"]}°C, #{cond["text"]}"'
Joka siis tulostaa lämpötilan ja tekstin. Tottakai mikä tahansa perl/python/oma suosikki kielesi html- tai xml-parseri ajaa saman asian.
Elikkä jos haluaisi vaikkapa yhdistää nuo kuvanhaun ja tekstin haun, ja silti käyttää curlia koska curl on niin pirun siisti ohjelma, niin:
Koodi: Valitse kaikki
ruby -e '%w(rubygems hpricot open-uri).each {|l| require l};
imguri, txturi = "http://weather.yahoo.com/finland/southern-finland/vantaa-574633/", "http://xml.weather.yahoo.com/forecastrss?p=FIXX0020&u=c";
imgdoc, txtdoc = Hpricot(open(imguri)), Hpricot(open(txturi));
imgurl = (imgdoc/".forecast-icon").first["style"].scan(/http.+?\.png/).first;
`curl -s -o "#{ENV["HOME"]}/yweather.png" "#{imgurl}"`;
cond = (txtdoc/"yweather:condition").first;
puts "#{cond["temp"]}°C, #{cond["text"]}"'
Jotenkin luettavampaa ja helpommin ymmärrettävämpää mielestäni kuin regexpien dekryptaus. (kuva sijaitsee kotihakemistossa tässä tapauksessa, ei /tmp:ssä, ja on nimeltään yweather.png)
MUOKS: ja tuota kuvaa (ja tekstiäkään) ei ehkä ole järkevää hakea joka 300:s sekuntti, vaan ehkäpä joka tunti, pari, kolme (3600, 3600*2, 3600*3)