Questo è il primo di una serie in due parti sull'uso dei social media per individuare testimoni oculari su eventi importanti. In questo tutorial, ti guiderò attraverso l'uso dell'API di Instagram per trovare membri che potrebbero essere stati vicini a una ripresa di Macklemore del 2013 e a una scena dell'incidente di Seattle vicino a dove lavoro spesso.
Nella seconda parte, utilizzeremo l'API di Twitter per trovare i membri vicino a un altro evento recente. Mi occuperò anche di alcune questioni relative alla privacy relative ai social media e alla condivisione della geolocalizzazione. Puoi scaricare il codice per ogni episodio utilizzando il link del repository GitHub nella barra laterale. Potresti anche essere interessato alla mia serie Tuts +, Costruire con l'API di Twitter.
Parteciperò alle discussioni. Se hai una domanda o un suggerimento sull'argomento, per favore pubblica un commento qui sotto. Puoi anche raggiungermi su Twitter @reifman o mandarmi un'email direttamente.
I telefoni che portiamo in tasca registrano ogni nostra mossa, condividendola con fornitori di cellulari e spesso con società di software di terze parti le cui motivazioni generalmente si concentrano sul profitto. Ma non sono solo i telefoni e il GPS che ci espongono: compro quasi sempre acquisti con carte di credito, esponendo praticamente ogni aspetto della mia vita a fornitori di carte di credito, hacker o richieste legali.
Nel concorso Vanish di Wired del 2009, ho aiutato a guidare la cattura del giornalista Evan Ratliff. Dopo aver scritto di persone che fingono la loro morte, Ratliff ha cercato di scomparire per 30 giorni come parte di un esperimento. Se qualcuno potesse trovarlo di persona prima che scadesse il tempo, riceveranno un premio di $ 5.000. Usando un'applicazione di Facebook come un honeypot, sono stato in grado di indurre Ratliff a condividere ripetutamente la sua posizione tramite l'indirizzo IP, che ho poi verificato su un account Twitter che avevo scoperto stava usando. Con l'aiuto di altri partecipanti di Vanish su tutto il territorio nazionale, abbiamo chiamato a New Orleans un aiuto in loco - che si presentava sotto forma di pizzeria per celiaci (Ratliff era noto per essere celiaco) che è riuscito a rintracciarlo in città. In quella storia, il geotagging non era usato per trovarlo ma la geolocalizzazione degli indirizzi IP. Puoi leggere la storia di Ratliff anche qui.
Ma le applicazioni di social media sul nostro telefono utilizzano spesso il geotagging, lasciando una traccia che gli utenti non sempre anticipano.
Molte persone non si rendono conto di aver lasciato il geotagging sulle proprie app dei social media, pubblicizzando appieno la propria posizione in ogni post sui social media. Tra questi c'era il membro del Congresso GOP Aaron Schock. L'AP utilizzava i geotag del suo account Instagram per esporre il suo uso dei fondi dei contribuenti per voli privati stravaganti e altre attività lussuose. Vedi l'account Instagram espone il membro del Congresso che ha fatto esplodere fondi pubblici su voli e concerti privati.
Ecco un post Instagram di Schock di Patagonia: nota l'icona del geotag accanto a "Ghiacciaio Perito Moreno":
Quindi, l'analisi dei geotag può essere utilizzata per sempre. In questo tutorial, esplorerò come i giornalisti o le forze dell'ordine potrebbero individuare potenziali testimoni oculari su eventi importanti come un crimine o una scena dell'incidente usando i social media.
Tuttavia, il geotagging può essere utilizzato anche per il male. Ci sono sicuramente importanti implicazioni sulla privacy della sua integrazione nel nostro stile di vita digitale.
Gli scienziati informatici e gli educatori di Berkeley hanno costruito Ready o Not? app per mostrare come il geotagging su Twitter e Instagram registra ogni nostra mossa. Vedi anche Il tuo account Twitter dice troppo?
Ecco l'account Instagram di Congresmmen Schock in Ready o Not? app:
Nell'app è presente l'account Twitter di Steve Wozniak, cofondatore di Apple. Interessante che il viaggio del deputato sia ancora più diffuso di questo magnate della tecnologia.
Il geotagging su Instagram e Twitter è abbastanza accurato da permettere a qualcuno di determinare facilmente la tua residenza, il luogo di lavoro e la routine di viaggio.
Se non desideri condividere la tua posizione in modo che il pubblico possa vederlo o lasciare una traccia storica dei tuoi viaggi, Ready o Not? l'app offre collegamenti e guide per disattivare queste funzioni (cercare il collegamento sulla sua home page). Francamente, ho disattivato la mia e ti incoraggio anche a farlo.
Per quelli che non lo fanno, e molti non vorrebbero, i loro post sui social media potrebbero essere utili alle forze dell'ordine in cerca di testimoni di una scena del crimine o ai giornalisti che desiderano approfondire una storia. Ti guiderò attraverso come farlo.
In questo episodio, ti guiderò attraverso l'utilizzo dell'API di Instagram. Ho fornito un repository GitHub (il link si trova nella barra laterale) da scaricare per provare il codice. La mia app "Eyewitness" è scritta in Yii Framework per PHP, che puoi imparare di più sulla mia programmazione con la serie Yii2 per Tuts+.
Il processo di configurazione richiede che tu registri un account sviluppatore e un'applicazione con Instagram (e / o Twitter).
Se sei un'agenzia di protezione della legge o un'entità media che desidera maggiori informazioni, non esitate a contattarmi direttamente. Sarei anche interessato a qualsiasi uso riuscito di questo codice (per sempre) - farebbe una interessante storia di follow-up.
Iniziamo con Instagram. Se non hai ancora un account Instagram, scarica l'applicazione sul tuo telefono e registrati.
La ricerca di geolocalizzazione su Instagram è abbastanza sofisticata e offre un'interfaccia molto semplice per i nostri scopi. Come puoi vedere qui sotto, dobbiamo fornire una posizione latitudine e longitudine, un raggio geografico (distanza) e un intervallo di tempo (min_timestamp e max_timestamp):
Visita la pagina dell'API di Instagram per sviluppatori e fai clic Registra la tua applicazione:
Devi registrare un account sviluppatore:
Quindi puoi registrare una nuova applicazione per ricevere il tuo ID cliente:
Sul Gestisci i clienti dashboard, vedrai il tuo Identificativo cliente e Client Secret, quindi prendi nota di questi:
È possibile clonare il repository GitHub situato nella barra laterale per eseguire il nostro codice di esempio.
cd ~ / Sites / eyew https://github.com/link-in-sidebar/eyew.git
Avrai bisogno di configurare la tua configurazione locale di Apache. Io uso MAMP, quindi sembra qualcosa del genere:
cd / Applicazioni / MAMP / htdocs ln -s ~ / Sites / eyew / web / Applicazioni / MAMP / htdocs / eyew
È necessario creare un database localmente. Io uso PHPMyAdmin per crearne uno graficamente:
Quindi creo un file di inizializzazione in /var/secure/eyew.ini con le credenziali del mio database e ID e chiavi di Instagram. Ho recentemente descritto questo processo in un altro Tuts + tutorial: Protecting Your Keys From GitHub. Con umorismo, ho accidentalmente controllato la mia chiave Instagram durante il test (sospiro) e ho dovuto resettare le mie chiavi in seguito.
Il mio file ini è simile al seguente:
mysql_host = "localhost" mysql_db = "eyew" mysql_un = "xxxxxxxxx" mysql_pwd = "xxxxxxxxxxxx" instagram_client_id = "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7" instagram_client_secret = "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4"
Aggiorna il tuo compositore e le sue librerie di venditori:
aggiornamento del compositore sudo per autoaggiornamento di sudo compositore
Quindi inizializza il nostro database. La prima migrazione installa le tabelle utente per l'utente Yii2 per l'estensione Dmeroff dello sviluppatore e la seconda crea le nostre tabelle specifiche per app:
./ yii migrate / up --migrationPath = @ vendor / dektrium / yii2-user / migrations ./yii migrate / su
Di nuovo, puoi imparare di più sulla configurazione di un'applicazione Yii Framework nella mia serie di programmazione con Yii2 per Tuts+.
Ecco uno sguardo a ciò che dovresti vedere quando visiti il sito nel tuo browser:
Un momento è un luogo e un momento per cui stiamo cercando poster di social media che erano presenti. Consiste in un descrittore descrittivo, una posizione (latitudine e longitudine), un'ora di inizio e una durata (in minuti). Per il mio primo esempio, sto cercando gli utenti di Instagram che erano presenti alle riprese video di Macklemore la sera di mercoledì 24 luglio 2013 al punto di riferimento di Seattle, Dick's Drive In. La produzione di video e le folle che ne derivano chiudono l'area per ore.
Usando Google Maps, posso ottenere la latitudine e la longitudine GPS per Dick. È 47.6195 -122.321.
Dall'articolo, ho appreso che la produzione si interrompe all'1 del mattino. Ho intenzione di scegliere un orario di inizio delle 10 di sera e una durata di 3 ore.
Instagram accetta gli orari di inizio in GMT quindi ho codificato hardcoded un aggiustamento di modifica di tempo di otto ore dal mio fuso orario (PST). Potrebbe essere necessario modificare questo nel codice.
public function actionCreate () $ model = new Moment (); if ($ model-> load (Yii :: $ app-> request-> post ())) // converti data time in timestamp $ model-> start_at = strtotime ($ model-> start_at); // aggiusta per GMT $ model-> start_at + = (3600 * 8); // convalida il modulo rispetto alle regole del modello if ($ model-> validate ()) // tutti gli input sono validi $ model-> save (); return $ this-> redirect (['view', 'id' => $ model-> id]); else return $ this-> render ('create', ['model' => $ model,]); else return $ this-> render ('create', ['model' => $ model,]);
Per cercare su Instagram, facciamo clic sull'icona della fotocamera in basso:
Per implementare la mia ricerca multimediale su Instagram, sto usando il pacchetto Instagram PHP di Galen Grover. La ricerca effettiva è abbastanza semplice: $ instagram-> searchMedia ($ this-> latitude, $ this-> longitude, $ params);
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 come $ m) if (isset ($ m-> didascalia-> testo)) $ caption = $ m-> didascalia-> testo; else $ caption = "; $ i = new Gram (); $ i-> add ($ this-> id, $ m-> user-> username, $ m-> link, $ m-> created_time, $ m-> immagini-> miniatura-> url, $ caption);
I risultati sono memorizzati nella mia tabella Gram, che possiamo quindi consultare:
funzione pubblica add ($ moment_id, $ username, $ link, $ created_time, $ image_url, $ text) if (! Gram :: find () -> dove (['moment_id' => $ moment_id]) -> andWhere ( ['link' => $ link]) -> andWhere (['created_time' => $ created_time]) -> exists ()) $ i = new Gram (); $ i-> momento_id = $ momento_id; $ i-> username = $ username; $ i-> link = $ link; $ i-> created_time = $ created_time; $ i-> image_url = $ image_url; $ i-> text = $ text; $ I-> save ();
Ecco la prima pagina dei risultati della mia ricerca. Puoi vedere le folle e la limousine Cadillac di Macklemore salire. Chiaramente, colpirò il jackpot con la mia ricerca.
Quindi, a pagina tre, un utente di Instagram chiamato Joshua Lewis ha una foto di Macklemore che esce dalla Cadillac:
Ecco Macklemore:
Questo esempio mostra chiaramente la potenza fornita dall'API di ricerca di Instagram. In pochi istanti, abbiamo scoperto una varietà di testimoni oculari di un evento dell'estate 2013. Incredibile.
Se sei interessato, ecco un video di YouTube di quello scatto di Macklemore:
Per il mio secondo esempio, cercherò gli utenti di Instagram che si trovavano nella zona in prossimità di un tragico incidente vicino a dove stavo collaborando alcune settimane fa. Lo scooter motorizzato di una donna potrebbe aver funzionato male e ha perso il controllo, schiantandosi contro la coda di un'auto di passaggio (fortunatamente, è sopravvissuta). È successo di fronte al "Roastery" di Starbuck, una sfortunata nuova trappola per turisti qui a Seattle (non sono un fan).
Utilizzando Google Maps, possiamo vedere le coordinate GPS del roastery da 47.614264, -122.328008:
L'articolo ci dice che l'incidente è avvenuto intorno alle 17:00. Quindi useremo queste informazioni per creare il nostro momento:
Qui puoi vedere entrambi i momenti che abbiamo aggiunto:
Nel caso ti stavi chiedendo, l'icona della gomma cancella i risultati passati per quella ricerca del momento.
Ecco i risultati della nostra ricerca sugli incidenti di Starbucks Roastery. Nessuno ha postato le foto della scena dell'incidente - prevaleva la cortesia comune. Tuttavia, tutti questi utenti di Instagram erano nella zona in quel momento e potrebbe valere la pena contattare come testimoni.
Alcuni erano turisti come questa donna russa - ho postato la traduzione di Google del suo post di Instagram qui sotto:
Altri hanno visitato la sala degustazione del roastery Starbucks o un bar vicino e un ristorante di ostriche.
Spero che tu possa vedere sia l'oscurità che la luce della tecnologia di geotagging. Ci sono ovvi usi legittimi che queste tecnologie possono fornire per il bene, e possono ovviamente essere abusate.
Nel prossimo episodio, implementeremo i momenti di ricerca utilizzando l'API di Twitter.
Nel frattempo, non esitate a postare le vostre domande e commenti qui sotto. Puoi anche raggiungermi su Twitter @reifman o mandarmi un'email direttamente. Apprezzerei soprattutto l'ascolto da parte di giornalisti e forze dell'ordine che fanno uso di questi esempi.
Puoi anche sfogliare la mia pagina di istruttori + tutor per vedere altri tutorial che ho scritto.