簡體   English   中英

如何通過facebook-sdk python api獲取用戶帖子?

[英]How to get user posts through facebook-sdk python api?

我使用facebook-jssdk授權我的應用程序對用戶個人資料和用戶帖子進行讀取訪問。

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

然后我正在嘗試接收用戶帖子。 導入json從時間導入mktime從urllib導入urlopen從facebook導入GraphAPI從datetime導入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': []}

數據總是空的......我做錯了什么?

有用信息由於“Facebook Login v2.5”權限要求審核才能正常運行。 https://developers.facebook.com/docs/facebook-login/permissions/v2.2

你想知道如何使用python api獲取用戶帖子,對吧?

我在一個django項目中使用facebook-sdk ,我就讓它工作了,就像這樣(Implementation - services / 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

注意:在我的情況下,我需要使用客戶端憑據流來獲取訪問令牌,利用密鑰和密鑰設置,如果您將用戶登錄到您的應用程序並且已經擁有令牌,則忽略線路:

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

用法(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")

希望這有幫助,任何問題,請問=)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM