2

我正在尝试向我的 Django 应用程序添加功能:当新帖子获得批准时,我想通过消息和帖子链接自动更新相应 Facebook 页面的状态。基本状态更新。

我已经下载并安装了pyfacebook - 我已经阅读了 Facebook 的教程。我也在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——这显然对我不起作用,因为系统应该是自动化的……我'一直在寻找,但不知道如何让这一切与脚本一起工作,而不必通过网络浏览器登录。

有任何想法吗?

4

2 回答 2

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是“桌面应用程序”示例。您想要关注“Web 应用程序”部分。我鼓励您直接继续那里的教程。

于 2009-12-15T14:12:40.930 回答
0

如果你想登录到你的 facebook 个人资料页面,我已经设法使用这个脚本来做到这一点:

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

我成功登录,您可以通过在浏览器上查看 fb_test.html 或以纯文本搜索您的姓名来证明这一点。

有谁知道如何使用简单的 Authedication 凭据而不是使用您需要制作应用程序的 SECRET AND 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
于 2011-01-02T19:33:23.137 回答