Spanish (Español) translation by Javier Salesi (you can also view the original English article)



Éste es la primera de dos partes de una serie sobre el uso de medios sociales para localizar testigos de eventos importantes. En éste tutorial, te guiaré en el uso de la API de Instagram para encontrar miembros que podrían haber estado cerca de donde Macklemore grabó un video en el 2013 y el lugar de un accidente en Seattle cerca de donde frecuentemente trabajo.
En la parte dos, usaremos la API de Twitter para encontrar miembros cerca de otro reciente evento. También abordaré algunos de los problemas de privacidad relacionados a medios sociales y los que puedes tener al compartir tu geolocalización. Puedes descargar código para cada episodio al usar el enlace al repositorio en Github en la barra lateral. Puedes también estar interesado en mi serie de Tuts+, Creando con la API de Twitter.
Yo sí participo en las discusiones. Si tienes una pregunta o sugerencia sobre el tópico, escribe un comentario en la sección de abajo por favor. También puedes seguirme en mi cuenta de Twitter @reifman o enviarme un correo electrónico directamente.
Usar el Geoetiquetado para Bien (y para Mal).
Los teléfonos que cargamos en nuestros bolsillos registran nuestro movimiento, compartiéndolo con compañías de telefonía celular y firmas de software de terceros cuyas motivaciones generalmente se enfocan en las ganancias. Pero no son solo celulares y GPS los que nos exponen-yo casi siempre hago compras con tarjetas de crédito, exponiendo casi cada aspecto de mi vida a proveedores de tarjetas de crédito, hackers, o requisitos legales.
Concurso de Vanish filtrado
En el concurso Vanish (Desaparecer) de la Revista Wired en el 2009, ayudé en la captura del periodista Evan Ratliff. Después de escribir sobre personas que fingieron sus muertes, Ratliff trató de desaparecerse durante 30 días como parte de un experimento. Si alguien pudiera encontrarlo en persona antes de que expirara el tiempo, recibiría un premio de $5,000 dólares. Usar una aplicación de Facebook como un honeypot, (herramienta para atraer a atacantes informáticos) pude atraer a Ratliff a compartir reiteradamente su ubicación vía dirección IP, la cual después verifiqué con una cuenta de Twitter que descubrí que él estaba usando. Con ayuda de otros participantes en el concurso a nivel nacional, solicitamos asistencia en Nueva Orleans-que llegó en la forma de un negocio que vende pizzas libre de gluten (Ratliff era conocida para ser celíaco) que logró seguirlo en la ciudad. En esa nota, el geoetiquetado no fue usado para encontrarlo sino para la geolocalización de la dirección IP. Puedes leer la nota de Ratliff aquí también.
Pero aplicaciones de medios sociales en nuestro teléfono frecuentemente hacen uso de geoetiquetado, dejando un rastro del que no siempre se percatan los usuarios.
Removiendo Basura con Geoetiquetas y Medios Sociales
Muchas personas no se dan cuenta que han dejado que los geoetiqueten en sus aplicaciones de medios sociales, publicando totalmente su ubicación con cada publicación de medios sociales. Ésto incluyó al congresista del Partido Republicano Aaron Schock. La AP utilizó sus geoetiquetas de su cuenta de instagram para divulgar su uso de fondos de contribuyentes para extravagantes vuelos privados y otras actividades lujosas. Ver Cuenta de Instagram expone a congresista que gastó fondos públicos en vuelos privados y conciertos.
Aquí hay una publicación en Instagram de Schock desde Patagonia-nota el ícono de geoetiqueta junto a "Perito Moreno Glacier":



Así, investigar geoetiquetas puede ser usado para bien. En éste tutorial, voy a explorar cómo periodistas o las fuerzas del orden podrían localizar potenciales testigos de importantes eventos como un delito o un accidente usando medios sociales.
Sin embargo, el geoetiquetado puede ser usado también para mal. Hay definitivamente implicaciones de privacidad importantes para su integración a nuestro estilo de vida digital.
Implicaciones de Privacidad
Científicos de informática de Berkeley y educadores crearon la aplicación Ready or not? (¿Listo o No?) para mostrar cómo el geoetiquetado en Twitter e Instagram registra cada movimiento que hacemos. Ver también ¿Está diciendo mucho tu Cuenta de Twitter?
Aquí está la cuenta de Instagram del congresista Schock en la aplicación Ready or Not?



Aquí está la cuenta de Twitter de Steve Wozniak cofundador de Apple en la aplicación. Interesante que el viaje del congresista sea incluso más divulgado que éste magnate de la tecnología.



