使用pyfacebook更新Facebook页面的状态

时间:2009-12-15 14:01:00

标签: python django facebook pyfacebook

我正在尝试为我的Django应用添加功能:当一个新帖子被批准时,我想通过一条消息和一条自动链接来更新相应的Facebook页面状态。基本状态更新。

我已经下载并安装了pyfacebook - 我已经阅读了Facebook的tutorial。我也看到了这个建议here on SO

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 :(得分:2)

login的定义中,特别是在docstring中,似乎预期的行为是打开浏览器以便以这种方式登录。

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的示例是“桌面应用程序”示例。您想要关注“Web应用程序”部分。我鼓励你简单地按下那里的教程。

答案 1 :(得分:0)

如果您想登录您的Facebook个人资料页面,我已设法使用此脚本执行此操作:

将此文件另存为 fb_login.py ,并在同一文件夹中创建文件 fb_test.html

我已成功登录,因为您可以在浏览器中查看fb_test.html或在纯文本中搜索您的姓名。

有没有人知道如何使用简单的Authedication凭据登录,而不是使用SECRET和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