Thread View: pl.comp.lang.python
18 messages
18 total messages
Started by Marcin Wojtczuk
Sat, 07 Dec 2002 00:09
połączenia http - ściąganie plików
Author: Marcin Wojtczuk
Date: Sat, 07 Dec 2002 00:09
Date: Sat, 07 Dec 2002 00:09
24 lines
1906 bytes
1906 bytes
Witajcie!
Mam na ukończeniu skrypt, do ściągania komiksów z garfieldem. Umie
ściągać dzisiejszy komiks, ale też cały miesiąc a nawet rok. Chciałbym
to zrobić ładnie tzn. inaczej niż os.system('wget....), bo:
1. Nie każdy ma wget
2. Chciałem to przenieść na windows
3. wget za każdym razem się łączy i rozłącza
Głównie chodzi o pkt. 3 - ściągnięcie 30 obrazków w jednym połączeniu
może być dużo szybsze niż 30 kolejnych połączeń wgetem.
Jakie rozwiązanie proponujecie ? (Błagam, niech to nie będą obiekty). W
ostateczności mogę na socketach operować, ale może jest jakieś httpget() ?
Problemem może być timeout - trzeba to wysoko ustawić. Drugi problem to
sygnalizowanie zerwanego połączenia - nie może być tak, że plik się
ściągnął do połowy.
Interesuje mnie też jak najefektywniej zapisać do pliku dużą ilość
danych (6-40kB).
TIA
--
[ http://www.stringi.com/viper/ ] [ GG 1513591 ]
All good things come to those who wait
Re: połączenia http - ściąganie plików
Author: Adam Przybyla
Date: Sat, 07 Dec 2002 06:45
Date: Sat, 07 Dec 2002 06:45
24 lines
2035 bytes
2035 bytes
Marcin Wojtczuk <fastviper@telkab.pl> wrote:
> Witajcie!
> Mam na ukończeniu skrypt, do ściągania komiksów z garfieldem. Umie
> ściągać dzisiejszy komiks, ale też cały miesiąc a nawet rok. Chciałbym
> to zrobić ładnie tzn. inaczej niż os.system('wget....), bo:
> 1. Nie każdy ma wget
> 2. Chciałem to przenieść na windows
> 3. wget za każdym razem się łączy i rozłącza
> Głównie chodzi o pkt. 3 - ściągnięcie 30 obrazków w jednym połączeniu
> może być dużo szybsze niż 30 kolejnych połączeń wgetem.
> Jakie rozwiązanie proponujecie ? (Błagam, niech to nie będą obiekty). W
> ostateczności mogę na socketach operować, ale może jest jakieś httpget() ?
> Problemem może być timeout - trzeba to wysoko ustawić. Drugi problem to
> sygnalizowanie zerwanego połączenia - nie może być tak, że plik się
> ściągnął do połowy.
> Interesuje mnie też jak najefektywniej zapisać do pliku dużą ilość
> danych (6-40kB).
... patrz tu:
http://www.python.org/doc/current/lib/node309.html
Z powazaniem
Adam Przybyla
Re: połączenia http - ściąganie plików
Author: Wojtek Walczak
Date: Sat, 07 Dec 2002 09:03
Date: Sat, 07 Dec 2002 09:03
12 lines
1454 bytes
1454 bytes
Dnia Sat, 7 Dec 2002 01:09:07 +0100, Marcin Wojtczuk napisał(a):
> Witajcie!
> Mam na ukończeniu skrypt, do ściągania komiksów z garfieldem. Umie
> ściągać dzisiejszy komiks, ale też cały miesiąc a nawet rok. Chciałbym
> to zrobić ładnie tzn. inaczej niż os.system('wget....), bo:
> 1. Nie każdy ma wget
Od takich rzeczy to python ma moduly ;>
Popatrz na httplib, powinien pomoc.
--
[ ] gminick (at) underground.org.pl http://gminick.linuxsecurity.pl/ [ ]
[ "Po prostu lubie poranna samotnosc, bo wtedy kawa smakuje najlepiej." ]
Re: połączenia http - ściąganie plików
Author: Jarek Zgoda
Date: Sat, 07 Dec 2002 11:10
Date: Sat, 07 Dec 2002 11:10
21 lines
1770 bytes
1770 bytes
Dnia Sat, 7 Dec 2002 09:03:51 +0000 (UTC)
Wojtek Walczak <gminick@hacker.pl> pisze:
> > Mam na ukończeniu skrypt, do ściągania komiksów z garfieldem. Umie
> > ściągać dzisiejszy komiks, ale też cały miesiąc a nawet rok.
> > Chciałbym to zrobić ładnie tzn. inaczej niż os.system('wget....),
> > bo: 1. Nie każdy ma wget
> Od takich rzeczy to python ma moduly ;>
> Popatrz na httplib, powinien pomoc.
Marcin chciał strukturalnie, a nie obiektowo. W używając httplib trzeba
stworzyć obiekt połączenia i na nim wykonywać operacje, a urlopen zwraca
obiekt plikopodobny, gotowy do odczytywania przez read().
Ale zgadzam się z Tobą - HTTPConnection jest wygodniejsze.
--
~$ rm -f /bin/Laden
I po kłopocie!
--
Serwis Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: połączenia http - ściąganie plików
Author: Adam Karpierz
Date: Sat, 07 Dec 2002 19:40
Date: Sat, 07 Dec 2002 19:40
60 lines
2895 bytes
2895 bytes
Użytkownik "Marcin Wojtczuk" <fastviper@telkab.pl> napisał:
> Jakie rozwiązanie proponujecie ? (Błagam, niech to nie będą obiekty).
Jelsli _na sile_ nie chcesz obiektow to zastanow sie jednak nad zmiana
jezyka.
REXX moze byc tu nie najgorszy.
W Pythonie od obiektow nei uciekniesz, a bez nich pisanie w tym jezyku
to wlasciwie masochizm niestety.
> W ostateczności mogę na socketach operować, ale może jest jakieś httpget()
?
> Problemem może być timeout - trzeba to wysoko ustawić. Drugi problem to
> sygnalizowanie zerwanego połączenia - nie może być tak, że plik się
> ściągnął do połowy.
>
> Interesuje mnie też jak najefektywniej zapisać do pliku dużą ilość
> danych (6-40kB).
Powinno Ci troche pomoc, a zerwanie polaczenia czy inne bledy
sobie obsluzysz przechwutujac odpowiednie wyjatki:
def wget(url, dstDir=None):
if dstDir is None: dstDir = ''
pth = urlparse.urlparse(url)[2]
arch = pth[pth.rfind('/') + 1:]
outfile = join(dstDir, arch)
ident = 5
format = '%' + str(ident) + 'dkB'
clear = (ident + 2 + 1) * '\b' + (ident + 2 + 1) * ' ' + (ident + 2 +
1) * '\b'
msg = 'Downloading the "%s"...' % arch
print msg.ljust(67),
istream = urllib.urlopen(url)
try:
ostream = open(outfile, 'wb')
try:
cnt = 0
print format % cnt,
while 1:
buff = istream.read(1024)
if not buff:
break
ostream.write(buff)
cnt += 1
print clear + format % cnt,
except:
ostream.close()
if os.path.isfile(outfile):
os.remove(outfile)
print clear, 'Error!'
raise
ostream.close()
print clear, 'Done'
finally:
istream.close()
--
Adam Karpierz
Re: połączenia http - ściąganie plików
Author: Marcin Wojtczuk
Date: Sat, 07 Dec 2002 23:49
Date: Sat, 07 Dec 2002 23:49
28 lines
1846 bytes
1846 bytes
Adam Karpierz claimed:
> Użytkownik "Marcin Wojtczuk" <fastviper@telkab.pl> napisał:
>> Jakie rozwiązanie proponujecie ? (Błagam, niech to nie będą obiekty).
> Jelsli _na sile_ nie chcesz obiektow to zastanow sie jednak nad zmiana
> jezyka.
Już prędzej zmienię podejście ;)
> REXX moze byc tu nie najgorszy.
> W Pythonie od obiektow nei uciekniesz, a bez nich pisanie w tym jezyku
> to wlasciwie masochizm niestety.
Ok, to od czego zacząć naukę programowania obiektowego w pythonie ?
> Powinno Ci troche pomoc, a zerwanie polaczenia czy inne bledy
> sobie obsluzysz przechwutujac odpowiednie wyjatki:
>
> def wget(url, dstDir=None):
Dziękuję. Zwłaszcza za urllib - httplib ma jakieś braki (nie zawsze rozumie
.getfile())
BTW: W tym co napisałeś były obiekty czy nie ? :>
--
[ http://www.stringi.com/viper/ ]
[ JID: FastViper@jabber.gda.pl ]
All good things come to those who wait
Re: połączenia http - ściąganie plików
Author: Wojtek Walczak
Date: Sun, 08 Dec 2002 07:58
Date: Sun, 08 Dec 2002 07:58
12 lines
1547 bytes
1547 bytes
Dnia Sun, 8 Dec 2002 00:49:54 +0100, Marcin Wojtczuk napisał(a): >> REXX moze byc tu nie najgorszy. >> W Pythonie od obiektow nei uciekniesz, a bez nich pisanie w tym jezyku >> to wlasciwie masochizm niestety. > Ok, to od czego zacząć naukę programowania obiektowego w pythonie ? Ja proponuje rozpoczac od ogolnej filozofii obiektow. Zobacz sobie na <http://gminick.linuxsecurity.pl/notmine.htm#programming>, gdzies tam jest 'zakladka' dotyczaca OO. -- [ ] gminick (at) underground.org.pl http://gminick.linuxsecurity.pl/ [ ] [ "Po prostu lubie poranna samotnosc, bo wtedy kawa smakuje najlepiej." ]
Re: połączenia http - ściąganie plików
Author: Lucifer
Date: Sun, 08 Dec 2002 13:15
Date: Sun, 08 Dec 2002 13:15
13 lines
1385 bytes
1385 bytes
Marcin Wojtczuk wrote: > Ok, to od czego zacząć naukę programowania obiektowego w pythonie ? Od przesledzenia manuala, pobawienia sie z wlasnymi obiektami, pobawienia sie z obiektami ze standardowej bibioteki. > BTW: W tym co napisałeś były obiekty czy nie ? :> Byly. -- Lucifer
Re: połączenia http - ściąganie plików
Author: Marcin Wojtczuk
Date: Sun, 08 Dec 2002 18:28
Date: Sun, 08 Dec 2002 18:28
55 lines
2424 bytes
2424 bytes
Lucifer claimed:
> Marcin Wojtczuk wrote:
>> Ok, to od czego zacząć naukę programowania obiektowego w pythonie ?
> Od przesledzenia manuala, pobawienia sie z wlasnymi obiektami,
> pobawienia sie z obiektami ze standardowej bibioteki.
O dobry pomysł :)
#v+
class sex:
"simple class to decide whether name is M or F name"
female = ('a', 'e')
F = 1
M = 0
Fv, Mv = 'female', 'male'
def decide(self, name, verbose=0):
if (name[-1]).lower() in self.female:
if verbose: return self.Fv
else: return self.F
else:
if verbose: return self.Mv
else: return self.M
d = sex()
import sys
print d.decide(sys.argv[1], 'be verbose')
#v-
Ładne toto :)
>> BTW: W tym co napisałeś były obiekty czy nie ? :>
> Byly.
Czekajcie, przecież w pythonie wywołanie np:
#v+
s = '2'
print s.zfill(4)
#v-
To już posługiwanie się obiektami :) To ja się tego nie boję :> Wogóle fajne
te obiekty: można zdefiniować sobie:
TRUE = 1
FALSE = 0
I posługiwać się tymi zmiennymi wewnątrz klasy zamiast pamiętać kiedy if czy
while myślą, że coś jest prawdą. Super :)
W tym co widziałem o klasach, niepodoba mi się to, że za każdym wywołaniem
zmiennej czy funkcji trzeba pisać self.xxx. Denerwuje mnie to! Ma to jakiś
głębszy sens ?
--
[ http://www.stringi.com/viper/ ]
[ JID: FastViper@jabber.gda.pl ]
All good things come to those who wait
Re: połączenia http - ściąganie plików
Author: Marcin 'Qrczak' Kowalczyk
Date: Sun, 08 Dec 2002 22:58
Date: Sun, 08 Dec 2002 22:58
16 lines
1820 bytes
1820 bytes
Sun, 8 Dec 2002 19:28:15 +0100, Marcin Wojtczuk <fastviper@telkab.pl> pisze:
> W tym co widziałem o klasach, niepodoba mi się to, że za każdym wywołaniem
> zmiennej czy funkcji trzeba pisać self.xxx. Denerwuje mnie to! Ma to jakiś
> głębszy sens ?
Jednym z mott Pythona jest "explicit is better than implicit". Skąd
byłoby wiadomo, czy chodzi o globalną funkcję czy metodę bieżącej
klasy? To, które z nich będzie zdefiniowane (czy może oba), będzie
znane dopiero w czasie wykonania, a uzależnianie widoczności
identyfikatorów od przebiegu programu to kiepski pomysł.
--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
Re: połączenia http - ściąganie plików
Author: Marcin Wojtczuk
Date: Mon, 09 Dec 2002 00:20
Date: Mon, 09 Dec 2002 00:20
21 lines
1914 bytes
1914 bytes
Marcin 'Qrczak' Kowalczyk claimed:
> Sun, 8 Dec 2002 19:28:15 +0100, Marcin Wojtczuk <fastviper@telkab.pl> pisze:
>
>> W tym co widziałem o klasach, niepodoba mi się to, że za każdym wywołaniem
>> zmiennej czy funkcji trzeba pisać self.xxx. Denerwuje mnie to! Ma to jakiś
>> głębszy sens ?
>
> Jednym z mott Pythona jest "explicit is better than implicit". Skąd
> byłoby wiadomo, czy chodzi o globalną funkcję czy metodę bieżącej
> klasy? To, które z nich będzie zdefiniowane (czy może oba), będzie
> znane dopiero w czasie wykonania, a uzależnianie widoczności
> identyfikatorów od przebiegu programu to kiepski pomysł.
W takim razie podtrzymuję tezę:
"Python do szkół, pascal jest 'obsolete'" ;-)
--
[ http://www.stringi.com/viper/ ]
[ JID: FastViper@jabber.gda.pl ]
All good things come to those who wait
Re: połączenia http - ściąganie plików
Author: Lucifer
Date: Mon, 09 Dec 2002 14:57
Date: Mon, 09 Dec 2002 14:57
20 lines
1985 bytes
1985 bytes
Marcin 'Qrczak' Kowalczyk wrote: > Sun, 8 Dec 2002 19:28:15 +0100, Marcin Wojtczuk <fastviper@telkab.pl> pisze: > > >>W tym co widziałem o klasach, niepodoba mi się to, że za każdym wywołaniem >>zmiennej czy funkcji trzeba pisać self.xxx. Denerwuje mnie to! Ma to jakiś >>głębszy sens ? > > > Jednym z mott Pythona jest "explicit is better than implicit". Skąd > byłoby wiadomo, czy chodzi o globalną funkcję czy metodę bieżącej > klasy? To, które z nich będzie zdefiniowane (czy może oba), będzie > znane dopiero w czasie wykonania, a uzależnianie widoczności > identyfikatorów od przebiegu programu to kiepski pomysł. Wlasnie, to bardzo dobra mysl, eliminowanie sytuacji mylacych jest bardzo pozytywnym zjawiskiem. -- Lucifer
Re: połączenia http - ściąganie plików
Author: Marcin Wojtczuk
Date: Mon, 09 Dec 2002 16:34
Date: Mon, 09 Dec 2002 16:34
23 lines
2087 bytes
2087 bytes
Marcin 'Qrczak' Kowalczyk claimed:
> Sun, 8 Dec 2002 19:28:15 +0100, Marcin Wojtczuk <fastviper@telkab.pl> pisze:
>> W tym co widziałem o klasach, niepodoba mi się to, że za każdym wywołaniem
>> zmiennej czy funkcji trzeba pisać self.xxx. Denerwuje mnie to! Ma to jakiś
>> głębszy sens ?
> Jednym z mott Pythona jest "explicit is better than implicit". Skąd
> byłoby wiadomo, czy chodzi o globalną funkcję czy metodę bieżącej
> klasy?
Momencik :) Na początku nie zrozumiałem - dopiero teraz do mnie dotarło.
Chodzi mi o to, że nie widzę sposobu na używanie w swojej klasie funkcji
z innej klasy, jak np. z sys czy os. Muszę dopisywać
import os
i robić self.os.cośtam. To moim zdaniem mylące, bo to tak naprawdę nie
jest moja metoda, tylko metoda z os (nie chcę tego self, tylko właśnie
extern.os.cośtam albo coś takiego - też explicite)
Czego nie rozumiem/nie wiem ?
--
[ http://www.stringi.com/viper/ ]
[ JID: FastViper@jabber.gda.pl ]
All good things come to those who wait
Re: połączenia http - ściąganie plików
Author: Wojtek Walczak
Date: Mon, 09 Dec 2002 16:46
Date: Mon, 09 Dec 2002 16:46
8 lines
1456 bytes
1456 bytes
Dnia Mon, 9 Dec 2002 17:34:25 +0100, Marcin Wojtczuk napisał(a): > import os > i robić self.os.cośtam. Mozesz pokazac przyklad, gdzie robisz self.os.costam() ? ;] -- [ ] gminick (at) underground.org.pl http://gminick.linuxsecurity.pl/ [ ] [ "Po prostu lubie poranna samotnosc, bo wtedy kawa smakuje najlepiej." ]
Re: połączenia http - ściąganie plików
Author: Marcin 'Qrczak' Kowalczyk
Date: Mon, 09 Dec 2002 17:14
Date: Mon, 09 Dec 2002 17:14
14 lines
1679 bytes
1679 bytes
Mon, 9 Dec 2002 17:34:25 +0100, Marcin Wojtczuk <fastviper@telkab.pl> pisze:
> Chodzi mi o to, że nie widzę sposobu na używanie w swojej klasie funkcji
> z innej klasy, jak np. z sys czy os. Muszę dopisywać
> import os
> i robić self.os.cośtam.
Nie musisz - zrób 'import os' w module, w którym ta klasa jest definiowana,
i pisz os.cośtam.
--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
Re: połączenia http - ściąganie plików
Author: Marcin Wojtczuk
Date: Mon, 09 Dec 2002 19:05
Date: Mon, 09 Dec 2002 19:05
46 lines
2385 bytes
2385 bytes
Wojtek Walczak claimed:
> Dnia Mon, 9 Dec 2002 17:34:25 +0100, Marcin Wojtczuk napisał(a):
>> import os
>> i robić self.os.cośtam.
> Mozesz pokazac przyklad, gdzie robisz self.os.costam() ? ;]
Proszę ;)
#v+
class dns:
import re, socket
def resolve(self, host):
if self.re.match('^[0-9]', host.split('.')[0]):
try:
rev = self.socket.gethostbyaddr(host)
h = host.split('.')
i = len(h)-1
arpa = ''
while i>=0:
arpa, i = arpa + h[i] + '.', i-1
return "%sin-addr.arpa domain name pointer %s." % (arpa, rev[0])
except:
return 'Unknown host'
else:
try:
answer = self.socket.gethostbyname_ex(host)
if len(answer[1])==0:
return "%s has inet address %s" % (host, answer[2][0])
elif len(answer[1]) > 0:
s =''
for x in answer[1]:
s += "%s is an alias for %s\n" % (x, answer[0])
s += "%s has inet address %s" % (answer[0], answer[2][0])
return s
else:
raise 'socket library sucks'
except:
return "Host addr not found (NXDOMAIN)"
#v-
PS: Jak oceniacie moje postępy w nauce (tygodniowe od zera) ?
--
[ http://www.stringi.com/viper/ ]
[ JID: FastViper@jabber.gda.pl ]
All good things come to those who wait
Re: połączenia http - ściąganie plików
Author: Wojtek Walczak
Date: Mon, 09 Dec 2002 19:33
Date: Mon, 09 Dec 2002 19:33
23 lines
1876 bytes
1876 bytes
Dnia Mon, 9 Dec 2002 20:05:13 +0100, Marcin Wojtczuk napisał(a):
> Wojtek Walczak claimed:
>> Dnia Mon, 9 Dec 2002 17:34:25 +0100, Marcin Wojtczuk napisał(a):
>>> import os
>>> i robić self.os.cośtam.
>> Mozesz pokazac przyklad, gdzie robisz self.os.costam() ? ;]
> Proszę ;)
No tak, racja ;]
> h = host.split('.')
> i = len(h)-1
> arpa = ''
> while i>=0:
> arpa, i = arpa + h[i] + '.', i-1
To bym zmienil:
h = host.split('.')
h.reverse()
arpa = ".".join(h) + "."
--
[ ] gminick (at) underground.org.pl http://gminick.linuxsecurity.pl/ [ ]
[ "Po prostu lubie poranna samotnosc, bo wtedy kawa smakuje najlepiej." ]
Re: połączenia http - ściąganie plików
Author: Marcin Wojtczuk
Date: Mon, 09 Dec 2002 20:22
Date: Mon, 09 Dec 2002 20:22
19 lines
1752 bytes
1752 bytes
Wojtek Walczak claimed:
>> h = host.split('.')
>> i = len(h)-1
>> arpa = ''
>> while i>=0:
>> arpa, i = arpa + h[i] + '.', i-1
> To bym zmienil:
>
> h = host.split('.')
> h.reverse()
> arpa = ".".join(h) + "."
>
Ha! Wiedziałem, że jak ten lamerski fragment wkleję, to poprawicie ;-)
Dzięki :>
--
[ http://www.stringi.com/viper/ ]
[ JID: FastViper@jabber.gda.pl ]
All good things come to those who wait
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads