Статьи

Введение в Instagram API

Instagram API

Это первый урок из серии, посвященной (не каламбур) API Instagram . Instagram — это сервис мобильной социальной фотографии, основанный в 2010 году и приобретенный Facebook за 1 миллиард долларов в 2012 году. Именно так вы создаете стартап!

По данным Pew Research , 26% всех взрослых онлайн используют Instagram. Кроме того, «примерно половина молодых людей в возрасте 18-29 лет (53%), пользующихся интернетом, пользуются Instagram. И половина всех пользователей (49%) используют сайт ежедневно».

Pew Internet Social Media Usage 2014

Популярность, повсеместность и визуальная красота Instagram делают его привлекательным и интересным API для разработчиков. Я написал более 90 учебных пособий для Tuts + и, безусловно, одним из самых интересных был раздел Instagram из моей предыдущей серии из двух частей: « Поиск потенциальных преступников с помощью API социальных сетей» . В этом уроке мы нашли свидетелей съёмки видео Маклмора более двух лет назад:

Учебное пособие по Instagram API Macklemore прибывает

В этом уроке я дам вам общий обзор того, что вы можете сделать с помощью Instagram API и как начать работу. В следующих эпизодах я расскажу вам о различных полезных сценариях, использующих API. В каждом эпизоде ​​я буду предоставлять репозиторий кода с примером кода в моей любимой среде PHP Yii. Вы можете узнать больше о Yii здесь и в моей серии «Программирование с Yii2» (Tuts +) .

Я участвую в обсуждениях ниже. Если у вас есть вопрос или предложение по теме, пожалуйста, оставьте комментарий ниже. Вы также можете связаться со мной в Twitter @reifman или написать мне напрямую.

Помимо поиска очевидцев, есть множество других вещей, которые вы можете сделать с помощью универсального и мощного API Instagram. Ознакомьтесь с 8 способами использования API в Mashable. Они также ссылаются на некоторые интересные сторонние сервисы, уже использующие API:

Что касается API веб-сервисов, API Instagram является надежным и, по моему опыту, работает очень хорошо (лучше, чем Twitter). Я начну с широкого обзора API, прежде чем углубляться.

Обзор документации API Instagram и конечные точки

Давайте рассмотрим конечные точки.

Конечные точки Instagram представляют различные URL-адреса веб-сервисов на основе REST для доступа ко многим общим функциям Instagram.

Конечная точка « Пользователи» позволяет вам искать пользователей по имени, искать основную информацию о них и видеть средства массовой информации в их ленте новостей (люди, которым они следят в Instagram), а также их собственные сообщения в СМИ и понравившиеся средства массовой информации. Некоторые из этих функций требуют специальной аутентификации пользователя, а другие могут быть использованы любым разработчиком.

Instagram API Пример пользователей Конечная точка Получить последние медиа
Конечные точки отношений API Instagram

Конечная точка Отношений позволяет вам получать списки подписчиков (как пользователей, за которыми они следуют, так и тех, за кем они следуют), а также отвечать на запросы отношений и вносить изменения в отношения.

С помощью конечной точки Media вы можете получить информацию о фото или видео из Instagram. Он также предоставляет возможности геоисследования для поиска средств массовой информации, опубликованных в определенное время и в определенном месте, как мы это делали в разделе «Поиск свидетелей потенциальных преступлений с помощью API социальных сетей» . Это также позволяет вам получать популярные посты в Instagram.

