<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Transmisión de datos de Twitter a una tabla de datos JMP
Desplázate hasta el final si solo quieres el video.
He realizado algunas pruebas mínimas de este JSL en Mac y Win, en JMP 11 y 12.El video aprovecha las características de una versión futura de JMP, pero no deje que eso lo detenga.Añade un comentario aquí sobre tu experiencia.El JSL se encuentra 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 en un archivo JSL.(Windows) obtenga una copia de cURL y complete la ruta en MAIN.jsl.Ejecute el archivo MAIN.jsl.
Empezar
Necesitará una cuenta de Twitter y deberá leer y comprender los Términos de uso de Twitter antes de comenzar.(Los datos que recopila en una transmisión no le pertenecen y vienen con restricciones sobre cómo puede 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 que un programa acceda 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 de Python como http://www.tweepy.org/ proporciona.(Empecé con tweepy y luego seguí el camino de 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 aplicación, 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 un nombre de sitio web, pero, como sugiere, puede usar un marcador de posición.Lea el acuerdo, 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 de Consumidor y el Secreto de Consumidor.Necesitará la clave y el secreto del consumidor.Anímate y comienza tu 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.Copie las claves aquí.
consumidorClave = "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 por 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 solo tú debes conocer.Nadie más necesita las claves públicas, por lo que todos pueden permanecer en un solo lugar.
Visitar https://apps.twitter.com/ y asegúrese de que la aplicación exista, luego puede cerrar sesión en Twitter.
Transmisión de Twitter
Twitter ofrece otras formas de usar su servicio https://dev.twitter.com/ que permiten recuperar tweets específicos y crear nuevos tweets, pero la transmisión se trata de recopilar tweets en tiempo real usando un filtro.El filtro que Twitter puede aplicar está diseñado para ser eficiente para sus computadoras y puede que no haga exactamente lo que usted quiere (recuerde cuánto les está pagando).Las consultas más interesantes son por palabras clave y áreas geográficas; el resultado será la unión (no intersección) de todos los términos de búsqueda.El video de ejemplo usó "desayuno", "almuerzo" y "cena" sin un cuadro delimitador geográfico.En todo el mundo, eso recuperó 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 Desayuno, Almuerzo y Cena de todo el mundo.Todavía no tengo claro cuántos datos transmitirá Twitter; en un momento pensé que Twitter reduciría la velocidad y en otro momento pensé que Twitter detendría la transmisión si no podía procesar los datos lo suficientemente rápido.Tal vez ambos sean ciertos.En un experimento anterior, seleccioné "Raleigh" y puse un cuadro delimitador alrededor de Raleigh, NC.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 gustan.Si presentas una lista de tuits sin censura en público, te avergonzarás, o algo peor.Recuerde también que Twitter tiene reglas sobre cómo puede presentar los datos.
Selección Geográfica
Este fragmento de JSL selecciona términos de consulta y ubicaciones geográficas.Debido a que el código se estaba complicando, comencé a usar espacios de nombres:
include(“PICK.jsl”);
PICK:trackParm = "almuerzo, cena, desayuno"; // consulta por defecto
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 utilizarán más adelante para crear la consulta de Twitter.Hay una pequeña cantidad de capacidad "y"; comer el almuerzo, comer la cena, comer el desayuno podría usarse para seleccionar tweets que contengan tanto "comer" como una comida.Pero sobre todo todo es ORed (unión).
Más incluye
incluir("JSON.jsl"); // subconjunto de la biblioteca JSON de Xan para analizar un tweet
include("BITS.jsl"); // código para manipulación de bits
include("AUTH.jsl"); // código para la autenticación
include("SIGNO.jsl"); // código para firmar
include("PARM.jsl"); // código para construir el parámetro http para curl
Esto incluye cargar un montón de JSL y hacer algunas pequeñas comprobaciones de cordura y autoevaluaciones.BITS tarda un minuto en inicializar algunas estructuras de datos para hacer un código más rápido más tarde, 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 usa EncryptedKeys para autenticarse ("iniciar sesión") en Twitter.Es complicado y utiliza un programa externo ya instalado en su computadora para hacer el hash SHA1.Cuando escribí las funciones de bit, pensé que tendría que implementar el hash SHA1, pero también es complicado y me complace usar uno que no tiene que ser depurado.El último include, PARM, crea una cadena para cURL.
rizo
Necesitará una copia de cURL.Ya existe en MAC.La gente de Windows puede obtenerlo de http://curl.haxx.se/ después de consultar primero con la gente de su sistema.https://en.wikipedia.org/wiki/CURL es un punto de partida para sus preguntas cURL.yo descargué Cabina Win64 x86_64 .(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\Escritorio\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 hará la conexión a Twitter y enviará el flujo de tweets a JMP.
EjecutarProgram(ejecutable(cURLubicación),opciones(cURLparms),
leerFuncion(Funcion( {esto},
buftxt ||= esto << read( blob );
proceso();
Si( esto << esReadEOF,
Escribir (Derecha (Char (buftxt), 100)) );))
Las funciones cURLparms y process() (utilizadas anteriormente) son todo lo que queda por explicar.
cURLparms proviene de PARM:curlParm( PICK:trackParm, PICK:ubicaciónParm ); que está usando PICK (muy arriba) para averiguar qué términos rastrear y qué ubicaciones rastrear.La función curlParm en el espacio de nombres PARM usa 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 con 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 ubicación pequeña, 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 guión.Las conexiones a Internet pueden permanecer activas durante días o pueden fallar varias veces por hora.También es posible que Twitter detenga la conexión por varias razones.El bucle for también está limitado a reiniciarse solo una pequeña cantidad 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 inicial.Hay algunos JSL codificados que están buscando 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) hará que el guión se detenga con elegancia.Solucioné un error que puede evitar que JMP en MAC se detenga correctamente para una versión futura; es posible que deba forzar la salida en JMP 11 o 12.
Presentación (hacer un video de la tabla de datos)
Después de capturar los tweets de desayuno/almuerzo/cena por un tiempo, hay suficientes datos 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 y 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.Usé 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 perdido si las coordenadas no están disponibles; solo alrededor del 5% de los tweets tienen coordenadas.
Esta fórmula de columna hizo una columna para categorizar los tweets, pero sigue siendo diferente para cada idioma:

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

Para acelerar la generación de cuadros de video, cargue los datos subdivididos en matrices:
dt = abrir("$escritorio/sha1/TwitterFeed3.jmp");
xLonVec=dt:xLon<
yLatVec=dt:yLat<
kindVec = dt:kindCode<
timeVec = dt:dateUTC<
cerrar(dt,nosave);
Haz un GraphBox para producir los marcos:
Nueva ventana ("Meal Tweets", // el tamaño del marcador del gráfico se usa para las ubicaciones de tweet rojo/verde/azul
g = Cuadro de gráfico( Tamaño de fotograma( 1920, 900 ), <
);
Hay más JSL para establecer los ejes, agregue 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 )] << addGraphicsScript(
transparencia (.8);
for(idx=Índicebajo,idx<=Índicealto,idx++,
Marker( Color State( match(kindVec[idx],1,"green",2,"blue",3,"red") ),{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 30fps
inicio = min(timeVec);
end = 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.
maxdate = inicio + (iframe + 1) * delta + 3600; // avanzar 1 hora
lowIndex=piso(interpolar(mindate,timeVec,1::nrows(timeVec)));
highIndex=piso(interpolar(maxdate,timeVec,1::nrows(timeVec)));
g<
Espera( 1 );
g[framebox(1)]<
);
Eventualmente tendrás los marcos para producir un video.Usé 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 de EE. UU.Hubo 8.187.114 tuits en total, pero la mayoría no incluía datos de latitud y longitud.Si vuelvo a hacer esto, subdividiré los datos a medida que se recopilan; la tabla 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.