<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Streaming dei dati di Twitter in una tabella di dati JMP
Scorri fino alla fine se vuoi solo il video.
Ho eseguito alcuni test minimi di questo JSL su Mac e Win, in JMP 11 e 12.Il video sfrutta le funzionalità di una versione futura di JMP, ma non lasciare che questo ti fermi.Aggiungi qui un commento sulla tua esperienza.Il JSL è nel file ZIP allegato.
Questo post tocca, con leggerezza, una serie di argomenti.
- Account Twitter
- dati in streaming
- manipolazione dei bit
- JSON
- Autorizzazione OAuth, firma
- arricciare
- coordinate della mappa
Panoramica: decomprimere il JSL in una directory.Crea un'app Twitter, copia le chiavi in un file JSL.(Windows) ottieni una copia di cURL e compila il percorso in MAIN.jsl.Esegui il file MAIN.jsl.
Inizio
Avrai bisogno di un account Twitter e devi leggere e comprendere i Termini di utilizzo di Twitter prima di iniziare.(I dati che raccogli in uno stream non ti appartengono e sono soggetti a restrizioni su come utilizzarli.Non ti darò consigli su cosa va bene o no.)
Usando il tuo account Twitter, usa https://apps.twitter.com/ per creare una nuova applicazione.Questa NON è un'app come quella di un cellulare.È un insieme di chiavi che consente a un programma di accedere allo stream di Twitter.Quel programma potrebbe essere un'app su un telefono cellulare, oppure potrebbe essere JSL o un programma Python come http://www.tweepy.org/ fornisce.(Ho iniziato con tweepy e poi ho seguito il percorso JSL.Tweepy o un'altra soluzione basata su Python potrebbe essere migliore di questa soluzione JSL.)
Fare clic su Nuovo per creare una nuova applicazione, creare un nome che nessun altro ha utilizzato, aggiungere una descrizione, inserire il nome del sito Web e lasciare vuoto l'URL di richiamata.Devi fornire il nome di un sito web, ma, come suggerisce, puoi usare un segnaposto.Leggi l'accordo, quindi fai clic su Crea applicazione Twitter.

Sei atterrato su una schermata con le schede; la terza scheda, Chiavi e token di accesso, è quella che desideri.

In alto troverai parte di ciò di cui hai bisogno, la Consumer Key e il Consumer Secret.Avrai bisogno della chiave e del segreto del consumatore.Vai avanti e inizia il tuo progetto JMP; ci saranno diversi file, quindi crea una directory, decomprimi i file JSL e modifica EncryptedKeys.JSL e inizia a riempirla:
// usa apps.twitter.com per creare una nuova applicazione.Copia le chiavi qui.
consumerKey = "Pnb...LAZ";
consumerSecret = "AF4C……………………………qNvXp";
Fare clic sul pulsante Crea il mio token di accesso in basso per ottenere gli ultimi due valori.

Copiali... Il token di accesso è tutto su una riga con un trattino...
accessToken = "3……………………………-………………………………………………am";
accessTokenSecret = "rc………………………HJ";
EncryptedKeys.JSL ha cinque righe, incluso il commento.Sarà incluso da un altro file; la sicurezza del computer su cui archivi EncryptedKeys.JSL è qualcosa che dovresti considerare.Due delle chiavi sono considerate pubbliche, ma due sono segreti che solo tu dovresti conoscere.Nessun altro ha bisogno delle chiavi pubbliche, quindi possono stare tutti nello stesso posto.
Visitare https://apps.twitter.com/ e assicurati che l'app esista, quindi puoi disconnetterti da Twitter.
Streaming su Twitter
Twitter offre altri modi per utilizzare il loro servizio https://dev.twitter.com/ che consentono di recuperare tweet specifici e creare nuovi tweet, ma lo streaming riguarda la raccolta di tweet in tempo reale utilizzando un filtro.Il filtro che Twitter può applicare è progettato per essere efficiente per i loro computer e potrebbe non fare esattamente quello che vuoi (ricorda quanto li stai pagando).Le query più interessanti riguardano parole chiave e aree geografiche; il risultato sarà l'unione (non l'intersezione) di tutti i termini di ricerca.Il video di esempio utilizzava "colazione", "pranzo" e "cena" senza un riquadro di delimitazione geografico.In tutto il mondo, che ha recuperato circa 3 tweet al secondo.Non è possibile restringere la ricerca a Londra con un rettangolo di selezione intorno a Londra; che proverà a restituire tutti i tweet da Londra, oltre a colazione, pranzo e cena da tutto il mondo.Non sono ancora chiaro la quantità di dati che Twitter trasmetterà in streaming; a un certo punto ho pensato che Twitter avrebbe rallentato, e a un altro punto ho pensato che Twitter avesse interrotto lo streaming se non fossi stato in grado di elaborare i dati abbastanza velocemente.Forse entrambi sono veri.In un precedente esperimento, ho selezionato per "Raleigh" e ho messo un riquadro di delimitazione intorno a Raleigh, NC.Ho ricevuto tweet su biciclette Raleigh rubate in tutto il mondo.
Attenzione
Dovrai eseguire il tuo filtro post-acquisizione e potresti voler creare il tuo elenco di parole che non ti piacciono.Se presenti in pubblico un elenco di tweet non censurati, sarai imbarazzato, o peggio.Ricorda anche che Twitter ha regole su come presentare i dati.
Selezione geografica
Questo frammento di JSL seleziona i termini della query e le posizioni geografiche.Poiché il codice si stava complicando, ho iniziato a utilizzare gli spazi dei nomi:
include ("PICK.jsl");
PICK:trackParm = "pranzo,cena,colazione"; // query predefinita
SELEZIONA:scelta(); // GUI per regolare la query