El geoetiquetado en Instagram y Twitter es lo suficientemente exacto para permitir que alguien determine fácilmente su casa, lugar de trabajo e itinerario.
Desactivando el Geoetiquetado
Si no quieres compartir tu ubicación para que la vea el público, o dejar un rastro histórico de tus viajes, la aplicación Ready or Not? ofrece enlaces y guías para desactivar éstas funcionalidades (busca el enlace en su página de inicio). Francamente, he desactivado la mía y te animo a que también lo hagas.
Para los que no-y muchos no lo harán-sus publicaciones en medios sociales pueden ser útiles para las fuerzas del orden que buscan testigos de un delito o periodistas que desean investigar más profundamente una nota. Voy a guiarte en cómo hacer eso.
En éste episodio, te guiaré en el uso de la API de Instagram. He proporcionado un repositorio en Github (el enlace está en la barra lateral) para que lo descargues y pruebes el código. Mi "Aplicación de Eyewitness" (Testigo Ocular) está escrita en el Framework Yii para PHP, del que puedes aprender más en mi serie Programando con Yii2 para Tuts+.
El proceso de configuración requiere que registres una cuenta de desarrollador y aplicación con Instagram (y/o Twitter).
Si eres miembro de una agencia de las fuerzas del orden o entidad de medios que quisiera más información, por favor no dudes en contactarme directamente. También estaría interesado en cualquier uso exitoso de éste código (para bien)-harían una interesante nota posterior al respecto.
Usar la API de Instagram
Comencemos con Instagram. Si aún no tienes una cuenta de Instagram, descarga la aplicación en tu teléfono y accede.
Búsqueda de Medios en Instagram
La búsqueda de geolocalización en Instagram es muy sofisticada y ofrece una interfaz muy sencilla para nuestros fines. Como puedes ver abajo, necesitamos proporcionar una latitud y longitud de ubicación, un radio geográfico (distancia) y un rango de tiempo (min-timestamp y max_timestamp):



Comenzando
Visita la página de la API de Instagram para desarrolladores y da click en Register Your Application:



Necesitarás registrarte para una cuenta de desarrollador:



Luego puedes registrar una nueva aplicación para recibir tu ID de Cliente:



En el panel de Manage Clients, verás tu ID de Cliente y Secreto del Cliente, así que toma nota de éstos:



Instalar la Base de Código de Eyewitness (Testigo Ocular)
Puedes clonar el repositorio de Github ubicado en la barra lateral para ejecutar el código de ejemplo.
cd ~/Sites/eyew https://github.com/link-in-sidebar/eyew.git
Necesitarás establecer tu configuración local de Apache. Yo uso MAMP, así que se ve algo como ésto:
cd /Applications/MAMP/htdocs ln -s ~/Sites/eyew/web /Applications/MAMP/htdocs/eyew
Necesitas crear una base de datos localmente. Yo uso PHPMyAdmin para crear una gráficamente:



Posteriormente creo un archivo de inicialización en /var/secure/eyew.ini con mis credenciales de base de datos e ID's y claves de Instagram. Describí éste proceso recientemente en otro tutorial de Tuts+: Protegiendo Tus Claves de Github. Cómicamente, ingresé accidentalmente mi clave de Instagram durante el testeo (suspiro) y tuve que resetear mis claves posteriormente.
Mi archivo ini se ve así:
mysql_host="localhost" mysql_db="eyew" mysql_un="xxxxxxxxx" mysql_pwd="xxxxxxxxxxxx" instagram_client_id = "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7" instagram_client_secret = "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4"
Actualiza tu gestor de dependencias Composer y sus librerías en el directorio vendor:
sudo composer self-update sudo composer update
Después inicializa nuestra base de datos. La primera migración instala las tablas del usuario para nuestro Yii2-User por la extensión del desarrollador Demeroff, y la segunda crea las tablas específicas de nuestra aplicación:
./yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations ./yii migrate/up
De nuevo, puedes aprender sobre configurar una aplicación del Framework Yii en mi serie Programando con Yii2 para Tuts+.
La página de inicio de Eyewitness (Testigo Ocular)
Esto es lo que verías cuando visitas el sitio en tu navegador:



Define un Momento
Un momento es un lugar y hora del que buscamos publicaciones en medios sociales pertenecientes usuarios que estuvieron presentes en él. Consiste de un descriptor amigable, una ubicación (latitud y longitud), una hora de inicio y una duración (en minutos). Para mi primer ejemplo, busco usuarios de Instagram que estuvieron presentes en el la grabación del video de Macklemore la noche del miércoles 24 de Julio de 2013 en el famoso restaurante de hamburguesas Dick's Drive In de Seattle. La producción del video y la multitud que se congregó provocó el cierre del área durante horas.
Usando Google Maps, puedo obtener la altitud y longitud GPS del restaurante. Son 47.6195-122.321.



Del artículo, aprendí que la producción cerró a la 1 am. Voy a elegir una hora de inicio de las 10 pm y una duración de 3 horas.



