Facebook Graph API v2.5

En este IPython Notebook se anotarán algunos usos básicos la API que provee Facebook.


In [1]:
import json
import requests

BASE = "https://graph.facebook.com"
VERSION = "v2.5"

# Si queremos imprimir los json de respuesta 
# de una forma mas agradable a la vista podemos usar
def print_pretty(jsonstring, indent=4, sort_keys=False):
    print(json.dumps(jsonstring, indent=indent, sort_keys=sort_keys))

Tomamos el access token temporal creado en Graph API Explorer. Si queremos crear uno que sea permanente podemos usar las instrucciones de esta pregunta de StackOverflow o de esta otra pregunta. Alternativamente, podemos crear un token de acceso con nuestra id y clave:


In [2]:
with open("credentials") as f:
    access_token = str(f.read().splitlines()[0])

Partiremos con lo más simple. Una consulta GET para obtener información sobre nosotros mismos.

GET /me

El token de acceso se envía como parámetro, junto con los campos que queremos obtener de la consulta:


In [3]:
url = "{}/{}/me".format(BASE, VERSION)
params = {
    "access_token": access_token,
    "fields": ["id", "name"]
}
req = requests.get(url, params=params)
print_pretty(req.json())

my_id = req.json()["id"]
my_name = req.json()["name"]


{
    "id": "10205151616052455",
    "name": "Antonio Andr\u00e9s Ossa Guerra"
}

Ahora, publicaremos un estado. Esta request nos retornará la id del post, que será publicado con visibilidad "Solo para mi" (Only me)

POST /me/feed


In [8]:
url = "{}/{}/me/feed".format(BASE, VERSION)
params = {
    "access_token": access_token,
    "message": "Este estado lo publiqué usando la API de Facebook :O"
}
req = requests.post(url, params=params)
status_id = req.json()["id"]
print("status_id = {}".format(status_id))


{
    "id": "10205151616052455_10208715273621667"
}
status_id = 10205151616052455_10208715273621667

Luego, podemos directamente borrar un estado solo si lo publicamos usando la API:

DELETE /{status-id}


In [10]:
url = "{}/{}/{}".format(BASE, VERSION, status_id)
params = {
    "access_token": access_token
}
req = requests.delete(url, params = params)
print_pretty(req.json())


{
    "success": true
}