2016-04-20 6 views
0

Ich habe this tutorial verfolgt, um einige Seiteninformationen von fb herunterzuladen.Heruntergeladene Seitenbeiträge von Facebook. Wie gehe ich mit den JSON-Daten um?

Ich benutze Python 3.5 und das Tutorial verwendet Python2.

Ich hatte einige Probleme mit einem HTTP-Fehlercode 400, im Grunde gesagt, ich musste das https-Protokoll anstelle von http verwenden. Also habe ich jetzt im Idle-Test getestet, dass die Daten kommen und es einem Neuling wie mir als JSON aussieht. Aber wenn ich es den json.loads versuchen Passieren es gibt diesen Fehler

Traceback (most recent call last): 
    File "C:\Users\Levo\Desktop\facebookscrape.py", line 38, in <module> 
    testFacebookPageData(page_id, access_token) 
    File "C:\Users\Levo\Desktop\facebookscrape.py", line 34, in testFacebookPageData 
    data = json.loads(requests_until_succeed(url)) 
    File "C:\Users\Levo\AppData\Local\Programs\Python\Python35\lib\json\__init__.py", line 312, in loads 
    s.__class__.__name__)) 
TypeError: the JSON object must be str, not 'bytes' 

Neben der Verwendung der urllib Bibliothek statt der urllib2 Bibliothek und https statt http tun, was ich nicht, dass ich falsch mache? ist die Verschlüsselung von https das Problem?

def requests_until_succeed(url): 
    req = urllib.request.Request(url) 
    success = False 
    while success is False: 
     try: 
      response = urllib.request.urlopen(req) 
      if response.getcode() == 200: 
       success = True 
     except Exception as e: 
      print(e) 
      time.sleep(5) 

      print ("Error for URL %s: %s" % (url, datetime.datetime.now())) 

     return response.read() 


def testFacebookPageData(page_id, access_token): 
    base = "https://graph.facebook.com/v2.6" 
    node = "/" + page_id + "/feed" 
    parameters = "/?access_token=%s" % access_token 
    url = base + node + parameters 

    data = json.loads(requests_until_succeed(url)) 

    print(json.dumps(data, indent = 4, sort_keys=True)) 

testFacebookPageData(page_id, access_token) 

Antwort

0

json.loads nimmt python3 String, der Unicode ist, und responce.read() gibt binäre Zeichenfolge.

Verwenden Sie data = json.loads(requests_until_succeed(url).decode('utf-8')), weil Antwort wahrscheinlich UTF-8 ist.