Esta pregunta se ha formulado anteriormente, pero muchas de las soluciones han quedado en desuso y el requisito de GraphAPI parece haber hecho que muchas soluciones sean irrelevantes. He estado revolviendo con los paquetes fbpy, facebook, oauth, oauth2, y he revisado sus ejemplos, pero todavía no puedo averiguar cómo hacer que funcione. No confío en ninguno de los códigos ni en los paquetes que he estado usando, y me pregunto si alguien tiene alguna solución definitiva que sepa que funcionará. Gracias.
Lo primero que debes hacer es entender los flujos de inicio de sesión . Debe comprender si desea cambiar fácilmente a través de las diferentes bibliotecas de Facebook. Por lo tanto, puede tener un código que sea muy detallado al código que es muy simple basado en la implementación .
Lo siguiente es que hay diferentes maneras de implementar el manejo de OAuth y diferentes formas de mostrar y lanzar su aplicación web en Python. No hay manera de autorizar sin golpear un navegador. De lo contrario, tendría que seguir copiando el access_token al código.
Digamos que eligió web.py
para manejar la presentación de su aplicación web y requests.py
para manejar las llamadas HTTP de Graph API.
import web, requests
Luego configura la URL que queremos que toda solicitud pase.
url = ( '/', 'index' )
Ahora obtenga la ID de su aplicación, la URL secreta y posterior al inicio de sesión que desea utilizar
app_id = "YOUR_APP_ID" app_secret = "APP_SECRET" post_login_url = "http://0.0.0.0:8080/"
Este código tendrá un index
clase para manejar la lógica. En esta clase queremos tratar el code
autorización code
Facebook devolverá después de iniciar sesión
user_data = web.input(code=None) code = user_data.code
Desde aquí se configura un condicional para comprobar el code
if not code: # we are not authorized # send to oauth dialog else: # authorized, get access_token
Dentro de la twig “no autorizado”, envíe al usuario al diálogo
dialog_url = ( "http://www.facebook.com/dialog/oauth?" + "client_id=" + app_id + "&redirect_uri=" + post_login_url + "&scope=publish_stream" ) return ""
De lo contrario podemos extraer el access_token
utilizando el code
recibido.
token_url = ( "https://graph.facebook.com/oauth/access_token?" + "client_id=" + app_id + "&redirect_uri=" + post_login_url + "&client_secret=" + app_secret + "&code=" + code ) response = requests.get(token_url).content params = {} result = response.split("&", 1) for p in result: (k,v) = p.split("=") params[k] = v access_token = params['access_token']
Desde aquí puede elegir cómo desea tratar la llamada para actualizar el estado, por ejemplo, un formulario,
graph_url = ( "https://graph.facebook.com/me/feed?" + "access_token=" + access_token ) return ( '' + '\n' + '' + '\n' + '' )
O usando face.py
from facepy import GraphAPI graph = GraphAPI(access_token) try: graph.post( path = 'me/feed', message = 'Your message here' ) except GraphAPI.OAuthError, e: print e.message
Así que al final puedes obtener una versión reducida como
import web from facepy import GraphAPI from urlparse import parse_qs url = ('/', 'index') app_id = "YOUR_APP_ID" app_secret = "APP_SECRET" post_login_url = "http://0.0.0.0:8080/" user_data = web.input(code=None) if not user_data.code: dialog_url = ( "http://www.facebook.com/dialog/oauth?" + "client_id=" + app_id + "&redirect_uri=" + post_login_url + "&scope=publish_stream" ) return "" else: graph = GraphAPI() response = graph.get( path='oauth/access_token', client_id=app_id, client_secret=app_secret, redirect_uri=post_login_url, code=code ) data = parse_qs(response) graph = GraphAPI(data['access_token'][0]) graph.post(path = 'me/feed', message = 'Your message here')
Para más información ver
* API de Facebook – Feed del usuario: http://developers.facebook.com/docs/reference/api/user/#feed
* Publicar una foto de Facebook en Python – La salsa básica: http://philippeharewood.com/facebook/publish-a-facebook-photo-in-python-the-basic-sauce/
* Facebook y Python – La salsa básica: http://philippeharewood.com/facebook/facebook-and-python-the-basic-sauce/
Una posible solución (¡probado!) Usando facepy :
status_update
para la aplicación. Utilice el token de acceso de usuario creado en el paso anterior con facepy :
from facepy import GraphAPI ACCESS_TOKEN = 'access-token-copied-from-graph-api-explorer-on-web-browser' graph = GraphAPI(ACCESS_TOKEN) graph.post('me/feed', message='Hello World!')
Puedes probar este blog también. Está utilizando la aplicación fbconsole .
El código del blog:
from urllib import urlretrieve import imp urlretrieve('https://raw.github.com/gist/1194123/fbconsole.py', '.fbconsole.py') fb = imp.load_source('fb', '.fbconsole.py') fb.AUTH_SCOPE = ['publish_stream'] fb.authenticate() status = fb.graph_post("/me/feed", {"message":"Your message here"})
Así es como lo hice funcionar. No necesitas crear ninguna aplicación para esto. Describiré cómo publicar actualizaciones de estado en tu perfil y en una página de Facebook tuya.
Primero, para publicar una actualización de estado en su perfil:
Vaya a https://developers.facebook.com/tools/explorer .
Verás un cuadro de texto con el token de acceso escrito antes. Haga clic en el botón “Obtener token de acceso” al lado de este cuadro de texto. Se abrirá una ventana emergente que le solicitará varios permisos para el token de acceso. Básicamente, estos permisos definen lo que puedes hacer a través de Graph API con este token. Marque las casillas de verificación junto a todos los permisos que necesita, uno de los cuales actualizará su estado.
Ahora sigue adelante e instala el módulo facepy. La mejor manera sería usar pip install.
Después de esto pase el siguiente fragmento de código en cualquier archivo .py:
from facepy import GraphAPI access_token = 'YOUR_GENERATED_ACCESS_TOKEN' apiConnection = GraphAPI(access_token) apiConnection.post(path='me/feed', message='YOUR_DESIRED_STATUS_UPDATE_HERE')
Ahora ejecuta este archivo .py de la manera estándar de Python y revisa tu facebook. Debería ver YOUR_DESIRED_STATUS_UPDATE_HERE
publicado en su perfil de Facebook.
A continuación, para hacer lo mismo con una página de Facebook tuya:
El procedimiento es casi exactamente el mismo, excepto para generar su token de acceso.
Ahora no puede usar el mismo token de acceso para publicar en su página de Facebook. Necesitas generar uno nuevo, lo que podría ser un poco complicado para alguien nuevo en Graph API. Esto es lo que necesitas hacer:
Vaya a la misma página de developers.facebook.com/tools/explorer.
Encuentre un menú desplegable que muestre ‘Graph API Explorer’ y haga clic en él. Desde el menú desplegable, seleccione la página desde la que desea publicar actualizaciones. Genera un nuevo token de acceso para esta página. El proceso se describe aquí :. No olvide verificar el permiso de manage_pages en la pestaña de permisos extendidos.
Ahora use este token en el mismo código que usó anteriormente y ejecútelo.
Ve a tu página de facebook. Debes YOUR_DESIRED_STATUS_UPDATE
publicado en tu página.
¡Espero que esto ayude!