2011-11-12 24 views
1

我正在開發Facebook應用程序。它使用Python編寫並在Google App Engine(GAE)上運行。從Google App Engine上運行的Python中提取Facebook的關係狀態

我知道如何獲得用戶網絡的關係狀態,但我這樣做的方式是減速的方式。 GAE有一個時間限制,以減少大約60秒的CPU使用量。使用下面的代碼,我可以在獲得「DeadlineExceededError」之前獲得該時間框架內約200人的關係狀態。當然這還不夠好,因爲很多/大多數人在Facebook上擁有更多的朋友。

我現在要做的是獲取用戶的好友列表,然後爲每個人請求名稱和關係狀態進行API調用。

的代碼我使用:

for f in friends: 
    friends_info[f] = facebook.api('/'+f, {u'fields': 'name,relationship_status', 
    u'access_token': facebook.access_token}) 

然後我得到的數據:

rel_status = friends_info[f][u'relationship_status'] 

我需要什麼:優化

建議或其他方式提取整個網絡的關係狀態。

在此先感謝:-)

編輯:

的答案似乎是解決我的問題都好辦法。雖然,我找不到任何用於Python的批量請求的好教程,所以我最終使用了FQL調用。通過下面的它需要1-2秒來獲取數據:

data = fql.query(Q,facebook.access_token) 

它調用這個函數:

def query(self,Q,access_token): 
    ENDPOINT = 'https://api.facebook.com/method/' 
    params = dict(query=Q, access_token=access_token, format='json') 
    url = ENDPOINT + 'fql.query' 
    return self._fetch(url, params=params) 

def _fetch(self, url, params=None): 
    conn = urllib2.urlopen(url, data=urlencode(params)) 
    try: 
     return json.loads(conn.read()) 
    finally: 
     conn.close() 

希望

Q = 'select uid, sex, relationship_status from user where uid in (select target_id from connection where source_id = me())' 

和實際數據被檢索有人可以利用它!

+1

查詢最多20個用戶除了下面的兩個答案,你應該運行在任務隊列任務的代碼,其中有10分鐘的限制,不60秒。 –

回答

2

每個應用程序引擎實例最多可以有10個並行HTTP查詢,因此您可以使用create_rpc & make_fetch_call將此速度提高10倍。有些情況下這也不起作用,所以您需要將作業分成幾個任務並讓它們並行運行。

相關問題