使用pyfacebook更新Facebook页面状态

2 投票
2 回答
3488 浏览
提问于 2025-04-15 17:02

我正在尝试给我的Django应用添加一些功能:当一个新帖子被批准时,我想自动更新对应的Facebook页面状态,发布一条消息和一个链接到这个帖子。这是一个基本的状态更新。

我已经下载并安装了pyfacebook,并且阅读了Facebook的教程。我还在这里的StackOverflow上看到了一些建议:

import facebook
fb = facebook.Facebook('YOUR_API_KEY', 'YOUR_SECRET_KEY')
fb.auth.createToken()
fb.login() # THIS IS AS FAR AS I CAN GET
fb.auth.getSession()
fb.set_status('Checking out StackOverFlow.com')

但是,当我调用login()时,pyfacebook试图打开lynx让我通过网页登录Facebook——这显然不适合我,因为这个系统应该是自动化的……我一直在寻找,但找不到如何让这个脚本正常工作,而不需要通过网页浏览器登录。

有什么想法吗?

2 个回答

0

如果你想登录你的Facebook个人主页,我用这个脚本成功实现了:

把这个文件保存为 fb_login.py,然后在同一个文件夹里创建一个文件 fb_test.html

我成功登录了,你可以通过在浏览器中查看 fb_test.html 文件,或者搜索你的名字来证明这一点。

有没有人知道怎么用简单的认证信息登录,而不是需要申请的秘密和API密钥?

import urllib, urllib2, cookielib

user = 'put_your_mail_here'
passwd = 'put_your_password_here'

file = './fb_test.html'
url_login = "https://login.facebook.com/login.php?"
url_action = "https://login.facebook.com/login.php?login_attempt=1"
url_topic = "http://www.facebook.com/profile.php?id=___put_your_profile_Number_here"
url_index = "https://login.facebook.com/login.php?"

def login(user, password, url_action):
    cj = cookielib.LWPCookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
    urllib2.install_opener(opener)
    opener.addheaders=[('Content-Type','application/x-www-form-urlencoded'),('Connection','keep-alive'),('User-Agent','Mozilla/5.0')]
    params = urllib.urlencode({'action':url_action , 'referer':url_index, 'email':user, 'pass':passwd, 
                                  'loginTrue':"login"})

f = opener.open(url_action, params)
    f.close()
    f = opener.open(url_action, params)
    f.close()
    return opener

def get_source_code( opener, url_x ):
    f = opener.open(url_x)
    data = f.read()
    print type(data)
    f.close()
    return data

def keep_log( data, file ):
    f = open(file, 'w')
    f.write(data)
    f.close()

opener = login(user, passwd, url_action)
src_code = get_source_code(opener, url_topic)
keep_log(src_code, file)
print src_code
2

login的定义中,特别是在文档说明里,看起来它的设计目的是要打开一个浏览器,让你通过浏览器来登录。

def login(self, popup=False):
    """Open a web browser telling the user to login to Facebook."""
    import webbrowser
    webbrowser.open(self.get_login_url(popup=popup))

看你提供的那个Facebook页面User:PyFacebook_Tutorial,里面的login示例是针对“桌面应用程序”的。你应该关注“网页应用程序”那一部分。我建议你直接按照那里的教程继续学习。

撰写回答