Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Это первый урок серии из двух частей, посвященный использованию социальных сетей для поиска очевидцев важных событий. В этом учебном пособии я расскажу вам об использовании API Instagram, для того чтобы найти пользователей, которые могли быть рядом с видеосъемкой в Макклемоне в 2013 году и сценой с авариями в Сиэтле рядом с местом, где я часто работаю.
Во второй части мы будем использовать API Twitter для поиска пользователей рядом с другим недавним событием. Я также расскажу о некоторых проблемах конфиденциальности, связанных с социальными сетями и шарингом вашей геолокации. Вы можете загрузить код для каждого эпизода, используя ссылку репозитория GitHub на боковой панели. Вы также можете быть заинтересованы в моей серии Tuts +, Работает с API Twitter.
Я участвую в обсуждениях. Если у вас есть вопрос или предложение, пожалуйста, напишите комментарий ниже. Вы также можете связаться со мной в Twitter @reifman или отправить мне электронное письмо.
Использование Geotagging это хорошо (и плохо)
Телефоны, которые мы носим в наших карманах, записывают каждый наш ход, делясь с поставщиками сотовых телефонов и часто сторонними компаниями-разработчиками программного обеспечения, чьи мотивации в основном фокусируются на прибыли. Но это не просто телефоны и GPS, которые выставляют нас - я почти всегда делаю покупки с помощью кредитных карт, подвергая почти все аспекты моей жизни кредитным провайдерам, хакерам или юридическим запросам.
Wired's Vanish Contest
В конкурсе Wired's в 2009 году Vanish я помог возглавить захват журналиста Эвана Ратлифа. После записях о людях, которые подделывают свою смерть, Ратлифф пытался исчезнуть в течение 30 дней в рамках эксперимента. Если кто-нибудь сможет найти его лично до истечения срока, он получит приз в размере 5000 долларов. Используя приложение Facebook как honeypot, я смог заманить Ratliff в многократное разделение его местоположения с помощью IP-адреса, который затем я сверил с его учетной записью Twitter, которую я обнаружил. С помощью других участников Vanish по всей стране мы вызвали помощь на земле в Новом Орлеане, которая появилась в виде магазина для пиццы без глютена (Ratliff был известен как целиакия), и мы сумели отследить его в городе. В этой истории геотаггинг не использовался, чтобы найти его. Вместо этого мы использовали географическую привязку IP-адреса. Здесь вы также можете прочитать рассказ Ратлиффа.
Но приложения для социальных сетей на нашем телефоне часто используют геотеги, оставляя след, который пользователи не всегда ожидают.
Muckraking с Geotags и социальными медиа
Многие люди не понимают, что они оставили геотаггинг в своих приложениях в социальных сетях, полностью рекламируя свое местоположение с каждым сообщением в социальных сетях. Это включало конгрессмена Республиканской партии Аарона Шока. AP использовала геотаг своей учетной записи Instagram, чтобы разоблачить использование средств налогоплательщика для экстравагантных частных рейсов и других роскошных мероприятий. См. Instagram выставил конгрессмена, который использовал государственные средства на частных рейсах и концертах.
Вот сообщение Instagram от Schock из Patagonia - обратите внимание на значок geotag рядом с «Perito Moreno Glacier»:

Итак, исследование геотаг можно использовать во благо. В этом учебном пособии я собираюсь изучить, как журналисты и правоохранительные органы могут найти потенциальных свидетелей для важных событий, таких как преступление или происшествие с использованием социальных сетей.
Тем не менее, геотаггинг также может быть использован для плохих целей. Есть определенно важные последствия конфиденциальности для интеграции в наш цифровой образ жизни.
Конфиденциальность
Компьютерные ученые и педагоги Беркли написали приложение Ready or Not?, чтобы продемонстрировать, как геотаггинг в Twitter и Instagram записывают каждый наш ход. См. также не слишком ли много рассказывает ваш Twitter аккаунт?
Вот instagram аккаунт конргесмена Schock's в приложении Ready или Not?:

Вот Twitter-аккаунт соавтора Apple Стива Возняка в приложении. Интересно, что поездки конгрессмена еще более распространены, чем у этого технического магната.

