2016-02-02 3 views
2

Я пытаюсь читать разговоры на facebook на странице, используя скрипт python. С помощью этого кодаЧтение сообщений facebook с помощью python sdk

import facebook 

at = "page access token" 
pid = "page id" 
api = facebook.GraphAPI(at) 
p = api.get_object('me/conversations') 
print p 

Я получаю словарь, содержащий следующие

{'paging': {'next': 'https://graph.facebook.com/v2.5/1745249635693902/conversations?access_token=<my_access_token>&limit=25&until=1454344040&__paging_token=<my_access_token>', 'previous': 'https://graph.facebook.com/v2.5/1745249635693902/conversations?access_token=<my_access_token>&limit=25&since=1454344040&__paging_token=<my_access_token>'}, 'data': [{'link': '/Python-1745249635693902/manager/messages/?mercurythreadid=user%3A100000386799941&threadid=mid.1454344039847%3A2e3ac25e0302042916&folder=inbox', 'id': 't_mid.1454344039847:2e3ac25e0302042916', 'updated_time': '2016-02-01T16:27:20+0000'}]} 

Каковы эти поля? Как я могу получить текст сообщения?

Edit: Я пытался просить поле «сообщений», добавив

msg = api.get_object(p['data'][0]['id']+'/messages') 
    print msg 

, но он просто возвращает то же поле. Я искал в документах API некоторое время, но я не нашел ничего полезного. Возможно ли даже читать содержание сообщения в разговоре на странице Facebook с помощью python?

+0

Вы должны указать поля, которые вы хотите. Посмотрите на документацию для меня/беседы – WizKid

+0

Я не могу найти документацию, которую вы предлагаете; в официальной ссылке API не упоминаются разговоры – Maldus

+0

Вы можете найти ее здесь https://developers.facebook.com/docs/graph-api/reference/v2.5/page/conversations. Это вернет список объектов диалога, который описан здесь https://developers.facebook.com/docs/graph-api/reference/v2.5/conversation/ –

ответ

6

Мне удалось найти ответ сам; вопрос не был хорошо поставлен и не соответствовал тому, что я точно искал.

Я хотел получить содержание сообщений из разговоров facebook на странице. Следуя документации API графического интерфейса facebook, это может быть достигнуто путем запроса разговоров ({page-id}/conversations), затем сообщений в указанных цепочках ({talk-id}/messages, https://developers.facebook.com/docs/graph-api/reference/v2.5/conversation/messages) и, наконец, запроса сообщения сам должен вернуть dict со всеми полями, включая контент (/ {message-id}, https://developers.facebook.com/docs/graph-api/reference/v2.5/message).

По крайней мере, так я полагал, что это должно было быть; однако последний запрос возвратил только поля «created_time» и «id».

То, что я действительно пытался спросить, было способом получить поле «сообщение» (контент). Я предполагал, что функция graph.get_object() из официального python facebook sdk должна была возвращать все поля в любом случае, так как имеет только один документированный аргумент (http://facebook-sdk.readthedocs.org/en/latest/api.html) - путь графика для запрошенного объекта и добавление дополнительного запроса поля не допускается.

Ответ, который я искал, был в этом другом вопросе, Request fields in Python Facebook SDK. По-видимому, можно запросить конкретные поля (которые не возвращаются в противном случае), передав ** args dict с такими полями вместе с запрошенным путем. В запросе GET к графике Facebook, который был бы эквивалентом добавления

?fields=<requested fieds> 

к пути объекта.

Это рабочий код:

#!/usr/bin/env python 

import facebook 

at = <my access token> 
pid = <my page id> 
api = facebook.GraphAPI(at) 
args = {'fields' : 'message'} #requested fields 
conv = api.get_object('me/conversations') 
msg = api.get_object(conv['data'][0]['id']+'/messages') 
for el in msg['data']: 
    content = api.get_object(el['id'], **args) #adding the field request 
    print content 
+2

pid - неиспользуемая переменная – szedjani

Смежные вопросы