Używam interfejsu API przepełnienia stosu przy użyciu Pythona. Próbuję odszyfrować spakowane przez gzip odpowiedzi, które daje interfejs API.Jak utworzyć instancję GzipFile z "obiektu podobnego do pliku", który zwraca funkcja urllib.urlopen()?
import urllib, gzip
url = urllib.urlopen('http://api.stackoverflow.com/1.0/badges/name')
gzip.GzipFile(fileobj=url).read()
Według the urllib2 documentation, urlopen
„zwraca obiekt plikopodobny”.
Jednak, gdy biegnę read()
na obiekcie GzipFile Utworzyłem go używać, otrzymuję ten błąd:
AttributeError: addinfourl instance has no attribute 'tell'
O ile mogę powiedzieć, to jest pochodzących z obiektu zwróconego przez urlopen
.
Nie wydaje się, aby szukać albo, jak pojawia się błąd, kiedy to zrobić:
url.read()
url.seek(0)
Czym dokładnie jest ten przedmiot, i jak mogę stworzyć funkcjonujący GzipFile
wystąpienie z niej?
'Content-Encoding: gzip' powinien być obsługiwany przez bibliotekę http, ale niestety tak nie jest. To jest [problem 9500] (http://bugs.python.org/issue9500) w bazie danych błędów Pythona dla zainteresowanych. –
@Magnus: Pozdrawiam, dobrze wiedzieć, że to przynajmniej w tropiku błędów. –