Social media gebruiken om ooggetuigen te zoeken naar belangrijke gebeurtenissen

Wat je gaat creëren

Dit is de eerste van een tweedelige serie over het gebruik van sociale media om ooggetuigen te lokaliseren bij belangrijke gebeurtenissen. In deze zelfstudie zal ik je helpen met het gebruik van de Instagram API om leden te vinden die mogelijk in de buurt van een Macklemore-videoshoot in 2013 en een ongevalsscène in Seattle waren geweest, in de buurt van waar ik vaak werk. 

In deel twee zullen we de Twitter API gebruiken om leden te vinden in de buurt van een andere recente gebeurtenis. Ik zal ook enkele privacyproblemen in verband met sociale media behandelen en uw geolocatie delen. Je kunt code voor elke aflevering downloaden door de koppeling GitHub-repository in de zijbalk te gebruiken. Mogelijk bent u ook geïnteresseerd in mijn Tuts + -serie, Building With the Twitter API.

Ik neem deel aan de discussies. Als je een vraag of een suggestie voor een onderwerp hebt, plaats dan een commentaar hieronder. Je kunt me ook bereiken via Twitter @reifman of mij rechtstreeks een e-mail sturen. 

Geotagging voor goed gebruiken (en kwaad)

De telefoons die we in onze eigen zak hebben, registreren elke beweging en delen deze met mobiele providers en vaak met externe softwarebedrijven waarvan de motivatie meestal gericht is op winst. Maar het zijn niet alleen telefoons en GPS die ons blootstellen, ik maak bijna altijd aankopen met creditcards, waardoor vrijwel elk aspect van mijn leven wordt blootgesteld aan creditcardproviders, hackers of juridische verzoeken.

Wired's Vanish-wedstrijd

In de Vanish-wedstrijd van 2009 van Wired hielp ik de journalist Evan Ratliff te vangen. Na het schrijven over mensen die hun dood faken, probeerde Ratliff 30 dagen te verdwijnen als onderdeel van een experiment. Als iemand hem persoonlijk zou kunnen vinden voordat de tijd verstreken is, zouden ze een prijs van $ 5000 ontvangen. Met behulp van een Facebook-applicatie als een honeypot, kon ik Ratliff lokken door herhaaldelijk zijn locatie te delen via een IP-adres, dat ik vervolgens verifieerde tegen een Twitter-account waarvan ik had ontdekt dat hij het gebruikte. Met de hulp van andere Vanish-deelnemers in het hele land hebben we hulp ingeroepen in New Orleans - in de vorm van een glutenvrije pizzawinkel (Ratliff stond bekend als coeliakiepatiënt) die hem in de stad kon opsporen. In dat verhaal werd geotagging niet gebruikt om hem te vinden, maar IP-adresgeolocatie. Je kunt het verhaal van Ratliff hier ook lezen.

Maar sociale-mediatoepassingen op onze telefoon maken vaak gebruik van geotagging, waardoor een spoor achterblijft waar gebruikers niet altijd op anticiperen.

Muckraking met geotags en sociale media

Veel mensen realiseren zich niet dat ze geotagging hebben verlaten in hun apps voor sociale media, en hun locatie volledig bekend maken met elke post op sociale media. Dit omvatte GOP Congreslid Aaron Schock. De AP gebruikte de geotags van zijn Instagram-account om zijn gebruik van belastinggeld voor extravagante privévluchten en andere luxueuze activiteiten bloot te leggen. Zie Instagram-account stelt congreslid bloot die publieke fondsen blies op privévluchten en concerten.

Hier is een Instagram bericht van Schock uit Patagonië-let op het geotag-pictogram naast "Perito Moreno-gletsjer":

Het onderzoeken van geotags kan dus voorgoed worden gebruikt. In deze tutorial ga ik onderzoeken hoe journalisten of wetshandhavers potentiële ooggetuigen kunnen lokaliseren bij belangrijke gebeurtenissen, zoals een misdaad of een ongeval met sociale media..

