<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Transmitir datos de Twitter a una tabla de datos JMP
Desplázate hasta el final si solo quieres el vídeo.
Hice algunas pruebas mínimas de este JSL en Mac y Win, en JMP 11 y 12.El vídeo aprovecha las funciones de una versión futura de JMP, pero no dejes que eso te detenga.Añade aquí un comentario sobre tu experiencia.El JSL está en el archivo ZIP adjunto.
Esta publicación toca, a la ligera, un montón de temas.
- Cuenta de Twitter
- transmisión de datos
- manipulación de bits
- JSON
- Autorización OAuth, firma
- rizo
- coordenadas del mapa
Descripción general: descomprima el JSL en un directorio.Cree una aplicación de Twitter, copie las claves a un archivo JSL.(Windows) obtenga una copia de cURL y complete la ruta en MAIN.jsl.Ejecute el archivo MAIN.jsl.
Comenzar
Necesitará una cuenta de Twitter y deberá leer y comprender los Términos de uso de Twitter antes de comenzar.(Los datos que recopilas en una transmisión no te pertenecen y tienen restricciones sobre cómo puedes usarlos.No te daré consejos sobre lo que está bien o no).
Usando su cuenta de Twitter, use https://apps.twitter.com/ para crear una nueva aplicación.Esta NO es una aplicación como la que tiene un teléfono celular.Es un conjunto de claves que permite a un programa acceder a la transmisión de Twitter.Ese programa podría ser una aplicación en un teléfono celular, o podría ser JSL, o un programa Python como http://www.tweepy.org/ proporciona.(Empecé con tweepy y luego seguí el camino JSL.Tweepy u otra solución basada en Python podría ser mejor que esta solución JSL).
Haga clic en Nuevo para crear una nueva solicitud, invente un nombre que nadie más haya usado, agregue una descripción, complete el nombre de su sitio web y deje la URL de devolución de llamada en blanco.Debe proporcionar el nombre de un sitio web, pero, como sugiere, puede utilizar un marcador de posición.Lea el acuerdo y luego haga clic en Crear aplicación de Twitter.

Aterrizaste en una pantalla con pestañas; la tercera pestaña, Claves y tokens de acceso, es la que desea.

En la parte superior encontrarás parte de lo que necesitas, la Clave del Consumidor y el Secreto del Consumidor.Necesitará la clave del consumidor y el secreto.Continúe y comience su proyecto JMP; Habrá varios archivos, así que cree un directorio, descomprima los archivos JSL, edite EncryptedKeys.JSL y comience a completarlo:
// usa apps.twitter.com para crear una nueva aplicación.Copia las claves aquí.
consumerKey = "Pnb…LAZ";
consumidorSecreto = "AF4C…………………………qNvXp";
Haga clic en el botón Crear mi token de acceso en la parte inferior para obtener los dos últimos valores.

Cópielos... El token de acceso está todo en una línea con un guión...
accessToken = "3…………………………-………………………………………………am";
accessTokenSecret = "rc…………………………HJ";
EncryptedKeys.JSL tiene cinco líneas, incluido el comentario.Será incluido en otro archivo; La seguridad de la computadora en la que almacena EncryptedKeys.JSL es algo que debe considerar.Dos de las claves se consideran públicas, pero dos son secretos que sólo tú debes conocer.Nadie más necesita las claves públicas, por lo que todas pueden permanecer en un solo lugar.
Visita https://apps.twitter.com/ y asegúrese de que la aplicación exista, luego podrá cerrar sesión en Twitter.
Transmisión de Twitter
Twitter ofrece otras formas de utilizar su servicio https://dev.twitter.com/ que permiten recuperar tweets específicos y crear nuevos tweets, pero la transmisión consiste en recopilar tweets en tiempo real utilizando un filtro.El filtro que Twitter puede aplicar está diseñado para ser eficiente para sus computadoras y puede no hacer exactamente lo que usted desea (recuerde cuánto les está pagando).Las consultas más interesantes son las de palabras clave y áreas geográficas; el resultado será la unión (no la intersección) de todos los términos de búsqueda.El vídeo de ejemplo utilizaba "desayuno", "almuerzo" y "cena" sin un cuadro delimitador geográfico.En todo el mundo, se recuperaron alrededor de 3 tweets por segundo.No es posible limitar la búsqueda a Londres con un cuadro delimitador alrededor de Londres; que intentará devolver todos los tweets de Londres, así como los desayunos, almuerzos y cenas de todo el mundo.Todavía no tengo claro cuántos datos transmitirá Twitter; en un momento pensé que Twitter se desaceleraría, y en otro momento pensé que Twitter detendría la transmisión si no podía procesar los datos lo suficientemente rápido.Quizás ambas cosas sean ciertas.En un experimento anterior, seleccioné "Raleigh" y puse un cuadro delimitador alrededor de Raleigh, Carolina del Norte.Recibí tweets sobre bicicletas Raleigh robadas en todo el mundo.
Precaución
Deberá realizar su propio filtrado posterior a la captura y es posible que desee crear su propia lista de palabras que no le gusten.Si presentas en público una lista de tweets sin censura, te avergonzarás o algo peor.Recuerde también que Twitter tiene reglas sobre cómo presentar los datos.
Selección geográfica
Este fragmento de JSL selecciona términos de consulta y ubicaciones geográficas.Como el código se estaba volviendo complicado, comencé a usar espacios de nombres:
incluir(“PICK.jsl”);
PICK:trackParm = "almuerzo, cena, desayuno"; // consulta predeterminada
ELEGIR:elegir(); // GUI para ajustar la consulta

