6

Uso facebook-jssdk per autorizzare la mia applicazione per l'accesso in lettura al profilo utente e ai post dell'utente. Come ottenere i post degli utenti tramite facebook-sdk python api?

FB.login(
    function(response) { }, 
    {scope:'user_status,user_likes,user_photos,user_videos,user_questions,read_stream,user_posts'} 
); 

Poi sto cercando di ricevere i messaggi degli utenti. importazione JSON di tanto importazione mktime da importazione urllib urlopen da facebook import GraphAPI da datetime import datetime

ga = GraphAPI() 
access_token = ga.get_app_access_token(settings.FACEBOOK_APP_ID,  settings.FACEBOOK_APP_SECRET) 

url = "https://graph.facebook.com/fql?q=SELECT+created_time+FROM+stream+ WHERE+source_id=%s+AND+created_time<%d&access_token=%s" % (
social_id, # user id in facebook, taken from facebook-jssdk 
int(mktime((datetime.now().timetuple()))), 
access_token 
) 
data = json.loads(urlopen(url).read()) 
logger.debug(data) 
# {u'data': []} 


ga = GraphAPI(access_token) 
ga.get_object('/508708815952422/posts/', token=token) 
# {u'data': []} 

dati è sempre vuoto ... Che cosa sto facendo di sbagliato?

i recapiti: Dal autorizzazioni "Facebook Login v2.5" richiedono opinione a funzionare correttamente. https://developers.facebook.com/docs/facebook-login/permissions/v2.2

+0

Stai lavorando da un vecchio esempio? Le app appena create non avranno accesso a FQL e molte delle autorizzazioni elencate sopra non esistono nella versione corrente dell'API – Igy

+0

Sto lavorando a vecchi e nuovi esempi. L'autorizzazione user_posts esiste ora in graph api: http://i.imgur.com/H1xiO6Z.jpg Ho mostrato FQL solo per esempio - anche se non funziona ... –

risposta

5

Vuoi sapere come ottenere i post degli utenti utilizzando un python api, giusto?

sto usando facebook-sdk all'interno di un progetto Django e ho preso a lavorare, come questo (Attuazione - servizi/facebook.py):

from django.conf import settings 
import facebook 
import requests 

class FacebookFeed: 
    token_url = 'https://graph.facebook.com/oauth/access_token' 
    params = dict(client_id=settings.SOCIAL_AUTH_FACEBOOK_KEY, client_secret=settings.SOCIAL_AUTH_FACEBOOK_SECRET, 
        grant_type='client_credentials') 

    @classmethod 
    def get_posts(cls, user, count=6): 
     try: 
      token_response = requests.get(url=cls.token_url, params=cls.params) 
      access_token = token_response.text.split('=')[1] 
      graph = facebook.GraphAPI(access_token) 
      profile = graph.get_object(user) 
      query_string = 'posts?limit={0}'.format(count) 
      posts = graph.get_connections(profile['id'], query_string) 
      return posts 
     except facebook.GraphAPIError: 
      return None 

Nota: Nel mio caso ho bisogno per andare a prendere il token di accesso utilizzando il client credenziali flusso, facendo uso della chiave e le impostazioni di segreti, se si sta accedendo gli utenti in un app del tuo e hanno già gettoni dalla vostra parte, quindi ignorano le righe:

token_response = requests.get(url=cls.token_url, params=cls.params) 
access_token = token_response.text.split('=')[1] 

Utilizzo (views.py):

from django.http import HttpResponse 
from app.services.social_networks.facebook import FacebookFeed 

def get_facebook_posts(request, user): 
    posts = FacebookFeed.get_posts(user=user) 
    if not posts: 
     return HttpResponse(status=500, content="Can't fetch posts for desired user", content_type="application/json") 
    return HttpResponse(json.dumps(posts), content_type="application/json") 

Spero che questo aiuti, qualsiasi problema, si prega di chiedere =)

+0

Ho sempre dati vuoti ... È il problema. In [13]: FacebookFeed.get_posts (utente = '100000153778906') Out [13]: {u'data ': []} –

+0

Oh ok, sto usando i nomi utente per recuperare i dati, quindi in tal caso sarebbe non essere l'id '100000153778906', ma lo username associato a quell'id. Non sono in grado di testarlo adesso, ma ci arriverò più tardi. – jlnabais

+1

Penso di aver trovato il motivo: la mia applicazione non è stata autorizzata da Facebook a utilizzare le autorizzazioni user_posts. Ho iniziato il processo di approvazione, quindi non testare. Ho sicuramente bisogno di queste autorizzazioni. Grazie per l'aiuto. –