CableRuby: Estudiando el Cablegate de Wikileaks con Software Libre
guivaloz
2011-06-13 09:30
Wikileaks, PostgreSQL, Ruby, Proyectos, Política
Cambios en la versión 1.1 al 13/jun/2011
- Se mejoró la sección “Uso del programa”
- Se corrigió el script sabueso.rb para solicitar el directorio de los cables como párametro.
Introducción
WikiLeaks (wiki por Wikipedia y leak en inglés fuga, goteo, filtración de información) es una organización mediática internacional sin ánimo de lucro que publica a través de su sitio web informes anónimos y documentos filtrados con contenido sensible en materia de interés público, preservando el anonimato de sus fuentes.
A partir de noviembre de 2010 comienza la publicación de más de 250,000 cables diplomáticos, que son comunicaciones internas entre las embajadas y consulados norteamericanos con su gobierno. Se le conoce con el nombre de Cablegate y es la mayor filtración de documentos secretos de la historia.
WikiLeaks proporcionó (en un inicio) esa información a los diarios The Guardian, The New York Times, Le Monde, El País y al semanario Der Spiegel. Posteriormente se han sumados más medios; entre ellos el mexicano La Jornada. Wikileaks colabora con estos medios de prestigio para que los cables sean estudiados y comentados por periodistas, así como para lograr mayor difusión de los mismos.
Wikileaks proporciona los cables publicados al día en un archivo comprimido que puede descargarse por Bittorrent. Al desempacarse crea una réplica del sitio web del Cablegate (son archivos HTML con algo de JavaScript).

Motivos para crear este programa
Aunque es bueno el análisis y difusión de los medios, podríamos no quedar satisfechos con la nota periodística y necesitemos localizar los cables originales para hacer nuestros propios estudios. De primera instancia es raro que la referencia de los cables aparezca en los artículos; ya que cada cable se identifica por una clave única, como 09STATE15113 y aunque Wikileaks pide que no deje de mencionarse, en la práctica la mayoría no lo hace.
Si usamos los buscadores más populares nos arrojarán miles de resultados, la mayoría de ellos dirigidos a otros artículos y comentarios. Difícilmente el resultado de la búsqueda nos dará un vínculo directo al cable. Aunado a ello están las acciones de censura hacia Wikileaks. Por ejemplo, una aplicación para leer los cables en iOS fue removida de la tienda de aplicaciones de Apple.
El objetivo de CableRuby es transferir los cables a una base de datos local, para tener en nuestro propio equipo la posibilidad de estudiarlo directamente, sin depender de Internet y los motores de búsqueda que pueden hacer mal uso de nuestro historial.
Cómo está hecho
Estos programas están hechos con Ruby. Con dos tipos de archivos: los ejecutables para la terminal y las librerías que contienen las clases en el directorio “src”. Algunos programas hacen uso de más de una librería y otras heredan métodos y propiedades de otras.
He elegido a PostgreSQL como software para la base de datos. Debe ser relativamente sencillo hacer los cambios para que use otra. El gráfico de la derecha es un diagrama de la base de datos de estos programas.
Dependencias
Los pasos de instalación de las dependencias son para mi distribución preferida Gentoo Linux. Si usa una diferente, siga los métodos de instalación de ella. En síntesis, se trata de instalar el descompresor 7z, la librería nokogiri y la capacidad de trabajar con PostgreSQL en Ruby.
Para los comandos que muestro a continuación, si empiezan con “#” deben ejecutarse como superusuario, o sea “root”; mientras que los que tienen “$” son ejecutados en una cuenta de usuario común.
Ya que este escrito no pretende ser una guía de instalación de PostgreSQL, le recomiendo que busque y sigua el manual de su distribución preferida. Pruebe que tiene tiene PostgreSQL en ejecución con:
$ psql -l
El archivo del cablegate de Wikileaks está comprimido en un archivo 7z. Necesita p7zip para desempacarlo:
# emerge app-arch/p7zip
Estos programas usan la librería Nokogiri de Ruby. Por medio de ella se hace la extracción de textos específicos de los archivos HTML. Este paquete no está marcado como estable en Gentoo, así que debe de modificar:
# nano -w /etc/portage/package.keywords
Y agregue
# Libreria de Ruby para extraer informacion de archivos HTML dev-ruby/rexical dev-ruby/rake-compiler dev-ruby/racc dev-ruby/nokogiri # Para que Ruby use PostgreSQL dev-ruby/pg
Instale Nokogiri con:
# emerge dev-ruby/nokogiri
Para que estos programas puedan acceder a la base de datos PostgreSQL, instale pg y ruby-dbi:
# emerge dev-ruby/pg # emerge dev-ruby/ruby-dbi
Ya con todo esto instalado, continuemos explicando los programas y poniéndolos a trabajar.
Las Clases
- Cable (clase-cable.rb) Define la estructura de datos para un cable del Cablegate de Wikileaks.
- Sabueso (clase-sabueso.rb) Es para rastrear los archivos HTML que se encuentran dentro del directorio cable, de cablegate. Entrega un arreglo con las rutas a todos los archivos HTML encontrados.
- Separador (clase-separador.rb) Recibe la ruta a un archivo HTML y separa los campos de un cable del Cablegate de Wikileaks. AVISO: Si Wikileaks cambia el formato de Cablegate deberá realizar los ajustes necesarios para que tome los datos correctos del HTML.
- Alimentador (clase-alimentador.rb) Sirve para alimentar la base de datos PostgreSQL con los datos del cable del Cablegate de Wikileaks
- Buscar (clase-buscar.rb) Es para buscar un fragmento de texto en el contenido de los cables. Entrega un arreglo con las ID Referencias.
Los Programas
- ./sabueso.rb Este programa ejecuta la clase Sabueso y entrega un listado de los directorios y la cantidad de archivos HTML que encuentra, así como la sumatoria total.
- ./cable.rb Sirve para consultar un cable en la base de datos proporcionando su id_referencia.
- ./separador.rb Debe darle como parámetro la ruta absoluta o relativa a un archivo HTML del directorio cable del CableGate de Wikileaks; lo separa y muestra su información en pantalla. No deje de ejecutarlo un par de veces para verificar que se esté separando correctamente antes de alimentar la base de datos; ya que Wikileaks puede cambiar la estructura de los archivos HTML sin aviso.
- ./alimentador.rb Para alimentar la base de datos con los archivos HTML. Recibe un parámetro que es la ruta al directorio “cable” del cablegate. Rastreará todos los archivos HTML y los agregará a la base de datos. En la terminal mostrará la ruta al archivo, un contador de cables y el título del cable agregado.
- ./buscar.rb Es para buscar en el contenido de los cables. Recibe un parámetro que es el texto a buscar. Entrega las ID Referencias de los cables que tengan eso en su contenido.
Uso del programa
Haga un directorio donde depositaremos CableRuby y el Cablegate.
$ mkdir CableRuby $ cd CableRuby
Descargue CableRuby por el vínculo al final de esta página. Descomprima con:
$ tar xvf cableruby-1.0.tar.gz
Después de descargar el archivo comprimido del cablegate, descomprímalo con 7z. No olvide el parámetro “x” para reecrear la estructura de directorios. Use el nombre del archivo que haya bajado:
$ mkdir cablegate $ cd cablegate $ 7z x ../cablegate-201105291040.7z $ cd ..
Ejecute el separador para verificar que los archivos HTML son correctamente separados en su título, fechas, encabezado, contenido, etc.
$ ./separador.rb cablegate/cable/2002/02/02VATICAN819.html | less
Ejecute sabueso para contabilizar los archivos HTML.
$ ./sabueso.rb cablegate
Es momento de crear la base de datos ‘cablegate’ y ejecutar los comandos SQL que definen las tablas y las relaciones con:
$ createdb cablegate $ psql -d cablegate -f cablegate.sql
Alimente la base de datos con todos los cables. El tiempo que le toma a este comando dependerá de la velocidad de su equipo y de la cantidad de cables liberados. Al escribir esta guía, un equipo Pentium Dual Core le tomó casi dos horas alimentar la base de datos con poco más de 13,000 cables.
$ ./alimentador.rb cablegate
Pruebe visualizar un cable en la terminal, consultando la base de datos, con el programa cable.rb y la clave única del cable.
$ ./cable.rb 02VATICAN819 | less
Para buscar un fragmento de texto en el contenido de los cables, ejecute el programa buscar.rb con el texto que quiere encontrar como parámetro. Le entregará un listado de las claves, fechas y títulos.
$ ./buscar.rb "NUCLEAR PLANT" | less
Para mostrar en la terminal un fragmento de cable con un texto localizado, combine el programa cable.rb con el programa grep, de esta forma:
$ ./cable.rb 07TOKYO4442 | grep -C 5 -i "NUCLEAR PLANT"
Descargue CableRuby 1.1
![]() | cableruby-1.1.tar.gz |