El botón Agregar rectángulo agregó dos rectángulos.Los valores en el espacio de nombres PICK se usarán más adelante para crear la consulta de Twitter.Hay una pequeña cantidad de capacidad "y"; almorzar, cenar, desayunar podría usarse para seleccionar tweets que contengan tanto “comer” como una comida.Pero sobre todo todo es OR (unión).
Más incluye
incluir("JSON.jsl"); // subconjunto de la biblioteca JSON de Xan para analizar un tweet
incluir("BITS.jsl"); // código para manipulación de bits
incluir("AUTH.jsl"); // código para oauth
incluir("SIGN.jsl"); // código para firmar
incluir("PARM.jsl"); // código para construir el parámetro http para curl
Esto incluye cargar un montón de JSL y realizar algunas pequeñas comprobaciones de cordura y autopruebas.BITS tarda un minuto en inicializar algunas estructuras de datos para crear un código más rápido más adelante. Tenga paciencia mientras +++ se imprime en la ventana de registro.JSON se toma de trabajo que Xan hizo antes ; la transmisión de Twitter se envía en formato JSON.AUTH y SIGN contienen JSL que utiliza EncryptedKeys para autenticarse (“iniciar sesión”) en Twitter.Es complicado y utiliza un programa externo ya instalado en su computadora para realizar el hash SHA1.Cuando escribí las funciones de bits, pensé que tendría que implementar el hash SHA1, pero también es complicado y me alegro de usar uno que no tenga que ser depurado.La última inclusión, PARM, crea una cadena para cURL.
rizo
Necesitará una copia de cURL.Ya existe en MAC.La gente de Windows puede obtenerlo desde http://curl.haxx.se/ después de consultar primero con el personal de sistemas.https://en.wikipedia.org/wiki/CURL es un punto de partida para sus preguntas sobre cURL.yo descargué Win64 x86_64 CAB .(su computadora es I386, no IA64). Arrastre y suelte curl.exe en el escritorio y asegúrese de que JMP sepa dónde encontrarlo (RunProgram no expandirá $DESKTOP, complete la respuesta completa):
cURLlocation="C:\Usuarios\Usuario\Desktop\curl.exe";
cURL es una utilidad de línea de comandos a la que JMP puede acceder a través de la función RunProgram.El programa cURL establecerá la conexión con Twitter y enviará el flujo de tweets a JMP.
EjecutarPrograma(ejecutable(cURLlocation),opciones(cURLparms),
leerFunción(Función( {esto},
buftxt ||= esto << leer( blob );
proceso();
Si (este << esReadEOF,
Escribir( Derecha( Char( buftxt ), 100 ) ) );))
Las funciones cURLparms y Process() (usadas arriba) son todo lo que queda por explicar.
cURLparms proviene de PARM:curlParm( PICK:trackParm, PICK:locationParm ); que utiliza PICK (muy arriba) para determinar qué términos rastrear y qué ubicaciones rastrear.La función curlParm en el espacio de nombres PARM utiliza las variables consumerKey...applicationTokenSecret (muy arriba) para realizar la firma/autorización para los términos y ubicaciones específicos.
La función de proceso toma datos de buftxt y los coloca en una tabla de datos.
Correr
¡Hecho!Coloque los archivos adjuntos en el mismo directorio que EncryptedKeys.JSL, abra main.jsl y ejecútelo.Se abrirá el cuadro de diálogo; (simplemente presione OK la primera vez... para usar la búsqueda que hace que aparezcan los puntos del mapa...) establezca algunos términos de búsqueda, o una pequeña ubicación, o tal vez ambos.
Al final del JSL, verá un bucle que reinicia RunProgram cuando se detiene inesperadamente.Se retrasa durante 60 segundos para ayudar a evitar el abuso del sitio de Twitter si algo sale mal en el script.Las conexiones a Internet pueden permanecer activas durante días o fallar varias veces por hora.También es posible que Twitter detenga la conexión por varios motivos.El bucle for también está limitado a reiniciarse solo un pequeño número de veces.
Los guiones apenas se prueban; pregunta si no funciona, gracias!
La segunda tabla de datos y el mapa dependen de los valores predeterminados de desayuno/almuerzo/cena en el cuadro de diálogo de apertura.Hay un JSL codificado que busca los tweets de desayuno/almuerzo/cena.Podrías volver a trabajarlo o cortarlo por completo.
El botón DETENER en la parte inferior del mapa (probablemente) detendrá el script con elegancia.Solucioné un error que podía impedir que JMP en MAC se detuviera correctamente para una versión futura; es posible que tengas que forzar el cierre en JMP 11 o 12.
Presentación (realizar un vídeo a partir de la tabla de datos)
Después de capturar los tweets del desayuno/almuerzo/cena por un tiempo, hay datos suficientes para hacer un video.Usando ideas de varias publicaciones recientes...A falta de un mejor estándar de codificación de colores, use verde para comenzar el día, rojo para detener el día y azul para la hora del almuerzo.Subconjunto de las filas para mantener solo las que tienen datos de ubicación.Utilicé una fórmula para crear columnas xLon e yLat a partir de coordenadas o del centro de placeBounding_boxCoordinates:

La fórmula establece el valor como faltante si las coordenadas no están disponibles; Sólo alrededor del 5% de los tweets tienen coordenadas.
Esta fórmula de columna creó una columna para categorizar los tweets, pero aún es diferente para cada idioma:

Seguido de esta fórmula de columna para combinar categorías:

Para acelerar la generación de fotogramas de vídeo, cargue los datos subconjuntos en matrices:
dt = open("$desktop/sha1/TwitterFeed3.jmp");
xLonVec=dt:xLon<
yLatVec=dt:yLat<
kindVec = dt:kindCode<
timeVec = dt:dateUTC<
cerrar(dt,nosave);
Haz un GraphBox para producir los fotogramas:
Nueva ventana( "Tweets de comidas", // el tamaño del marcador del gráfico se utiliza para las ubicaciones de los tweets rojo/verde/azul
g = Cuadro de gráfico( Tamaño de fotograma( 1920, 900 ), <
);
Hay más JSL para configurar los ejes, agregar el mapa.La mayor parte del trabajo se realiza en este script gráfico que procesa las matrices cargadas desde la tabla de datos:
g[framebox( 1 )] << agregarGraphicsScript(
transparencia(.8);
para(idx=índice bajo,idx<=índice alto,idx++,
Marcador( Estado de color( coincidencia(kindVec[idx],1,"verde",2,"azul",3,"rojo") ),{xLonVec[idx], yLatVec[idx]} );
)
);
Y el código del controlador que hace que el mapa se vuelva a dibujar con diferentes horas de inicio y finalización y captura una imagen:
nframes = segundos*30;// segundos a 30 fps
inicio = min(tiempoVec);
fin = max(timeVec);
duración = fin - inicio;
delta = duración / nframes;
Para (iframe = 0, iframe < nframes, iframe++,
mindate = inicio + (iframe - 0) * delta - 2*3600; // atrás 2 horas.
fecha máxima = inicio + (iframe + 1) * delta + 3600; // adelantar 1 hora
lowIndex=floor(interpolate(mindate,timeVec,1::nrows(timeVec)));
highIndex=floor(interpolate(maxdate,timeVec,1::nrows(timeVec)));
g<
Espere (1);
g[framebox(1)]<
);
Con el tiempo tendrás los fotogramas para producir un vídeo.Utilicé Blender (curva de aprendizaje larga, pero poderosa) para hacer este video de cinco minutos, que tiene 377,765 tweets durante 16 días que incluyen el feriado de Acción de Gracias en Estados Unidos.Hubo 8.187.114 tweets en total, pero la mayoría no incluía datos de latitud y longitud.Si hago esto nuevamente, subdividiré los datos a medida que se recopilen; la mesa completa de 2,5 GB es grande.
https://www.youtube.com/watch?v=N20KsrmdgOU ¡Maximizar!
¿No hay adjuntos? haga clic aquí para ver la publicación.