使用python脚本评论facebook

时间:2014-03-09 14:48:32

标签: python facebook facebook-graph-api

我试图使用以下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的令牌时检查了所有权限。它仍然无效。该脚本打印我的墙上的帖子,这些帖子放在给定的时间范围内。

1 个答案:

答案 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速率限制。此速率限制是为了防止人们发送垃圾邮件。