Instagram acepta horas de inicio en GMT (Hora del Meridiano de Greenwich) así que he codificado un cambio de ajuste de ocho horas de mi huso horario (PST) (hora del Pacífico). Puede ser que necesites cambiar ésto en el código.
public function actionCreate() { $model = new Moment(); if ($model->load(Yii::$app->request->post())) { // convert date time to timestamp $model->start_at = strtotime($model->start_at); // adjust for GMT $model->start_at+=(3600*8); // validate the form against model rules if ($model->validate()) { // all inputs are valid $model->save(); return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('create', [ 'model' => $model, ]); } } else { return $this->render('create', [ 'model' => $model, ]); } }
Búsqueda de Momento en Instagram
Para buscar en Instagram, damos click en el ícono de la cámara de abajo:



Para implementar mi búsqueda de medios en Instagram, voy a usar el paquete PHP de Instagram de Galen Grover. La búsqueda real es simple: $instagram->sesarchMedia( $this->latitude, $this->longitude,$params );
<?php namespace app\models; use Yii; use yii\db\ActiveRecord; use app\models\Gram; use Instagram; ... public function searchInstagram() { $instagram = new Instagram\Instagram; $instagram->setClientID( \Yii::$app->params['instagram']['client_id'] ); $end_at = $this->start_at + ($this->duration*60); $params = array('min_timestamp'=>$this->start_at,'max_timestamp'=>$end_at,'distance'=>$this->distance,'count'=>50); $media = $instagram->searchMedia( $this->latitude, $this->longitude,$params ); foreach ($media as $m) { if (isset($m->caption->text)) { $caption = $m->caption->text; } else { $caption =''; } $i = new Gram(); $i->add($this->id,$m->user->username,$m->link,$m->created_time,$m->images->thumbnail->url,$caption); } }
Los resultados son guardados en mi tabla de Gram, en la que podemos navegar:
public function add($moment_id,$username,$link,$created_time,$image_url,$text) { if (!Gram::find()->where(['moment_id' => $moment_id])->andWhere(['link'=>$link])->andWhere(['created_time'=>$created_time])->exists()) { $i = new Gram(); $i->moment_id = $moment_id; $i->username = $username; $i->link = $link; $i->created_time = $created_time; $i->image_url = $image_url; $i->text = $text; $i->save(); } }
Navegar por los Resultados
Aquí está la primera página de resultados de mi búsqueda. Puedes ver la multitud y la limosina Cadillac de Macklemore circulando. Claramente, me saqué la lotería con mi búsqueda.



Luego en la página tres, un usuario de Instagram llamado Joshua Lewis toma una foto de Macklemore saliendo del Cadillac:



Aquí está Macklemore:



Éste ejemplo claramente muestra el poder que proporciona la API de búsqueda de Instagram. En solo unos momentos, encontramos una variedad de testigos en un evento del verano de 2013. Sorprendente.
Si estás interesado, aquí está un video de YouTube de la grabación del video de Macklemore:
Otro Ejemplo de Momento
Para mi segundo ejemplo, voy a buscar usuarios de Instagram que estuvieron en el área aproximadamente a la hora de un trágico accidente cerca de donde yo estaba trabajando hace unas semanas. Un scooter de una mujer podría haberse averiado y perdió el control, chocando contra la parte trasera de un automóvil que pasaba (afortunadamente ella sobrevivió). Ocurrió frente al local de tostado de café de Starbuck's, una nueva atracción turística poco afortunada aquí en Seattle (No soy un fanático).
Usando Google Maps, podemos ver que las coordenadas GPS del local, son 47.614264, -122.328008:



El artículo nos dice que el accidente sucedió alrededor de las 5 pm. Así que utilizaremos ésta información para crear nuestro Momento:



Aquí puedes ver los dos momentos que añadimos:



En caso que te preguntes, el ícono del borrador purga resultados pasados para esa búsqueda de momento.
Aquí están los resultados para nuestra búsqueda del local de Starbucks. Nadie publicó fotos del lugar del accidente-prevaleció la cortesía común. Sin embargo, todos éstos usuarios de Instagram estaban en el área en ese momento y podría valer la pena contactarlos como testigos.



Algunos eran turistas como ésta mujer rusa-he publicado la traducción de Google de su publicación en Instagram abajo:



Otros visitaron la sala de degustación del café de Starbucks o un bar cercano y un restaurante de mariscos.
Espero que puedas ver el lado claro y el lado oscuro de la tecnología de geoetiquetado. Hay obvios usos legítimos que éstas tecnologías pueden ofrecer para bien, y obviamente se puede abusar de ellos.
¿Qué sigue?
En el próximo episodio, vamos a implementar momentos de búsqueda utilizando la API de Twitter.
Por el momento, con toda confianza puedes escribir tus preguntas y comentarios abajo. También puedes contactarme por Twitter @reifman o por correo electrónico directamente. Especialmente agradecería escuchar a periodistas y elementos de las fuerzas del orden que hacen uso de éstos ejemplos.
Puedes también navegar por mi página instructor en Tuts+ para ver otros tutoriales que he escrito.
Enlaces relacionados
- API de Instagram para Desarrolladores
- Ready or Not? (Enseñando Privacidad)
- Cómo capturamos al desparecido Evan Ratliff, escritor de la Revista Wired
- Recursos para el Desarrollador de Yii2
¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!