Il pulsante Aggiungi rettangolo ha aggiunto due rettangoli.I valori nello spazio dei nomi PICK verranno utilizzati in seguito per creare la query twitter.C'è una piccola quantità di capacità "e"; mangiare pranzo, cenare, fare colazione potrebbe essere utilizzato per selezionare tweet contenenti sia "mangia" che un pasto.Ma per lo più tutto è ORed (unione).
Più include
include("JSON.jsl"); // sottoinsieme della libreria JSON di Xan per analizzare un tweet
include("BITS.jsl"); // codice per la manipolazione dei bit
include("AUTH.jsl"); // codice per oauth
include("SIGN.jsl"); // codice per la firma
include("PARM.jsl"); // codice per creare il parm http per curl
Questi includono caricare un sacco di JSL ed eseguire alcuni piccoli controlli di integrità e autotest.BITS impiega un minuto per inizializzare alcune strutture di dati per rendere il codice più veloce in seguito, sii paziente mentre +++ stampa nella finestra di registro.JSON è preso da lavoro che Xan ha fatto prima ; lo stream di Twitter viene inviato in formato JSON.AUTH e SIGN contengono JSL che utilizza le chiavi crittografate per autenticarsi ("accesso") a Twitter.È complicato e utilizza un programma esterno già installato sul tuo computer per eseguire l'hash SHA1.Quando ho scritto le funzioni bit, ho pensato che avrei dovuto implementare l'hash SHA1, ma è anche complicato e sono felice di usarne uno che non deve essere sottoposto a debug.L'ultima inclusione, PARM, crea una stringa per cURL.
arricciare
Avrai bisogno di una copia di cURL.Esiste già su MAC.La gente di Windows può ottenerlo da http://curl.haxx.se/ dopo aver verificato prima con i tuoi sistemi le persone.https://en.wikipedia.org/wiki/CURL è un punto di partenza per le tue domande su cURL.ho scaricato Win64 x86_64 CABINA .(il tuo computer è I386, non IA64). Trascina e rilascia curl.exe sul desktop e assicurati che JMP sappia dove trovarlo (RunProgram non espanderà $DESKTOP, inserisci la risposta completa!):
cURLlocation="C:\Utenti\Utente\Desktop\curl.exe";
cURL è un'utilità della riga di comando a cui JMP può accedere tramite la funzione RunProgram.Il programma cURL effettuerà la connessione a Twitter e riporterà il flusso di tweet a JMP.
EseguiProgramma(eseguibile(cURLlocation),opzioni(cURLparms),
readFunction(Funzione( {questo},
buftxt ||= questo << read( blob );
processi();
Se( questo << isReadEOF,
Scrivi( Destra( Char( buftxt ), 100 ) ) );))
Le funzioni cURLparms e process() (usate sopra) sono tutto ciò che resta da spiegare.
cURLparms viene da PARM:curlParm(PICK:trackParm, PICK:locationParm ); che sta usando PICK (sopra) per capire quali termini tracciare e quali posizioni tracciare.La funzione curlParm nello spazio dei nomi PARM usa le variabili consumerKey...applicationTokenSecret (molto sopra) per eseguire la firma/autorizzazione per i termini e le posizioni specifici.
La funzione process prende i dati da buftxt e li inserisce in una tabella di dati.
Correre
Fatto!Metti i file allegati nella stessa directory con EncryptedKeys.JSL, apri main.jsl ed eseguilo.Si aprirà la finestra di dialogo; (basta premere OK la prima volta... per usare la ricerca che fa apparire i punti della mappa...) imposta alcuni termini di ricerca, o una piccola località, o forse entrambi.
Alla fine del JSL vedrai un ciclo che riavvia RunProgram quando si interrompe in modo imprevisto.Ritarda di 60 secondi per aiutare a prevenire l'abuso del sito Twitter se qualcosa va storto nello script.Le connessioni Internet potrebbero rimanere attive per giorni o potrebbero non funzionare più volte all'ora.È anche possibile che Twitter interrompa la connessione per vari motivi.Il ciclo for è inoltre limitato al riavvio solo un numero limitato di volte.
Gli script sono a malapena testati; chiedi se non funziona, grazie!
La seconda tabella dati e la mappa dipendono dai valori predefiniti di colazione/pranzo/cena nella finestra di dialogo di apertura.C'è qualche JSL hardcoded che sta cercando i tweet di colazione/pranzo/cena.Potresti rielaborarlo o ritagliarlo completamente.
Il pulsante STOP nella parte inferiore della mappa (probabilmente) interromperà con grazia lo script.Ho corretto un bug che poteva impedire a JMP su MAC di interrompersi con grazia per una versione futura; potrebbe essere necessario forzare l'uscita in JMP 11 o 12.
Presentazione (realizzazione di un video dalla tabella dati)
Dopo aver catturato per un po' i tweet di colazione/pranzo/cena, ci sono dati sufficienti per realizzare un video.Utilizzando le idee di diversi post recenti...In mancanza di uno standard di codifica a colori migliore, utilizzare il verde per iniziare la giornata e il rosso per interrompere la giornata e il blu per l'ora di pranzo.Sottoimposta le righe per mantenere solo quelle con i dati sulla posizione.Ho usato una formula per creare colonne xLon e yLat da coordinate o dal centro di placeBounding_boxCoordinates:

La formula imposta il valore su mancante se le coordinate non sono disponibili; solo il 5% circa dei tweet ha coordinate.
Questa formula di colonna ha creato una colonna per classificare i tweet, ma comunque diversa per ogni lingua:

Seguita da questa formula di colonna per combinare le categorie:

Per velocizzare la generazione dei frame video, caricare i dati sottoimpostati in matrici:
dt = open("$desktop/sha1/TwitterFeed3.jmp");
xLonVec=dt:xLon<
yLatVec=dt:yLat<
kindVec = dt:kindCode<
timeVec = dt:dateUTC<
chiudere(dt,nosave);
Crea un GraphBox per produrre i frame:
Nuova finestra ("Tweet sui pasti", // la dimensione dell'indicatore del grafico viene utilizzata per le posizioni dei tweet rosso/verde/blu
g = Graph Box( Frame Size( 1920, 900 ), <
);
C'è più JSL per impostare gli assi, aggiungi la mappa.La maggior parte del lavoro viene svolto in questo script grafico che elabora le matrici caricate dalla tabella dati:
g[framebox( 1 )] << addGraphicsScript(
trasparenza(.8);
for(idx=indicebasso,idx<=indicealto,idx++,
Marker(Color State(match(kindVec[idx],1,"green",2,"blue",3,"red") ),{xLonVec[idx], yLatVec[idx]});
)
);
E il codice del driver che fa ridisegnare la mappa con orari di inizio e fine diversi e cattura un'immagine:
nframes = secondi*30;// secondi a 30fps
inizio = min(timeVec);
fine = max(timeVec);
durata = fine - inizio;
delta = durata/nframes;
For( iframe = 0, iframe < nframes, iframe++,
mindate = inizio + (iframe - 0) * delta - 2*3600; // indietro di 2 ore.
maxdate = inizio + (iframe + 1) * delta + 3600; // avanti di 1 ora
lowIndex=floor(interpolate(mindate,timeVec,1::nrows(timeVec)));
highIndex=floor(interpolate(maxdate,timeVec,1::nrows(timeVec)));
g<
Aspetta( 1 );
g[framebox(1)]<
);
Alla fine avrai le cornici per produrre un video.Ho usato Blender (lunga curva di apprendimento, ma potente) per realizzare questo video di cinque minuti, che ha 377.765 tweet in 16 giorni che includono la festa del Ringraziamento negli Stati Uniti.C'erano 8.187.114 tweet in tutto, ma la maggior parte non includeva dati di latitudine e longitudine.Se lo faccio di nuovo, sottoporrò i dati man mano che vengono raccolti; la tabella completa da 2,5 GB è grande.
https://www.youtube.com/watch?v=N20KsrmdgOU Massimizza!
Nessun allegato? Clicca qui per vedere il post.