Geotaggen kan echter ook voor kwaad worden gebruikt. Er zijn zeker belangrijke implicaties voor de privacy van de integratie in onze digitale levensstijl.

Privacy Implicaties

Berkeley computerwetenschappers en opvoeders bouwden de Ready of Not? app om te laten zien hoe geocodering op Twitter en Instagram elke beweging registreren. Zie ook Is uw Twitter-account te veel gezegd? 

Hier is het Instagram-account van Congresmmen Schock in de Ready of Not? app:

Dit is het Twitter-account van Apple mede-oprichter Steve Wozniak in de app. Interessant dat de reis van het congres nog wijdverspreider is dan deze tech tycoon.

De geotagging op Instagram en Twitter is nauwkeurig genoeg om iemand in staat te stellen om eenvoudig je verblijf, werkplek en reisroutine te bepalen.

Geotagging uitschakelen

Als u uw locatie niet wilt delen zodat het publiek het historische parcours van uw reizen kan bekijken of verlaten, is het Klaar of Niet? app biedt links en handleidingen om deze functies uit te schakelen (kijk voor de link op de startpagina). Eerlijk gezegd heb ik de mijne afgewezen en ik moedig je aan om dat ook te doen.

Voor degenen die dat niet doen - en veel niet doen - kunnen hun berichten op sociale media nuttig zijn voor rechtshandhavingsinstanties die op zoek zijn naar getuigen van een plaats delict of journalisten die dieper in een verhaal willen graven. Ik ga je helpen met hoe je dat moet doen. 

In deze aflevering zal ik je helpen met het gebruik van de Instagram API. Ik heb een GitHub-repository (de link staat in de zijbalk) voor je om te downloaden om de code uit te proberen. Mijn "Eyewitness-app" is geschreven in het Yii Framework voor PHP, waar je meer over kunt leren in mijn Programming With Yii2-serie voor Tuts+. 

Het configuratieproces vereist dat je een ontwikkelaarsaccount en -applicatie registreert bij Instagram (en / of Twitter). 

Als u een wetshandhavingsinstantie of een media-entiteit bent die meer informatie wenst, kunt u contact met mij opnemen. Ik zou ook geïnteresseerd zijn in een succesvol gebruik van deze code (ten goede) - ze zouden een interessant vervolgverhaal maken.

De Instagram API gebruiken

Laten we beginnen met Instagram. Als je nog geen Instagram-account hebt, download je de applicatie op je telefoon en registreer je.

Instagram Media Search 

De geolocatie-zoekopdracht op Instagram is vrij geavanceerd en biedt een zeer eenvoudige interface voor onze doeleinden. Zoals u hieronder kunt zien, moeten we een locatie opgeven breedtegraad en Lengtegraad, een geografische straal (afstand) en een tijdbereik (min_timestamp en max_timestamp):

Ermee beginnen

Ga naar de Instagram API-pagina voor ontwikkelaars en klik Registreer uw applicatie:

U moet zich aanmelden voor een ontwikkelaarsaccount:

Dan kunt u een nieuwe applicatie registreren om uw Client ID te ontvangen:

Op de Beheer klanten dashboard, je zult je zien klant identificatie en Client Secret, dus noteer deze:

De codebase van de ooggetuige installeren

U kunt de GitHub-repository in de zijbalk klonen om onze voorbeeldcode uit te voeren.

cd ~ / Sites / eyew https://github.com/link-in-sidebar/eyew.git

U moet uw lokale Apache-configuratie configureren. Ik gebruik MAMP, dus het ziet er ongeveer zo uit:

cd / Toepassingen / MAMP / htdocs ln -s ~ / Sites / eyew / web / Toepassingen / MAMP / htdocs / eyew 

U moet lokaal een database maken. Ik gebruik PHPMyAdmin om er een grafisch te maken:

Vervolgens maak ik een initialisatiebestand aan in /var/secure/eyew.ini met mijn databasereferenties en Instagram-ID's en -sleutels. Ik heb dit proces onlangs beschreven in een andere Tutorial + tutorial: Protecting Your Keys from GitHub. Humoristisch heb ik tijdens het testen per ongeluk mijn Instagram-toets ingecheckt en daarna mijn sleutels gereset.

Mijn ini-bestand ziet er zo uit:

mysql_host = "localhost" mysql_db = "eyew" mysql_un = "xxxxxxxxx" mysql_pwd = "xxxxxxxxxxxx" instagram_client_id = "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7" instagram_client_secret = "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4" 

Werk uw Composer en zijn leveranciersbibliotheken bij:

sudo composer zelf-update sudo composer update

Initialiseer dan onze database. De eerste migratie installeert gebruikerstabellen voor onze Yii2-gebruiker door ontwikkelaar Dmeroff-extensie en de tweede maakt onze app-specifieke tabellen:

 ./ yii migrate / up --migrationPath = @ vendor / dektrium / yii2-user / migrations ./yii migrate / up

Nogmaals, je kunt meer leren over het opzetten van een Yii Framework-toepassing in mijn Programming With Yii2-serie voor Tuts+.

The Eyewitness Home Page

Hier is een blik op wat u zou moeten zien wanneer u de site in uw browser bezoekt:

Definieer een moment

A Moment is een plaats en tijd waarvoor we op zoek zijn naar sociale-mediaposters die aanwezig waren. Het bestaat uit een vriendelijke descriptor, een locatie (lengte- en breedtegraad), een begintijd en een duur (in minuten). Voor mijn eerste voorbeeld ben ik op zoek naar Instagram-gebruikers die aanwezig waren bij de videoopnames van Macklemore op de avond van woensdag 24 juli 2013 in het beroemde Dick's Drive In in Seattle. De videoproductie en de daaropvolgende menigten sluiten het gebied urenlang af.

Met behulp van Google Maps kan ik de GPS-breedtegraad en lengtegraad voor Dick's krijgen. Het is 47.6195 -122.321. 

Uit het artikel leerde ik dat de productie om 01.00 uur werd stilgelegd. Ik kies een starttijd van 22.00 uur en een duur van 3 uur.

Instagram accepteert begintijden in GMT, dus ik heb een acht uur tijdsveranderingsaanpassing hardcoded vanuit mijn tijdzone (PST). Mogelijk moet u dit in de code wijzigen.

public function actionCreate () $ model = new Moment (); if ($ model-> load (Yii :: $ app-> request-> post ())) // converteer datum tijd naar timestamp $ model-> start_at = strtotime ($ model-> start_at); // aanpassen voor GMT $ model-> start_at + = (3600 * 8); // valideer het formulier tegen modelregels als ($ model-> validate ()) // alle invoer geldig $ model-> save () is; return $ this-> redirect (['view', 'id' => $ model-> id]);  else return $ this-> render ('create', ['model' => $ model,]);  else return $ this-> render ('create', ['model' => $ model,]); 

Moment Search op Instagram

Om Instagram te doorzoeken, klikken we op het camerapictogram hieronder:

Om mijn media-zoekopdracht op Instagram te implementeren, gebruik ik het Instagram PHP-pakket van Galen Grover. De eigenlijke zoekopdracht is redelijk eenvoudig: $ 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 as $ m) if (isset ($ m-> caption-> text)) $ caption = $ m-> caption-> text;  else $ caption = "; $ i = new Gram (); $ i-> add ($ this-> id, $ m-> user-> gebruikersnaam, $ m-> link, $ m-> created_time, $ m-> afbeeldingen-> thumbnail-> url, $ onderschrift);

De resultaten worden opgeslagen in mijn Gram-tabel, die we vervolgens kunnen bekijken:

