Det här är den första i tvådelade serier om att använda sociala medier för att lokalisera ögonvittnen till viktiga händelser. I den här handledningen guidar jag dig genom att använda Instagram API för att hitta medlemmar som kan ha varit nära en 2013 Macklemore video shoot och en Seattle olycksplats nära mig där jag ofta arbetar.
I del två använder vi Twitter API för att hitta medlemmar nära en ny händelse. Jag tar också upp några av de sekretessproblem som är relaterade till sociala medier och delar din geografiska plats. Du kan ladda ner koden för varje avsnitt genom att använda länk GitHub-arkivet i sidofältet. Du kanske också är intresserad av min Tuts + -serie, Bygg med Twitter-API.
Jag deltar i diskussionerna. Om du har en fråga eller ett ämnesförslag, vänligen skriv en kommentar nedan. Du kan också nå mig på Twitter @ reifman eller maila mig direkt.
De telefoner som vi bär i våra fickor registrerar alla våra drag, dela den med cellleverantörer och ofta tredje part programvaruföretag vars motivationer i allmänhet fokuserar på vinst. Men det är inte bara telefoner och GPS som exponerar oss. Jag gör nästan alltid inköp med kreditkort, vilket visar nästan alla aspekter av mitt liv på kreditkortsleverantörer, hackare eller juridiska förfrågningar.
I Wires 2009 Vanish Contest hjälpte jag mig att leda fångsten av journalisten Evan Ratliff. Efter att ha skrivit om människor som förfalskade sina död försökte Ratliff försvinna i 30 dagar som en del av ett experiment. Om någon kunde hitta honom personligen innan tiden löpte ut, skulle de få ett pris på $ 5 000. Med hjälp av en Facebook-applikation som en honeypot kunde jag locka Ratliff till upprepade gånger att dela sin plats via IP-adress, vilket jag sedan verifierade mot ett Twitter-konto som jag hade upptäckt att han använde. Med hjälp av andra Vanish deltagare rikstäckande, ringde vi in till hjälp på marken i New Orleans - som kom i form av en glutenfri pizzaaffär (Ratliff var känd för att vara celiac) som lyckades spåra honom i staden. I den berättelsen användes geotagning inte för att hitta honom utan geo-adress för IP-adress. Du kan också läsa Ratliffs historia här också.
Men sociala medier applikationer på vår telefon använder ofta geotagging, vilket leder till ett spår som användarna inte alltid förutser.
Många människor inser inte att de har lämnat geotagging på sina sociala medier, fullt ut publicerar sin plats med varje social media post. Detta inkluderade GOP-kongressen Aaron Schock. AP tillämpade hans Instagram-kontoens geotags för att avslöja sin användning av skattebetalarnas medel för extravaganta privata flygningar och andra lyxiga aktiviteter. Se Instagram konto exponerar kongressledare som blåste offentliga medel på privata flyg och konserter.
Här är ett Instagram-inlägg av Schock från Patagonia-märka geotagikonen bredvid "Perito Moreno glaciären":
Så, undersöka geotags kan användas för gott. I denna handledning kommer jag att undersöka hur journalister eller brottsbekämpning kan hitta potentiella ögonvittnen till viktiga händelser som ett brott eller olycksplats med sociala medier.
Geotagging kan dock också användas för ondska. Det finns definitivt viktiga integritetsaspekter av integrationen i vår digitala livsstil.
Berkeley datavetenskapare och lärare byggde redo eller inte? app för att visa hur geotagning i Twitter och Instagram spelar in alla våra drag. Se även Är ditt Twitter-konto som säger för mycket?
Här är Congresmmen Schocks Instagram-konto i Klar eller Inte? app:
Här är Apple grundare Steve Wozniaks Twitter konto i appen. Intressant att kongressens resa är ännu mer utbredd än den här tekniken.
Geotagging på Instagram och Twitter är tillräckligt exakt för att någon lätt ska kunna bestämma din bostad, arbetsplats och resrutiner.
Om du inte vill dela din plats för allmänheten att se, eller att lämna ett historiskt spår av dina resor, är du redo eller inte? app erbjuder länkar och guider för att stänga av dessa funktioner (leta efter länken på sin hemsida). Uppriktigt sagt, jag har stängt av och jag uppmuntrar dig att göra det också.
För dem som inte-och många inte-deras sociala medier kan vara användbara för brottsbekämpning som söker vittnen till en brottsplats eller journalister som vill gräva djupare in i en historia. Jag ska vägleda dig genom hur du gör det.
I det här avsnittet guidar jag dig genom att använda Instagram API. Jag har gett ett GitHub-arkiv (länken finns i sidofältet) för att du ska ladda ner för att prova koden. Mitt "Eyewitness app" är skrivet i Yii Framework for PHP, som du kan lära dig mer om i min programmering med Yii2-serien för Tuts+.
Konfigurationsprocessen kräver att du registrerar ett utvecklarkonto och -program med Instagram (och / eller Twitter).
Om du är en brottsbekämpande myndighet eller medieföretag som vill ha mer information, var god kontakta mig direkt. Jag skulle också vara intresserad av några framgångsrika användningar av denna kod (för gott) -de göra en intressant uppföljningsberättelse.
Låt oss börja med Instagram. Om du inte har något Instagram-konto, ladda ner programmet på din telefon och registrera dig.
Geolocation-sökningen på Instagram är ganska sofistikerad och erbjuder ett mycket enkelt gränssnitt för våra ändamål. Som du kan se nedan måste vi tillhandahålla en plats latitud och longitud, en geografisk radie (distans) och ett tidsintervall (min_timestamp och max_timestamp):
Besök Instagram API-sidan för utvecklare och klicka på Registrera din ansökan:
Du måste anmäla dig till ett utvecklarkonto:
Då kan du registrera en ny applikation för att ta emot ditt klient-ID:
På Hantera klienter instrumentpanelen ser du din Klient ID och Kundhemlighet, så notera dessa:
Du kan klona GitHub-förvaret som finns i sidofältet för att köra vår provkod.
cd ~ / Sites / eyew https://github.com/link-in-sidebar/eyew.git
Du måste konfigurera din lokala Apache-konfiguration. Jag använder MAMP, så det ser något ut så här ut:
cd / applikationer / MAMP / htdocs ln -s ~ / webbplatser / eyew / web / applikationer / MAMP / htdocs / eyew
Du måste skapa en databas lokalt. Jag använder PHPMyAdmin för att skapa en grafiskt:
Då skapar jag en initialiseringsfil i /var/secure/eyew.ini med mina databasuppgifter och Instagram-ID och nycklar. Jag beskrev denna process nyligen i en annan Tuts + handledning: Skydda dina nycklar från GitHub. Humoristiskt kontrollerade jag av misstag i min Instagram-nyckel under testning (suck) och var tvungen att återställa mina nycklar efteråt.
Min ini-fil ser ut så här:
mysql_host = "localhost" mysql_db = "eyew" mysql_un = "xxxxxxxxx" mysql_pwd = "xxxxxxxxxxxx" instagram_client_id = "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7" instagram_client_secret = "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4"
Uppdatera kompositören och dess leverantörsbibliotek:
sudo kompositör självuppdatering sudo kompositör uppdatering
Starta sedan vår databas. Den första migreringen installerar användartabeller för vår Yii2-användare av utvecklaren Dmeroff-tillägg och den andra skapar våra appspecifika tabeller:
./ yii migrera / upp - migrationPath = @ leverantör / dektrium / yii2-användare / migreringar ./yii migrera / upp
Återigen kan du lära dig mer om att skapa en Yii Framework-applikation i min programmering med Yii2-serien för Tuts+.
Här är en titt på vad du bör se när du besöker webbplatsen i din webbläsare:
En stund är en plats och tid för vilken vi letar efter sociala medier affischer som var närvarande. Den består av en vänlig deskriptor, en plats (latitud och longitud), en starttid och en varaktighet (i minuter). För mitt första exempel söker jag Instagram-användare som var närvarande vid Macklemores videospelning på onsdagen den 24 juli 2013 i Seattles landmärke Dick's Drive In. Videoproduktionen och efterföljande folkmassor stängde av området i timmar.
Med Google Maps kan jag få GPS-latitud och longitud för Dick's. Det är 47.6195 -122.321.
Från artikeln lärde jag mig att produktionen stängdes klockan 1 på morgonen. Jag ska välja en starttid på 10 och en varaktighet på 3 timmar.
Instagram accepterar starttider i GMT så jag har hårddiskad en åtta timmars ändring av tidsförändringen från min tidszon (PST). Du kan behöva ändra detta i koden.
public function actionCreate () $ model = new Moment (); om ($ model-> load (Yii :: $ app-> request-> post ())) // konvertera datum tid till tidsstämpel $ model-> start_at = strtotime ($ model-> start_at); // justera för GMT $ modell-> start_at + = (3600 * 8); // validera formuläret mot modellregler om ($ model-> validate ()) // alla inmatningar är giltiga $ model-> save (); returnera $ this-> omdirigering (['view', 'id' => $ model-> id]); annars returnera $ this-> render ('create', ['model' => $ modell,]); else return $ this-> render ('create', ['model' => $ modell,]);
För att söka Instagram klickar vi på kamerans ikon nedan:
För att implementera min mediasökning på Instagram använder jag Galen Grovers Instagram PHP-paket. Den faktiska sökningen är ganska enkel: $ instagram-> searchMedia ($ this-> latitude, $ this-> longitud, $ 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, 'avstånd' => $ this-> avstånd, 'count' => 50); $ media = $ instagram-> searchMedia ($ this-> latitude, $ this-> longitud, $ params); foreach ($ media as $ m) if (isset ($ m-> caption-> text)) $ caption = $ m-> textning-> text; andra $ caption = "; $ i = nytt gram (); $ i-> lägg till ($ this-> id, $ m-> användarnamn-> användarnamn, $ m-> länk, $ m-> created_time, $ m-> images-> thumbnail-> url, $ caption);
Resultaten lagras i min Gram-tabell, som vi sedan kan bläddra:
public function add ($ moment_id, $ användarnamn, $ link, $ created_time, $ image_url, $ text) if (! Gram :: find () -> where (['moment_id' => $ moment_id]) -> ochWhere ['link' => $ link]) -> ochWhere (['created_time' => $ created_time]) -> existerar ()) $ i = nytt gram (); $ i-> moment_id = $ moment_id; $ i-> användarnamn = $ användarnamn; $ i-> länk = $ länk; $ i-> created_time = $ created_time; $ i-> image_url = $ image_url; $ i-> text = $ text; $ I-> Spara ();
Här är den första sidan av resultaten från min sökning. Du kan se massorna och Macklemores Cadillac limo kör upp. Klart slog jag jackpotten med min sökning.
Sedan på sidan tre, har en Instagram-användare som heter Joshua Lewis ett skott av Macklemore som går ut ur Cadillac:
Här är Macklemore:
Detta exempel visar tydligt den kraft som Instagram-sök API ger. På bara några ögonblick hittade vi en mängd ögonvittnen till ett evenemang från sommaren 2013. Fantastiskt.
Om du är intresserad, här är en YouTube-video av den Macklemore-bilden:
För mitt andra exempel ska jag leta efter Instagram-användare som var i området runt tiden för en tragisk olycka nära när jag arbetade med några veckor sedan. En kvinnas motoriserade scooter kan ha funktionsfel och hon förlorade kontrollen, kraschade i svansänden på en passande bil (tack och lov, hon överlevde). Det hände framför Starbucks "Roastery", en olycklig ny turistfälla här i Seattle (jag är inte en fan).
Med hjälp av Google Maps kan vi se GPS-koordinaterna för roasteriet till 47.614264, -122.328008:
Artikeln berättar att olyckan inträffade runt klockan 17.00. Så vi använder denna information för att skapa vår stund:
Här kan du se båda ögonblicket vi har lagt till:
Om du undrar, raderar ikonen suddgummi tidigare resultat för det ögonblickssökandet.
Här är resultaten för vår Starbucks Roastery-olyckssökning. Ingen postade bilder av olycksplatsen - allmänt rådighet rådde. Emellertid var alla dessa Instagram-användare i området vid den tiden och kan vara värda att kontakta som vittnen.
Några var turister som den här ryska kvinnan-jag har lagt upp Google-översättning av hennes Instagram-post nedan:
Andra besökte Starbucks rosteryprovningslokalen eller en närliggande bar och ostronrestaurang.
Jag hoppas att du kan se både mörkret och ljuset från geotagging-tekniken. Det finns uppenbara legitima användningsområden som dessa tekniker kan ge bra, och de kan uppenbarligen missbrukas.
I nästa avsnitt ska vi implementera sökmoment med hjälp av Twitter API.
Under tiden kan du skicka in dina frågor och kommentarer nedan. Du kan också nå mig på Twitter @ reifman eller maila mig direkt. Jag skulle särskilt uppskatta att höra från journalister och brottsbekämpning som använder sig av dessa exempel.
Du kan även bläddra i min Tuts + instruktörssida för att se andra handledning som jag har skrivit.