[Python] Trabajando con la API de Pastebin

Uno de mis defectos es que soy vago. Extremadamente vago.
Otro es que me encanta programar, y en ocasiones uno estos dos defectos para poder ser más vago todavía.
¿Cómo?
Elaborando scripts que automaticen tareas cotidianas, de modo que pueda realizarlas simplemente haciendo click a un botón.

Mi lenguaje predilecto para la elaboración de scripts es Python, por su sencillez, facilidad de uso, es multiplataforma, y por su potencia si necesitas utilizarla.

Hoy voy a mostrar como crear un script en Python que suba un contenido a Pastebin y nos devuelva la URL del paste.

Presentación

Pastebin es, para todo el que no lo conozca, un servicio al cual podemos subir contenido en formato de texto, decidir si queremos hacerlo público o privado, y si le decimos que el texto está escrito en un lenguaje de programación determinado, podremos observar como se ejecuta un syntax highlight, es decir, se resaltan las palabras propias del lenguaje.

Realmente el servicio no tiene misterio, solo con entrar a la página y hacer 2 pruebas se entiende perfectamente la dinámica.

Este servicio se ha hecho muy popular entre desarrolladores, ya que permite una forma muy fácil y rápida de compartir trozos de código entre ellos (parecido a Gist de GitHub).

La API

Pastebin proporciona una API muy simple, tanto en complejidad como en facilidad de uso.
Realmente solo hay que configurar 3 parámetros, ejecutar una petición, y ya tenemos nuestra URL.
Vamos a ver qué parámetros necesitamos

API DEV KEY

Para hacer uso de la API de Pastebin necesitaremos estar registrados.
Una vez registrados, entraremos al apartado de API (tenemos enlaces tanto en la parte superior como en la inferior), y copiaremos nuestra API KEY.
Aparece en un recuadro indicada:
API_KEY

Esa será nuestra clave para interaccionar con la API de Pastebin.

API OPTION

Para este tutorial en el que solo queremos subir texto, lo dejaremos por defecto en paste

API PASTE CODE

Será el texto que queremos publicar en el paste

Haciendo una petición de ejemplo

Una vez tenemos claros los 3 campos anteriores, podemos empezar a generar una petición de prueba para entender cómo funciona.
Dejo aquí el script comentado para que se entienda qué se está haciendo en cada momento:

prettyprint-python linenums nowrap
#Importamos las librerias urllib y urllib2, necesarias para comunicarnos con el webservice de la API
import urllib, urllib2

#Declaramos los 3 parametros indicados
api_key = "NUESTRA API KEY"
api_paste_code = "Este es un texto de prueba"
api_option = "paste"

#Declaramos la URL del webservice de la API
url = "http://pastebin.com/api/api_post.php"

#Creamos un diccionario con los parametros a pasar
parametros = {"api_option":api_option,"api_dev_key":api_key, "api_paste_code":api_paste_code}

#Codificamos los parametros en formato URI, para que sean correctamente reconocidos
#Para ello utilizamos el metodo urllib.urlencode
data = urllib.urlencode(parametros)

#Hacemos la peticion HTTP, que al tener parametros sera de tipo POST
request = urllib2.Request(url, data)

#Guardamos la respuesta de la API y la leemos
response = urllib2.urlopen(request)
html = response.read()

#Mostramos la respuesta por pantalla, que en este caso sera la URL del paste
print html

Ejecutando este sencillo script en python, veríamos como nos devuelve una URL que, si accedemos, nos mostrará nuestro contenido publicado en Pastebin.

Sencillo, verdad?

Parámetros opcionales

La API de Pastebin puede ser sencilla, pero permite además el uso de parámetros opcionales o modificadores para poder aprovechar mejor las capacidades de este servicio de subida de texto.

Ahí va una pequeña lista de ellos, seguida de un ejemplo en el que se usan todos ellos:

API PASTE NAME

En el caso que quisiéramos guardar el paste con un nombre concreto, podemos pasar el parámetro api_paste_name, el cual contendrá el nombre a guardar

API PASTE FORMAT

Si el texto que vamos a subir está escrito en algún lenguaje de programación, podemos indicarlo en este campo por tal que se aplique el resaltado de palabras propias del lenguaje (syntax highlight).
Tenéis una lista enorme de todos los lenguajes soportados y de los parámetros a pasar en la documentación oficial: http://pastebin.com/api#5

API PASTE PRIVATE

Si quisiéramos guardar nuestro paste en modo público, no tendríamos que pasar este parámetro.
En cambio, en caso que queramos guardarlo en modo Unlisted (sólo los usuarios con el enlace pueden verlo) o Privado (requiere de un API USER KEY, el cual se explica más adelante), deberemos pasar este campo. Su valor será 0, 1 o 2:

0.- El paste será Público
1.- El paste será Unlisted
2.- El paste será Privado

  1. api_user_key - this paramater is part of the login system, which is explained further down the page.
  2. api_paste_name - this will be the name / title of your paste.
  3. api_paste_format - this will be the syntax highlighting value, which is explained in detail further down the page.
  4. api_paste_private - this makes a paste public or private, public = 0, unlisted = 1, private = 2
  5. api_paste_expire_date - this sets the expiration date of your paste, the values are explained futher down the page.