2009-12-15 3 views
2

Я пытаюсь добавить функциональность в свое приложение Django: когда новое сообщение одобрено, я хочу автоматически обновить статус соответствующей страницы Facebook и ссылку на сообщение. Обновление базового состояния.Обновление статуса страницы Facebook с помощью pyfacebook

Скачано и установлено pyfacebook - и я прочитал tutorial из Facebook. Я также видел это предложение 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 пытается открыть рысь, так что я могу войти, чтобы Facebook «через Интернет» - это, очевидно, не собирается чтобы работать для меня, потому что система должна быть автоматизирована ... Я искал, но не могу узнать, как я могу держать все это в работе со сценарием и не нужно входить в систему через веб-браузер.

Любые идеи?

ответ

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 является «Desktop Applications» пример. Вы хотите следовать разделу «Веб-приложения». Я бы посоветовал вам просто нажать здесь учебник.

+0

Существует объяснение далее вниз по адресу: http://wiki.developers.facebook.com/index.php/User:PyFacebook_Tutorial#Adding_content_to_a_profile_page_without_user_interaction.2Flogin ... однако, примечание говорит о том, что метод в настоящее время «overkill» ... надеялся, что у кого-то есть опыт поделиться, что может помочь ... иначе, попробуем этот маршрут. – thornomad

+0

Комментарий состоит в том, что «бесконечный сеансовый трюк» является излишним. Я все же был бы склонен последовать первому руководству, только чтобы заставить его работать. После того, как вы почувствовали API, вы можете следовать советам сеанса. –

+1

Не удалось опубликовать сообщение, но это было полезно: http://www.emcro.com/blog/2009/01/facebook-infinite-session-keys-no-more/ – thornomad

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 
Смежные вопросы