Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: DrevenaOhrada 29. 04. 2014, 20:34:02

Název: Python JSON NoneType
Přispěvatel: DrevenaOhrada 29. 04. 2014, 20:34:02
Zdravím,

učím se těď v Python 3 a už druhý den řeším jeden menší problém. Má se stáhnout stránka a json má přebrat obsah stránky. Bohužel vše skončí chybou TypeError: the JSON object must be str, not 'NoneType'. Poradil by někdo jak to dokončit?

Děkuji všem :)

Kód: [Vybrat]
import pymysql as mdb
import pycurl
import json


class Trida:

def getPage(self, url):

c = pycurl.Curl()
c.setopt(pycurl.URL, url)
c.setopt(pycurl.HTTPHEADER, ['Accept:'])
c.setopt(pycurl.SSL_VERIFYPEER, 0)
c.setopt(pycurl.FOLLOWLOCATION, 1)

return c.perform()


def getData(self):

getContent = self.getPage('https://www.web.cz/api')

array = json.loads(getContent)

print(array)


getTrida = Trida()

getTrida.getData()

Název: Re:Python JSON NoneType
Přispěvatel: Petr Blahos 29. 04. 2014, 20:58:02
Vsadil bych se, že funkce getPage vrátí None, protože funkce perform vrátí None. Já teda pycurl nepoužívám, takže je to jen takový rychlý odhad. Doporučuju místo pycurl použít requests.
Název: Re:Python JSON NoneType
Přispěvatel: Komačka Juraj 29. 04. 2014, 21:30:59
Tiež nepoužívam, ale po rýchlom nazretí do dokumentácie bude IMHO ešte pomocou setopt potreba nastaviť, kam sa zapíše response po vykonaní perform - ten totiž nevracia response data - obdobne ako v example setopt (http://pycurl.sourceforge.net/doc/curlobject.html (http://pycurl.sourceforge.net/doc/curlobject.html)) takže asi:
Kód: [Vybrat]
import StringIO

def getPage(self, url):
c = pycurl.Curl()
c.setopt(pycurl.URL, url)
c.setopt(pycurl.HTTPHEADER, ['Accept:'])
c.setopt(pycurl.SSL_VERIFYPEER, 0)
response = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, response.write)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.perform()
return response.getvalue()
Název: Re:Python JSON NoneType
Přispěvatel: DrevenaOhrada 29. 04. 2014, 21:35:01
Mockrát děkuji za nakopnutí, už to funguje. Mockrát děkuji :)