public function add ($ moment_id, $ gebruikersnaam, $ link, $ created_time, $ image_url, $ text) if (! Gram :: find () -> where (['moment_id' => $ moment_id]) -> enWaarom ( ['link' => $ link]) -> andWhere (['created_time' => $ created_time]) -> exists ()) $ i = new Gram (); $ i-> moment_id = $ moment_id; $ i-> gebruikersnaam = $ gebruikersnaam; $ i-> link = $ link; $ i-> created_time = $ created_time; $ i-> image_url = $ image_url; $ i-> tekst = $ tekst; $ I-> save (); 

Blader door de resultaten

Dit is de eerste pagina met resultaten van mijn zoekopdracht. Je ziet de drukte en Macklemore's Cadillac limo rijden. Het is duidelijk dat ik de jackpot heb bereikt met mijn zoektocht.

Dan op pagina drie, heeft een Instagram-gebruiker genaamd Joshua Lewis een shot van Macklemore die de Cadillac verlaat: 

Hier is Macklemore:

Dit voorbeeld laat duidelijk de kracht zien die de Instagram-zoek-API biedt. In een paar ogenblikken vonden we een verscheidenheid aan ooggetuigen van een evenement uit de zomer van 2013. Geweldig.

Als je geïnteresseerd bent, hier is een YouTube-video van die Macklemore-shoot:

Nog een voorbeeldmoment

Voor mijn tweede voorbeeld ga ik op zoek naar Instagram-gebruikers die in de buurt waren rond het tijdstip van een tragisch ongeluk in de buurt van waar ik een paar weken geleden samenwerkte. De gemotoriseerde scooter van een vrouw heeft mogelijk een storing en ze is de controle kwijtgeraakt en botste tegen de staart van een passerende auto (gelukkig overleefde ze). Het gebeurde voor de "Roastery" van Starbuck, een ongelukkige nieuwe toeristenval hier in Seattle (ik ben geen fan). 

Met behulp van Google Maps kunnen we de GPS-coördinaten van de roastery zien als 47.614264, -122.328008:

Het artikel vertelt ons dat het ongeluk rond 17.00 uur gebeurde. Dus we zullen deze informatie gebruiken om ons Moment te creëren:

Hier kunt u beide momenten zien die we hebben toegevoegd:

In het geval dat je je afvroeg, wist het pictogram voor gum voorbij de resultaten voor die momentopname.

Dit zijn de resultaten voor onze ongevalsonderzoek bij Starbucks Roastery. Niemand heeft foto's van de plaats van het ongeluk gepost - de algemene beleefdheid was de overhand. Echter, al deze Instagram-gebruikers waren op dat moment in het gebied en kunnen de moeite waard zijn om contact op te nemen als getuigen. 

Sommigen waren toeristen zoals deze Russische vrouw - ik heb de Google-vertaling van haar Instagram-bericht hieronder geplaatst:

Anderen bezochten de proeverijzaal van Starbucks-roastery of een nabijgelegen bar en een oesterrestaurant.

Ik hoop dat je zowel het duister als het licht van geotagging-technologie kunt zien. Er zijn overduidelijke legitieme gebruiken die deze technologieën kunnen bieden voor het goede, en ze kunnen duidelijk worden misbruikt.

Wat is het volgende?

In de volgende aflevering gaan we zoekmomenten implementeren met behulp van de Twitter API.

In de tussentijd kunt u hieronder uw vragen en opmerkingen plaatsen. Je kunt me ook bereiken via Twitter @reifman of mij rechtstreeks een e-mail sturen. Ik zou vooral het op prijs stellen van journalisten en wetshandhavers die van deze voorbeelden gebruik maken, op prijs stellen.

Je kunt ook bladeren door mijn Tuts + instructeur-pagina om andere tutorials te bekijken die ik heb geschreven. 

Gerelateerde Links

  • Instagram API voor ontwikkelaars
  • Zelfs als je niet klaar bent? (Privacy onderwijzen)
  • How We Caught Missing Wired Magazine Writer Evan Ratliff
  • Yii2 Developer Exchange