我试图使用以下python脚本评论facebook上的帖子:
import requests
import json
from time import strftime
AFTER = "1392891447"
TOKEN = 'access_token_here'
def get_posts():
"""Returns dictionary of id, first names of people who posted on my wall
between start and end time"""
query = ("SELECT post_id, actor_id, message FROM stream WHERE "
"filter_key = 'others' AND source_id = me() AND "
"created_time > " + AFTER + " LIMIT 200")
payload = {'q': query, 'access_token': TOKEN}
r = requests.get('https://graph.facebook.com/fql', params=payload)
result = json.loads(r.text)
return result['data']
print get_posts()
def commentall(wallposts):
"""Comments thank you on all posts"""
for wallpost in wallposts:
r = requests.get('https://graph.facebook.com/%s' %
wallpost['actor_id'])
url = 'https://graph.facebook.com/%s/comments' % wallpost['post_id']
user = json.loads(r.text)
message = 'Thanks %s :)' % user['first_name']
payload = {'access_token': TOKEN, 'message': message}
s = requests.post(url, data=payload)
print s
print "Wall post %s done" % wallpost['post_id']
commentall(get_posts())
我添加了额外的'print s'来弄清楚发生了什么 运行时此脚本提供输出:
<Response[403] >
我无法弄清楚错误是什么。我最初认为这是因为对令牌的权限不足。我在获取图形浏览器api的令牌时检查了所有权限。它仍然无效。该脚本打印我的墙上的帖子,这些帖子放在给定的时间范围内。
答案 0 :(得分:0)
首先,
“”“返回id的字典,在我的帖子上发布的人的名字 壁 在开始和结束时间之间“”“
我使用filter_key ='others'进行了测试,发现它仍然包含在我墙上的帖子。所以你可以使用actor_id!= me()代替:
SELECT post_id,actor_id,filter_key,message FROM stream WHERE actor_id!= me()AND source_id = me()AND created_time&gt; 1392891447 限制200
其次,我建议你将 LIMIT 降低到100或150,否则你的请求太大,很可能会出现超时错误。
第三,打印get_posts()和commentall( get_posts())两次调用流API
第四,打印“Wall post%s done”%wallpost ['post_id'] 是例外,因为 commentall(get_posts())尚未运行。
第五,请您在尝试评论下一篇文章前几秒钟睡觉。否则,您最有可能达到Graph API速率限制。此速率限制是为了防止人们发送垃圾邮件。