Это вторая часть серии по API Instagram. В этом уроке я расскажу вам, как использовать конечные точки в Instagram , которые позволяют вам искать популярные изображения из определенного времени и места.
Вы можете скачать код для каждого эпизода, используя ссылку на репозиторий GitHub на боковой панели. Возможно, вас также заинтересует моя серия из двух статей Tuts + « Поиск свидетелей потенциальных преступлений с помощью API социальных сетей» .
Код для этих руководств написан на PHP с использованием Yii Framework. Вы можете узнать больше о Yii в разделе Введение в Yii Framework (Tuts +) и в Программирование с помощью серии Yii2 (Tuts +) . Вы также можете легко адаптировать сегменты кода для своего собственного PHP-приложения.
Я участвую в обсуждениях. Если у вас есть вопрос или предложение по теме, пожалуйста, оставьте комментарий ниже. Вы также можете связаться со мной в Twitter @reifman или написать мне напрямую.
Давайте начнем с регистрации в качестве разработчика в Instagram.
Начиная
Чтобы начать, посетите страницу API Instagram для разработчиков и нажмите Зарегистрировать приложение :
Вам нужно зарегистрировать аккаунт разработчика:
Затем вы можете зарегистрировать новое приложение, чтобы получить свой идентификатор клиента:
На панели управления клиентами вы увидите свой идентификатор клиента и секрет клиента , поэтому запишите их:
Использование медиа конечных точек
Что касается API веб-служб, API Instagram является надежным и, по моему опыту, работает очень хорошо. Instagram предлагает несколько конечных точек API:
Для этого урока мы сосредоточимся на конечных точках Media:
С помощью конечных точек мультимедиа вы можете получить информацию о фото или видео из Instagram, сославшись на его идентификатор или шорткод по URL-адресу, например, 0EyZ53Ja9X по адресу https://instagram.com/p/0EyZ53Ja9X . Он также предоставляет возможности геоархии для поиска средств массовой информации, опубликованных в определенное время и в определенном месте, как мы это делали в разделе «Поиск свидетелей потенциальных преступлений с помощью API социальных сетей» . И, наконец, он позволяет вам получать популярные посты в Instagram.
Консоль API
Чтобы помочь вам начать работу и отлаживать, в Instagram есть консоль API от Apigee :
Вы можете попробовать запросы к конечным точкам Media, используя консоль API. Очевидно, вы можете увидеть, насколько это полезно для работы со СМИ из популярного сервиса мобильной фотографии.
Давайте перейдем к установке нашего примера кода и настройке его для работы с клиентским приложением Instagram.
Установка кодовой базы
В этой серии я собираюсь продолжить использовать кодовую базу «Свидетели» из раздела «Поиск свидетелей потенциальных преступлений с помощью API социальных сетей» . Вы можете клонировать репозиторий GitHub, расположенный на боковой панели, чтобы запустить наш пример кода.
1
2
|
cd ~/Sites/eyew
https://github.com/link-in-sidebar/eyew.git
|
Вам нужно будет настроить локальную конфигурацию Apache. Я использую MAMP, так что это выглядит примерно так:
1
2
|
cd /Applications/MAMP/htdocs
ln -s ~/Sites/eyew/web /Applications/MAMP/htdocs/eyew
|
Вам нужно создать базу данных локально. Я использую PHPMyAdmin для создания одного графически:
Затем я создаю файл инициализации в /var/secure/eyew.ini
со своими учетными данными базы данных, идентификаторами и ключами Instagram. Я описал этот процесс недавно в другом уроке Tuts +: Защита ваших ключей от GitHub .
Мой INI-файл выглядит так:
1
2
3
4
5
6
|
mysql_host=»localhost»
mysql_db=»eyew»
mysql_un=»xxxxxxxxx»
mysql_pwd=»xxxxxxxxxxxx»
instagram_client_id = «4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7»
instagram_client_secret = «1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4»
|
Обновите ваш Composer и его библиотеки поставщиков:
1
2
|
sudo composer self-update
sudo composer update
|
Затем инициализируйте нашу базу данных. Первая миграция устанавливает пользовательские таблицы для нашего расширения Ymer2-User от разработчика Dmeroff , а вторая создает наши таблицы для конкретных приложений:
1
2
|
./yii migrate/up —migrationPath=@vendor/dektrium/yii2-user/migrations
./yii migrate/up
|
Опять же, вы можете узнать больше о настройке приложения Yii Framework из серии « Программирование с Yii2 для Tuts +».
Вот схема MySQL для нашей таблицы изображений Instagram — мы называем ее таблицей Грамма. Мы будем использовать его для хранения результатов геоисследований.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class m150308_184606_create_gram_table extends Migration
{
public function up()
{
$tableOptions = null;
if ($this->db->driverName === ‘mysql’) {
$tableOptions = ‘CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB’;
}
$this->createTable(‘{{%gram}}’, [
‘id’ => Schema::TYPE_PK,
‘moment_id’ => Schema::TYPE_INTEGER .
‘username’ => Schema::TYPE_STRING .
‘link’ => Schema::TYPE_STRING .
‘image_url’ => Schema::TYPE_STRING .
‘text’ => Schema::TYPE_TEXT .
‘created_time’ => Schema::TYPE_INTEGER .
‘created_at’ => Schema::TYPE_INTEGER .
‘updated_at’ => Schema::TYPE_INTEGER .
], $tableOptions);
$this->addForeignKey(‘fk_gram_moment’, ‘{{%gram}}’, ‘moment_id’, ‘{{%moment}}’, ‘id’, ‘CASCADE’, ‘CASCADE’);
}
|
Домашняя страница
Я переименовал образец приложения «Instapi», сокращение от Instagram API.
Вот посмотрите, что вы должны увидеть, когда вы посещаете сайт в браузере:
Выполнение поиска в СМИ
Для реализации поиска по медиа в нашем приложении Instapi я использую PHP-пакет от Гален Гровера .
Поиск популярных изображений
Во-первых, давайте реализуем поиск по media/popular
. Мы запросим API и отобразим результаты в виде таблицы.
Я создал действие под названием Popular в GramController.php:
1
2
3
4
5
6
7
8
|
public function actionPopular()
{
$gram = new Gram();
$media = $gram->searchPopular();
return $this->render(‘popular’, [
‘media’ => $media,
]);
}
|
Он вызывает searchPopular()
в модели Gram.php:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
<?php
namespace app\models;
use Yii;
use yii\db\ActiveRecord;
use Instagram;
…
public function searchPopular() {
$instagram = new Instagram\Instagram;
$instagram->setClientID( \Yii::$app->params[‘instagram’][‘client_id’] );
$media = $instagram->getPopularMedia();
return $media;
}
|
В /views/gram/popular.php
мы настраиваем структуру таблицы HTML:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $searchModel app\models\InstagramSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */
$this->title = ‘Instagrams’;
$this->params[‘breadcrumbs’][] = $this->title;
?>
<div class=»instagram-index»>
<table class=»table»>
<thead>
<tr class=»small-header»>
<td>Image ID</td>
<td>User</td>
<td >Thumbnail</td>
<td >Caption</td>
<td >Created at</td>
</tr>
</thead>
<?php
foreach ($media as $m) {
echo $this->render(‘_item’, [
‘m’ => $m,
]);
}
?>
</table>
</div>
|
и _item.php
частичное представление _item.php
для отображения отдельных результатов мультимедиа:
01
02
03
04
05
06
07
08
09
10
11
|
<tr>
<td><a href=»/eyew/gram/lookup/?id=<?= $m->id ?>»><?= $m->id ?></a></td>
<td><a href=»https://instagram.com/<?= $m->user->username ?>»><?= $m->user->username ?></a></td>
<td><a href=»<?= $m->link ?>»><img src=»<?= $m->images->thumbnail->url ?>»></a></td>
<td>
<?php
echo (isset($m->caption->text)?$m->caption->text:»);
?>
</td>
<td><?= $m->created_time ?></td>
</tr>
|
Вот результаты популярных запросов в Instagram. Идите вперед и обновите страницу в вашем приложении. Интересно посмотреть, что будет дальше.
Посмотрите информацию об изображении или видео
Я связал идентификатор медиа Instagram в первом столбце с действием контроллера, которое вызывает конечную точку медиа, которая дает нам больше информации:
1
2
3
4
5
6
|
public function actionLookup($id)
{
$gram = new Gram();
$media = $gram->lookup($id);
print_r($media);
}
|
Вот функция поиска в модели Instagram:
1
2
3
4
5
6
|
public function lookup($id) {
$instagram = new Instagram\Instagram;
$instagram->setClientID( \Yii::$app->params[‘instagram’][‘client_id’] );
$media = $instagram->getMedia( $id );
return $media;
}
|
Вот скриншот данных, сбрасываемых на экран:
Очевидно, что вы можете использовать и хранить эту информацию по своему усмотрению.
Поиск медиа из времени и места
Теперь давайте поищем изображения из определенного времени и места. Для этого примера я рассмотрю наш пример очевидца.
Наша кодовая база позволяет вам определять момент как место и время. Он состоит из понятного дескриптора, местоположения (широта и долгота), времени начала и продолжительности (в минутах). В качестве моего первого примера я ищу пользователей Instagram, которые присутствовали на съемках видео Маклмора вечером в среду, 24 июля 2013 года, в ориентире Сиэтла Dick’s Drive In .
Используя Google Maps, я могу получить широту и долготу GPS для Дика. Это 47,6195 -122,321.
Из статьи я узнал, что производство закрыли в 1 час ночи. Я собираюсь выбрать время начала 10 вечера и продолжительность 3 часа.
Instagram принимает время начала по Гринвичу, поэтому я жестко запрограммировал восьмичасовую корректировку изменения времени из своего часового пояса (PST). Возможно, вам придется изменить это в коде.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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->searchMedia( $this->latitude, $this->longitude,$params );
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?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();
}
}
|
Результаты сохраняются в таблице Gram, которую мы затем можем просмотреть:
01
02
03
04
05
06
07
08
09
10
11
12
|
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 по имени Джошуа Льюис делает снимок Маклмора, выходящего из «Кадиллака»:
Вот Маклмор :
Этот пример ясно демонстрирует всю мощь API поиска в Instagram. Всего за несколько минут мы нашли множество очевидцев события лета 2013 года.
Что дальше?
Надеюсь, вам понравилось изучение API Instagram. В следующем эпизоде мы рассмотрим аутентификацию OAuth, чтобы мы могли запрашивать области службы Instagram, требующие авторизации пользователя.
А пока, пожалуйста, не стесняйтесь оставлять свои вопросы и комментарии ниже. Вы также можете связаться со мной в Twitter @reifman или написать мне напрямую. Вы также можете просмотреть мою страницу инструктора Tuts +, чтобы увидеть другие уроки, которые я написал.
Ссылки по теме
- API Instagram
- Блог разработчиков Instagram
- Поиск потенциальных свидетелей преступлений с помощью API социальных сетей
- Yii2 Developer Exchange
Изображение для предварительного просмотра изменяется из результата, который появился в нашем поиске API.