Я работаю над приложением Facebook. Он написан на Python и работает на Google App Engine (GAE).
Я знаю, как получить статус взаимоотношений в сети пользователей, но способ, которым я это делаю, работает медленно. GAE имеет ограничение по времени, чтобы уменьшить загрузку ЦП, которая составляет около 60 секунд. Используя следующий код, я могу получить статус отношений около 200 человек за этот промежуток времени до получения «DeadlineExceededError». Конечно, этого недостаточно, поскольку у многих / большинства людей в 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 секунды:
Q = 'select uid, sex, relationship_status from user where uid in (select target_id from connection where source_id = me())'
А фактические данные извлекаются с помощью:
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()
Надеюсь, кто-то может использовать это тоже!