6

我使用facebook-jssdk來授權我的應用程序讀取用戶配置文件和用戶帖子。 如何通過facebook-sdk python api獲取用戶帖子?

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 從日期時間日期時間進口

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': []} 

數據始終是空的......我在做什麼錯?

有用的信息由於「臉譜登錄V2.5」許可需要經過審覈才能正常工作。 https://developers.facebook.com/docs/facebook-login/permissions/v2.2

+0

你是從一箇舊例的工作?新創建的應用程序將無法訪問FQL,並且上面列出的許多權限在當前版本的API – Igy

+0

中不存在,我正在使用新舊示例。 user_posts權限現在存在於圖表api中:http://i.imgur.com/H1xiO6Z.jpg我只展示了FQL的例子 - 即使它不工作... –

回答

5

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

我使用facebook-sdk一個Django項目中,我得到它的工作,像這樣的(實施 - 服務/ 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") 

希望這有助於,有任何問題,請不要問=)

+0

我總是得到空的數據...它是問題。在[13]:FacebookFeed.get_posts(user ='100000153778906') Out [13]:{u'data':[]} –

+0

噢好吧,我使用用戶名來檢索數據,所以在那種情況下,不是ID 100000153778906,而是與該ID相關聯的用戶名。我現在沒有測試它,但我會在當天晚些時候進行測試。 – jlnabais

+1

我認爲我找到了原因 - 我的應用程序未經Facebook授權使用user_posts權限。我已經開始認可程序,所以不要測試。我絕對需要這個權限。感謝您的幫助。 –

相關問題