Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Python vai Ruby Internet-ohjelmoinnissa

Sivun loppuun

Burton [30.09.2007 00:40:39]

#

Minulla on suunnitteilla pieni ohjelma, joka noutaa tiedostoja Internetistä, ja haluaisin toteuttaa tämän jollain skriptikielellä, missä on helppokäyttöiset funktiot nettitoimintoja varten. Olen kuullut Pythonista ja Rubystä aikaisemmin, joten kumpaa te kokeneemmat skriptailijat suosittelisitte?

Tarkoitus on siis tällainen:
Käyttäjä kirjoittaa URL:n vaikka kuvaan. Esimerkkinä OP:n logo (https://www.ohjelmointiputka.net/img/putka.jpg). Ohjelma hakee OP:n logon ja tallentaa sen johonkin. Onnistuuko?

Muitakin kieliä saa toki ehdottaa.

Burton [30.09.2007 10:24:37]

#

Jos tiedostoa ei ole mahdollista ladata koneelle, olisi kiva edes, jos saisi tutkittua sen sisällön kuin PHP:n file_get_contents-funktiolla.

Legu [30.09.2007 10:36:30]

#

Mikset käytä wgetiä?

Antti Laaksonen [30.09.2007 10:36:34]

#

Pythonilla tiedoston haku sujuu ainakin melko helposti:

import urllib

osoite = "https://www.ohjelmointiputka.net/img/putka.jpg"
tiedosto = "netista.jpg"

urllib.URLopener().retrieve(osoite, tiedosto)

Burton [30.09.2007 10:50:16]

#

Käyttäisin wgetiä, mutta ohjelman tärkeänä osana olisi tiedoston olemassaolon tiedostaminen.

Antti:
Jos tiedostoa ei ole olemassa, näyttääkö tuo funktio sen jotenkin?

Antti Laaksonen [30.09.2007 10:59:05]

#

Näin voi tutkia, onnistuiko tiedoston haku:

try:
    urllib.URLopener().retrieve(osoite, tiedosto)
    print 'Tiedosto haettu!'
except StandardError:
    print 'Pieleen meni!'

Legu [30.09.2007 11:01:43]

#

Wgetin palautusarvosta näkee myös onnistuiko tiedoston lataus:

legu@Masiina:~$ wget https://www.ohjelmointiputka.net -O putka.html -q
legu@Masiina:~$ echo $?
0
legu@Masiina:~$ wget https://www.ohjelmointiputka.net/eiole -O putka.html -q
legu@Masiina:~$ echo $?
1

Burton [30.09.2007 11:03:39]

#

Ah, kiitos kummallekin!

tsuriga [02.10.2007 10:59:21]

#

Jonkimmoinen Ruby-esimerkki (itelläkin tässä manuaaleja n-kappaletta auki taustalla, voip olla hyvinkin elegantimpia tapoja olemassa):

require 'net/http'
require 'uri'

osoite = "https://www.ohjelmointiputka.net/img/putka.jpg"

response = Net::HTTP.get_response(URI.parse(osoite))

if response.code == "200" then
    begin
        fh = File.open(File.basename(osoite), "wb")
        fh.write(response.entity)
    rescue
        puts "Tiedoston kopioiminen epäonnistui"
    else
        puts "Tiedosto kopioitiin onnistuneesti"
    ensure
        fh.close unless fh.nil?
    end
else
    puts "Tiedostoa ei löydy serveriltä"
end

Lyhyemmin:

require 'net/http'
require 'uri'

osoite = "https://www.ohjelmointiputka.net/img/putka.jpg"

puts File.open(File.basename(osoite), "wb") { |fh| fh.write(Net::HTTP.get(URI.parse(osoite))) } ? "Onnistui" : "Epäonnistui"

Nyt en tiedä, että testaavatko python ja wget versiot molemmat tiedoston löytymistä serveriltä ja tiedoston kirjoituksen onnistumista - hyvä niille jos kyllä :3.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta