2017-02-04 5 views
0

Ich möchte meine Facebook-Seite Likes mit Python zählen, aber ich bekomme den folgenden Fehler.Wie zu beheben TypeError 'int' Objekt hat kein Attribut '__getitem__'?

Traceback (most recent call last): 
    File "facebook_test.py", line 29, in <module> 
    print "Page Name:"+ page_data['name'] 
TypeError: 'int' object has no attribute '__getitem__' 

Es gibt mehrere ähnliche Beiträge über dieses, aber ich kann es nicht hier

herauszufinden, meine verwendete Code ist.

import urllib2 
import json 
import time 

def get_page_data(page_id,access_token): 
    api_endpoint = "https://graph.facebook.com/v2.4/" 
    fb_graph_url = api_endpoint+page_id+"?fields=id,name,likes,unread_notif_count,link&access_token="+access_token 
    try: 
     api_request = urllib2.Request(fb_graph_url) 
     api_response = urllib2.urlopen(api_request) 

     try: 
      return json.loads(api_response.read()) 
     except (ValueError, KeyError, TypeError): 
      return "JSON error" 

    except IOError, e: 
     if hasattr(e, 'code'): 
      return e.code 
     elif hasattr(e, 'reason'): 
      return e.reason 

while 1: 
    page_id = "xxxxxxxxxxx" # username or id 
    token = "XXXXXXXX" 
    page_data = get_page_data(page_id,token) 

    print "Page Name:"+ page_data['name'] 
    print "Likes:"+ str(page_data['likes']) 
    print "Unread notifications:"+ str(page_data['unread_notif_count']) 


    time.sleep(0.5) 

Kann mir jemand dabei helfen?

+1

'page_data' ist ein int, der Code für den Fehler, den Sie von der Funktion –

+0

Ok ok zurückgegeben haben. Sie haben eine Lösung? –

+0

Sie müssen zurückgehen und Ihren Code überdenken, wenn page_dara nicht das ist, was Sie erwarten. – Pureferret

Antwort

0

Sie haben mehrere Rückgabewerte in Ihrem Code get_data, die unterschiedliche Datentypen zurückgeben, aber die Art, wie Sie sie verwenden, bedeutet, dass Sie immer erwarten, dass es sich um ein Diktat handelt. Bei Stone Point gibt es ein Interview zurück, wenn es etwas anderes erwartet.

Entweder Ihr get_data Methode ändern, so dass es immer eine dict zurückgibt, oder vorzugsweise, es ändern, so dass es nur an einem Ort und einem Datentyp (Ihre dict) und lassen Sie es eine Ausnahme auslösen, zurückgibt, wenn es fehlschlägt.

+1

Airght werde es versuchen. Ich bin noob, also wird es eine Weile dauern. Danke für deine Mühe und Zeit. –

+0

@edriskeyam lassen Sie mich wissen, wie es geht – Pureferret

Verwandte Themen