Вот выдержка из кода JSON для примера ответа на https://api.instagram.com/v1/media/popular?access_token=ACCESS-TOKEN :

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
{
   «data»: [{
       «type»: «image»,
       «users_in_photo»: [],
       «filter»: «Gotham»,
       «tags»: [],
       «comments»: { … },
       «caption»: {
           «created_time»: «1296656006»,
           «text»: «ãƒ ート♥アプリ始゠㠦使㠣㠦㠿㠟ょ(^^)»,
           «from»: {
               «username»: «cocomiin»,
               «full_name»: «»,
               «type»: «user»,
               «id»: «1127272»
           },
           «id»: «26329105»
       },
       «likes»: {
           «count»: 35,
           «data»: [{
               «username»: «mikeyk»,
               «full_name»: «Kevin S»,
               «id»: «4»,
               «profile_picture»: «…»
           }, {…subset of likers…}]
       },
       «link»: «http://instagr.am/p/BV5v_/»,
       «user»: {
           «username»: «cocomiin»,
           «full_name»: «Cocomiin»,
           «profile_picture»: «http://distillery.s3.amazonaws.com/profiles/profile_1127272_75sq_1296145633.jpg»,
           «id»: «1127272»
       },
       «created_time»: «1296655883»,
       «images»: {
           «low_resolution»: {
               «url»: «http://distillery.s3.amazonaws.com/media/2011/02/01/34d027f155204a1f98dde38649a752ad_6.jpg»,
               «width»: 306,
               «height»: 306
           },
           «thumbnail»: {
               «url»: «http://distillery.s3.amazonaws.com/media/2011/02/01/34d027f155204a1f98dde38649a752ad_5.jpg»,
               «width»: 150,
               «height»: 150
           },
           «standard_resolution»: {
               «url»: «http://distillery.s3.amazonaws.com/media/2011/02/01/34d027f155204a1f98dde38649a752ad_7.jpg»,
               «width»: 612,
               «height»: 612
           }
       },
       «id»: «22518783»,
       «location»: null
   },

Как и следовало ожидать, комментарии , лайки и теги конечные точки позволяют перечислять комментарии, отметки «Нравится» и теги для элементов мультимедиа, а также применять (или отменять) их для мультимедиа.

Например, вот пример ответа на запрос средств массовой информации с тегом «снег» с использованием конечной точки https://api.instagram.com/v1/tags/snow/media/recent?access_token=ACCESS-TOKEN :

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
{
    «data»: [{
        «type»: «image»,
        «users_in_photo»: [],
        «filter»: «Earlybird»,
        «tags»: [«snow»],
        «comments»: {
            «data»: [{
                «created_time»: «1296703540»,
                «text»: «Snow»,
                «from»: {
                    «username»: «emohatch»,
                    «username»: «Dave»,
                    «id»: «1242695»
                },
                «id»: «26589964»
            },
            {
                «created_time»: «1296707889»,
                «text»: «#snow»,
                «from»: {
                    «username»: «emohatch»,
                    «username»: «Emo Hatch»,
                    «id»: «1242695»
                },
                «id»: «26609649»
            }],
            «count»: 3
        }
        «caption»: {
            «created_time»: «1296703540»,
            «text»: «#Snow»,
            «from»: {
                «username»: «emohatch»,
                «id»: «1242695»
            },
            «id»: «26589964»
        },
        «likes»: {
            «count»: 1,
            «data»: [{
                «username»: «mikeyk»,
                «full_name»: «Mike Krieger»,
                «id»: «4»,
                «profile_picture»: «http://distillery.s3.amazonaws.com/profiles/profile_1242695_75sq_1293915800.jpg»
            }]
        },
        «link»: «http://instagr.am/p/BWl6P/»,
        «user»: {
            «username»: «emohatch»,
            «profile_picture»: «http://distillery.s3.amazonaws.com/profiles/profile_1242695_75sq_1293915800.jpg»,
            «id»: «1242695»,
            «full_name»: «Dave»
        },
        «created_time»: «1296703536»,
        «images»: {
            «low_resolution»: {
                «url»: «http://distillery.s3.amazonaws.com/media/2011/02/02/f9443f3443484c40b4792fa7c76214d5_6.jpg»,
                «width»: 306,
                «height»: 306
            },
            «thumbnail»: {
                «url»: «http://distillery.s3.amazonaws.com/media/2011/02/02/f9443f3443484c40b4792fa7c76214d5_5.jpg»,
                «width»: 150,
                «height»: 150
            },
            «standard_resolution»: {
                «url»: «http://distillery.s3.amazonaws.com/media/2011/02/02/f9443f3443484c40b4792fa7c76214d5_7.jpg»,
                «width»: 612,
                «height»: 612
            }
        },
        «id»: «22699663»,
        «location»: null
    },
    {
        «type»: «video»,
        «videos»: {
            «low_resolution»: {
                «url»: «http://distilleryvesper9-13.ak.instagram.com/090d06dad9cd11e2aa0912313817975d_102.mp4»,
                «width»: 480,
                «height»: 480
            },
            «standard_resolution»: {
                «url»: «http://distilleryvesper9-13.ak.instagram.com/090d06dad9cd11e2aa0912313817975d_101.mp4»,
                «width»: 640,
                «height»: 640
            },
        «users_in_photo»: null,
        «filter»: «Vesper»,
        «tags»: [«snow»],
        «comments»: {
            «data»: [{
                «created_time»: «1279332030»,
                «text»: «Love the sign here»,
                «from»: {
                    «username»: «mikeyk»,
                    «full_name»: «Mikey Krieger»,
                    «id»: «4»,
                    «profile_picture»: «http://distillery.s3.amazonaws.com/profiles/profile_1242695_75sq_1293915800.jpg»
                },
                «id»: «8»
            },
            {
                «created_time»: «1279341004»,
                «text»: «Chilako taco»,
                «from»: {
                    «username»: «kevin»,
                    «full_name»: «Kevin S»,
                    «id»: «3»,
                    «profile_picture»: «…»
                },
                «id»: «3»
            }],
            «count»: 2
        },
        «caption»: null,
        «likes»: {
            «count»: 1,
            «data»: [{
                «username»: «mikeyk»,
                «full_name»: «Mikeyk»,
                «id»: «4»,
                «profile_picture»: «…»
            }]
        },
        «link»: «http://instagr.am/p/D/»,
        «user»: {
            «username»: «kevin»,
            «full_name»: «Kevin S»,
            «profile_picture»: «…»,
            «id»: «3»
        },
        «created_time»: «1279340983»,
        «images»: {
            «low_resolution»: {
                «url»: «http://distilleryimage2.ak.instagram.com/11f75f1cd9cc11e2a0fd22000aa8039a_6.jpg»,
                «width»: 306,
                «height»: 306
            },
            «thumbnail»: {
                «url»: «http://distilleryimage2.ak.instagram.com/11f75f1cd9cc11e2a0fd22000aa8039a_5.jpg»,
                «width»: 150,
                «height»: 150
            },
            «standard_resolution»: {
                «url»: «http://distilleryimage2.ak.instagram.com/11f75f1cd9cc11e2a0fd22000aa8039a_7.jpg»,
                «width»: 612,
                «height»: 612
            }
        },
        «id»: «3»,
        «location»: null
    },
    …]
}

API социальных служб, такие как Twitter и Instagram, имеют свои собственные базы данных Place. Instagram называет эти места. Конечные точки местоположения позволяют вам искать идентификаторы местоположения в сервисе Instagram по координатам GPS и находить медиафайлы, отправленные из этих идентификаторов местоположения.

Вот пример запроса для известных мест (или мест) рядом с GPS-координатами Эйфелевой башни:

Instagram API Location Search

Instagram возвращает свои родные идентификаторы для известных мест поблизости. Например, вы могли бы использовать это с другими запросами местоположения, чтобы найти сообщения для СМИ из ресторана 58 Tour Eiffel.

Как только вы зарегистрируете свое приложение для разработчиков, вы сможете делать самые разные запросы, используя только ваш ключ доступа. Однако для защиты конкретных конечных точек и предоставления частной пользовательской информации API Instagram использует протокол OAuth 2.0 для аутентификации.

Вот пример использования OAuth из консоли API (описано ниже):

Пример аутентификации Instagram OAuth

Доступ по умолчанию к OAuth предназначен только для чтения, но Instagram позволяет попросить пользователя добавить другие разрешения с помощью следующих областей:

  • Комментарии: создание или удаление комментариев от имени пользователя (это разрешение ограничено только утвержденными приложениями).
  • Отношения: подписаться и отписаться от имени пользователя.
  • Любит: нравится или не нравится предметы от имени пользователя.

Вы можете узнать больше о реализации OAuth в Instagram сейчас или дождаться предстоящих эпизодов этой серии.

С помощью API-интерфейса Instagram в реальном времени вы можете подписаться на события, чтобы отслеживать активность пользователей, теги, местоположения (собственные идентификаторы мест в Instagram) и области GPS:

  • Пользователи : получать уведомления, когда пользователи, которые зарегистрировались в вашем приложении, публикуют новые фотографии. Это требует аутентификации с вашим приложением.
  • Метки : получать уведомления, когда новая фотография помечена тегами по вашему выбору.
  • Местоположения : получать уведомления, когда новые фотографии публикуются и помечаются определенным местоположением (идентификатором места).
  • География : получать уведомления, когда новые фотографии публикуются в произвольном географическом местоположении, определяемом центральной точкой и радиусом.

Для доступа в реальном времени Instagram предлагает использовать основанный на Python Tornado или Node.js. Вероятно, есть также уроки, которые вы можете извлечь из Phirehose, фреймворка Twitter в реальном времени, встроенного в PHP .

Для обновлений в реальном времени вы регистрируете собственную конечную точку обратного вызова, например, URL. Вот пример сообщения об обновлениях подписки от Instagram до конечной точки обратного вызова:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
[
    {
        «subscription_id»: «1»,
        «object»: «user»,
        «object_id»: «1234»,
        «changed_aspect»: «media»,
        «time»: 1297286541
    },
    {
        «subscription_id»: «2»,
        «object»: «tag»,
        «object_id»: «nofilter»,
        «changed_aspect»: «media»,
        «time»: 1297286541
    },
    …
]

Во-первых, это новая публикация, созданная фидом пользователей, на которого вы подписаны. Второе — это новая публикация в теге подписки.

Чтобы помочь вам начать работу и отлаживать, в Instagram есть консоль API от Apigee :

Консоль Apigee API

После регистрации в качестве разработчика вы можете легко сообщать о проблемах API команде Instagram:

Instagram API Сообщить о проблеме

Вы можете получить доступ к API Instagram с любой платформы, используя ее конечные точки REST. Instagram предоставляет библиотеки для Python и Ruby . Packagist предлагает ряд библиотек для Instagram для PHP . У IBM также есть руководство по использованию ванильного PHP с Instagram .

Пользователи Instagram сохраняют право собственности на свои фотографии и видео. Поскольку авторские права так важны для авторского права, Instagram говорит: «Вы обязаны убедиться, что вы уважаете это право».

Вам также не разрешено копировать опыт приложения Instagram. Инновации вместо этого.

Прежде чем вы начнете использовать API, у нас есть несколько рекомендаций, о которых мы хотели бы вам рассказать. Вы можете ознакомиться с полными Условиями использования API здесь.

Как и в случае с любым API веб-сервисов, существуют ограничения скорости , которых вы должны придерживаться или блокировать. Например, приложения ограничены 5000 звонков в час.

Я надеюсь, что вы заинтригованы, чтобы начать использовать Instagram API. В следующем эпизоде ​​я проведу вас через все, что вам нужно, чтобы начать делать запросы к конечной точке. Если вы хотите начать немедленно, вы можете проверить поиск Свидетелей места преступления с помощью API социальных сетей .

Пожалуйста, не стесняйтесь оставлять свои вопросы и комментарии ниже. Вы также можете связаться со мной в Twitter @reifman или написать мне напрямую. Вы также можете просмотреть мою страницу инструктора Tuts +, чтобы увидеть другие уроки, которые я написал.