Геотегинг на Instagram и Twitter достаточно точен, чтобы позволить кому-то легко определить ваше место жительства, место работы и обычную поездку.
Отключение геотегинга
Если вы не хотите делиться своим местоположением с общественностью, чтобы увидеть или оставить исторический след ваших поездок, Ready или Not? приложение предлагает ссылки и руководства по отключению этих функций (найдите ссылку на его домашней странице). Честно говоря, я отключил это у себя, и я призываю вас сделать тоже самое.
Для тех, кто этого не делает, а многие не сделают - их сообщения в социальных сетях могут быть полезны для правоохранительных органов, ищущих свидетелей на месте преступления или журналистов, желающих углубиться в историю. Я расскажу вам, как это сделать.
В этом эпизоде я расскажу вам об использовании API Instagram. Я предоставил репозиторий GitHub (ссылка находится на боковой панели), чтобы скачать его и попробовать этот код. Мое «приложение для свидетелей» написано на Yii Framework для PHP, о котором вы можете узнать больше в моей серии уроков программирование с Yii2 для Tuts +.
Процесс настройки требует, чтобы вы зарегистрировали учетную запись разработчика и приложение с Instagram (и/или Twitter).
Если вы являетесь правоохранительным органом или медиа-субъектом, который хотел бы получить больше информации, пожалуйста, свяжитесь со мной напрямую. Я также был бы заинтересован в любом успешном использовании этого кода - они сделали интересную историю событий.
Использование API-интерфейса Instagram
Начнем с Instagram. Если у вас еще нет учетной записи Instagram, загрузите приложение на свой телефон и зарегистрируйтесь.
Поиск в Instagram Media
Поиск геолокации на Instagram довольно сложный и предлагает очень простой интерфейс для наших целей. Как вы можете видеть ниже, нам необходимо предоставить широту и долготу местоположения, географический радиус (расстояние) и временной диапазон (min_timestamp и max_timestamp):

Начинаем
Посетите страницу API Instagram для разработчиков и нажмите «Зарегистрировать свое приложение»:

Вам нужно будет зарегистрироваться для учетной записи разработчика:

Затем вы можете зарегистрировать новое приложение для получения идентификатора клиента:

На панели управления «Управление клиентами» вы увидите свой Client ID и Client Secret, поэтому обратите внимание на следующее:

Установка кодовой базы Eyewitness
Вы можете клонировать себе репозиторий GitHub, расположенный на боковой панели, для запуска нашего примера.
cd ~/Sites/eyew https://github.com/link-in-sidebar/eyew.git
Вам нужно будет настроить локальную конфигурацию Apache. Я использую MAMP, поэтому она выглядит примерно так:
cd /Applications/MAMP/htdocs ln -s ~/Sites/eyew/web /Applications/MAMP/htdocs/eyew
Вам нужно локально создать базу данных. Я использую PHPMyAdmin для этого:

Затем я создаю файл инициализации в /var/secure/eyew.ini с моими учетными данными базы данных и идентификаторами и ключами Instagram. Недавно я описал этот процесс в другом учебнике Tuts +: Защита ваших ключей от GitHub. К слову говоря, я случайно выложил свой ключ Instagram во время тестирования (вздох), и мне пришлось сбросить ключи после этого.
Мой файл ini выглядит так:
mysql_host="localhost" mysql_db="eyew" mysql_un="xxxxxxxxx" mysql_pwd="xxxxxxxxxxxx" instagram_client_id = "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7" instagram_client_secret = "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4"
Обновите свой Composer и его библиотеки:
sudo composer self-update sudo composer update
Затем инициализируйте нашу базу данных. Первая миграция устанавливает пользовательские таблицы для нашего Yii2-user через расширение разработчика Dmeroff, а вторая создает наши таблицы для приложения:
./yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations ./yii migrate/up
Опять же, вы можете узнать больше о настройке приложения с Yii Framework в моей серии статей Программирование на Yii2 на Tuts+.
Главная страница свидетелей
Посмотрите, что вы увидите при посещении сайта в своем браузере:

Определить момент
Момент - это место и время, за которые мы ищем посты в социальных сетях. Он состоит из дружественного дескриптора, местоположения (широты и долготы), времени начала и продолжительности (в минутах). Для моего первого примера я ищу пользователей Instagram, которые присутствовали на видеосъемке Макклемора вечером среды, 24 июля 2013 года, в знаменитом Сикэтском Дик-драйве. Видеопроизводство и последующие толпы закрывали площадь в течение нескольких часов.
Используя Google Maps, я могу получить широту и долготу GPS для Дика. Это 47.6195 -122.321.

Из статьи я узнал, что производство закрывается в 1 час ночи. Я собираюсь выбрать время начала 10 вечера и продолжительность 3 часа.

