¿Cómo actualizo el estado de FB usando Python y GraphAPI?

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

Flujo de inicio de 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' + 'Say something: ' + '\n' + '

' + '\n' + '
' + '\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 :

  1. Cree una nueva aplicación o use una existente creada previamente.
  2. Genere un token de acceso de usuario utilizando el explorador Graph API con el permiso extendido status_update para la aplicación.
  3. 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!