Недавно мне понадобилось использовать "какой-нибудь рест апи" для написания тестового задания для ios. Все говорили, что это очень просто и любой джуниор разберется.
Для начала нужно иметь аккаунт в самом Twitter.
Затем нужно создать что-то типа учетки для приложения в Twitter (по ссылке https://dev.twitter.com/ - Ваша учетка - My applications - Create a new application).
Для приложения можно задать кое-какие даные и настройки, но это не важно и не все они обязательны. Мне достаточно было использовать только функцию поиска и поэтому хватало прав только для чтения.
Итак, после регистрации приложения у нас появляются всякие связанные с ним даные, но нам нужны только Consumer key и Consumer secret (по крайней мере в моем случае).
Что делать с этим далее подробно описано на страничке https://dev.twitter.com/docs/auth/application-only-auth
Если кратко, то чтоба апи нам ответило нужно предоставить ему наши специальным образом подготовленные ключ и секрет (key и secret) в POST запросе. Если этот запрос будет правильным, то сервер вернет нам токен, коорый мы будем крепить к нашим последующим GET запросам для работы с апи.
Подготовка ключа и секрета заключается в их склеивании со вставкой между ними двоеточия и перевод полученной строки в Base64 encode.
Consumer key: xvz1evFS4wEEPTGEFPHBog
Consumer secret: L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
То соединяем их через двоеточие и получаем
xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
Кодируем это дело в Base64 (например онлайн кодером\декодером http://www.base64decode.org/) и получаем
eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
Нужно сказать, что для экспериментов я пользовался замечательной бесплатной утилитой (а вернее приложением для google chrome) - Rest Console
В ней можно правильно сформировать нужный запрос, даже особо ничего не зная про рест апи и связанные с ним вещи.
Request URI:
https://api.twitter.com/oauth2/token
Content-Type:
application/x-www-form-urlencoded;charset=UTF-8
Encoding:
Accept-Encoding: gzip
RAW Body:
grant_type=client_credentials
Authorization Header:
Basic иТутВставляемПолученныйВПрошломШагеПерекодированныйКлючИСекрет
получится что-то вроде
Basic pQVS5hVJpoVaROVcN...YJeFZVURSNZBYoNBW2s=
Нажимаем POST и видим в Responce
P.S. позже выяснилось, что все это можно упростить - задать
Request URI как https://api.twitter.com/oauth2/token?grant_type=client_credentials и дополнительно заполнить только Authorization.
Описание возможных параметров есть тут: https://dev.twitter.com/docs/api/1.1/get/search/tweets
Мы будем использовать самый простой - просто укажем ключевое слово.
Заполняем поля (не забываем снять чекбоксы с уже ненужных полей)
Request URI:
https://api.twitter.com/1.1/search/tweets.json?q=restkit
restkit здесь - это искомое слово. Можно вставить какое Вам угодно.
Encoding:
Accept-Encoding: gzip
Authorization Header:
Bearer иТутВставляемПолученныйВПрошломЗапросеТокен
получится что-то вроде
Bearer AAAAAAAAAA...QShJoaOc..JF%VRNB%oB%2s
Жмем GET и видим в Responce body наш долгожданный JSON с результатами поиска!
Для начала нужно иметь аккаунт в самом Twitter.
Затем нужно создать что-то типа учетки для приложения в Twitter (по ссылке https://dev.twitter.com/ - Ваша учетка - My applications - Create a new application).
Для приложения можно задать кое-какие даные и настройки, но это не важно и не все они обязательны. Мне достаточно было использовать только функцию поиска и поэтому хватало прав только для чтения.
Итак, после регистрации приложения у нас появляются всякие связанные с ним даные, но нам нужны только Consumer key и Consumer secret (по крайней мере в моем случае).
Что делать с этим далее подробно описано на страничке https://dev.twitter.com/docs/auth/application-only-auth
Если кратко, то чтоба апи нам ответило нужно предоставить ему наши специальным образом подготовленные ключ и секрет (key и secret) в POST запросе. Если этот запрос будет правильным, то сервер вернет нам токен, коорый мы будем крепить к нашим последующим GET запросам для работы с апи.
Подготовка ключа и секрета заключается в их склеивании со вставкой между ними двоеточия и перевод полученной строки в Base64 encode.
Шаг первый - подготовка данных для получения токена
Если у нас естьConsumer key: xvz1evFS4wEEPTGEFPHBog
Consumer secret: L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
То соединяем их через двоеточие и получаем
xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
Кодируем это дело в Base64 (например онлайн кодером\декодером http://www.base64decode.org/) и получаем
eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
Нужно сказать, что для экспериментов я пользовался замечательной бесплатной утилитой (а вернее приложением для google chrome) - Rest Console
В ней можно правильно сформировать нужный запрос, даже особо ничего не зная про рест апи и связанные с ним вещи.
Шаг второй - получение токена
Открываем Rest Console и заполняем следующие поля такими данными:Request URI:
https://api.twitter.com/oauth2/token
Content-Type:
application/x-www-form-urlencoded;charset=UTF-8
Encoding:
Accept-Encoding: gzip
RAW Body:
grant_type=client_credentials
Authorization Header:
Basic иТутВставляемПолученныйВПрошломШагеПерекодированныйКлючИСекрет
получится что-то вроде
Basic pQVS5hVJpoVaROVcN...YJeFZVURSNZBYoNBW2s=
Нажимаем POST и видим в Responce
- {
- "token_type": "bearer",
- "access_token": "ANTAA9tBBcBIT3i2Bo0Qu...Q3Rqn8OWRMp^Zs7JvnpS7G8x"
- }
P.S. позже выяснилось, что все это можно упростить - задать
Request URI как https://api.twitter.com/oauth2/token?grant_type=client_credentials и дополнительно заполнить только Authorization.
Шаг третий - поиск
Теперь, когда токен получен можем отправлять GET запрос уже непосредственно для поиска по твитам.Описание возможных параметров есть тут: https://dev.twitter.com/docs/api/1.1/get/search/tweets
Мы будем использовать самый простой - просто укажем ключевое слово.
Заполняем поля (не забываем снять чекбоксы с уже ненужных полей)
Request URI:
https://api.twitter.com/1.1/search/tweets.json?q=restkit
restkit здесь - это искомое слово. Можно вставить какое Вам угодно.
Encoding:
Accept-Encoding: gzip
Authorization Header:
Bearer иТутВставляемПолученныйВПрошломЗапросеТокен
получится что-то вроде
Bearer AAAAAAAAAA...QShJoaOc..JF%VRNB%oB%2s
Жмем GET и видим в Responce body наш долгожданный JSON с результатами поиска!
- {
- "statuses": [{
- "metadata": {
- "result_type": "recent",
- "iso_language_code": "en"
- },
- ...