Instagram принимает время начала в GMT, поэтому я жестко запрограммировал восьмичасовую корректировку изменения времени из своего часового пояса (PST). Возможно, вам придется изменить это в коде.
public function actionCreate() { $model = new Moment(); if ($model->load(Yii::$app->request->post())) { // convert date time to timestamp $model->start_at = strtotime($model->start_at); // adjust for GMT $model->start_at+=(3600*8); // validate the form against model rules if ($model->validate()) { // all inputs are valid $model->save(); return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('create', [ 'model' => $model, ]); } } else { return $this->render('create', [ 'model' => $model, ]); } }
Поиск момента на Instagram
Чтобы выполнить поиск в Instagram, щелкните значок камеры ниже:

Чтобы реализовать поиск в медиа на Instagram, я использую пакет Instagram PHP от Galen Grover. Фактический поиск довольно прост: $instagram->searchMedia( $this->latitude, $this->longitude,$params );
<?php namespace app\models; use Yii; use yii\db\ActiveRecord; use app\models\Gram; use Instagram; ... public function searchInstagram() { $instagram = new Instagram\Instagram; $instagram->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->username,$m->link,$m->created_time,$m->images->thumbnail->url,$caption); } }
Результаты сохраняются в моей таблице Gram, которую мы затем можем просмотреть:
public function add($moment_id,$username,$link,$created_time,$image_url,$text) { if (!Gram::find()->where(['moment_id' => $moment_id])->andWhere(['link'=>$link])->andWhere(['created_time'=>$created_time])->exists()) { $i = new Gram(); $i->moment_id = $moment_id; $i->username = $username; $i->link = $link; $i->created_time = $created_time; $i->image_url = $image_url; $i->text = $text; $i->save(); } }
Просмотр результатов
Вот первая страница результатов моего поиска. Вы можете увидеть толпы и лимузин Кадиллака Макклемора. Очевидно, я сорвал джек-пот своим поиском.

Затем, на третьей странице, пользователь Instagram, названный Джошуа Льюис, снял Макклеро, выходящего из Cadillac:

Вот Макклемор:

В этом примере явно показана вся мощь, предоставляемая API поиска Instagram. Всего за несколько мгновений мы нашли множество свидетелей к событию с лета 2013 года. Удивительно.
Если вам интересно, вот видео YouTube о том, что Macklemore снимает:
Другой примерный момент
Во втором примере я собираюсь найти пользователей Instagram, которые находились в районе вокруг трагической аварии, где я работал несколько недель назад. Моторизованный скутер женщины, возможно, был неисправен, и она потеряла контроль, врезавшись в хвост проезжающей машины (к счастью, она выжила). Это случилось перед Starbucks «Roastery», неудачной новой туристической ловушкой здесь, в Сиэтле (я не поклонник).
Используя Карты Google, мы можем видеть, что GPS-координаты монастыря - 47.614264, -122.328008:

В статье говорится, что авария произошла около 17:00. Поэтому мы будем использовать эту информацию для создания нашего Момента:

Здесь вы можете увидеть оба момента:

В случае, если вам интересно, значок ластика очищает прошлые результаты для этого момента поиска.
Вот результаты поиска нашей аварии у Starbucks. Никто не опубликовал фотографии сцены аварии - преобладала общая вежливость. Тем не менее, все эти пользователи Instagram были в то время в этой области и, возможно, стоит обратиться к ним в качестве свидетелей.

Некоторые из них были туристами, как эта русская женщина. Я опубликовал перевод Google своего сообщения Instagram ниже:

Другие посетили дегустационную комнату в отеле Starbucks или соседний бар и ресторан устриц.
Я надеюсь, что вы сможете увидеть как темную так и светлую стороны технологии гео тегинга. Есть очевидные законные применения, которые эти технологии могут обеспечить, и так же очевидно, что ими можно злоупотреблять.
Что дальше?
В следующем эпизоде мы собираемся реализовать поисковые моменты, используя API Twitter.
В то же время, пожалуйста, не стесняйтесь оставлять свои вопросы и комментарии ниже. Вы также можете связаться со мной в Twitter @reifman или отправить мне электронное письмо. Я особенно хотел бы услышать комментарии от журналистов и правоохранительных органов, которые используют эти примеры.
Вы также можете просмотреть мою страницу инструкторов Tuts +, чтобы увидеть другие учебники, которые я написал.
Ссылки по теме
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post