- Регистрация
- 9 Май 2015
- Сообщения
- 1,227
- Баллы
- 155

Для любого серьёзного сайта с серьёзной посещаемостью разрабатывают API-функции. Сайт, с посещаемостью, которая оценивается миллионами человек, конечно не будет в стороне. Поговорим о работе с сайтом vk.com - социальной сети, объединившей людей как с России и СНГ, так и с зарубежья.
Теперь, что же такое API - функция? Это обычная функция (как в pascal или Делфи), которая что-то вернёт (на то она и функция). Например, собираемся мы узнать имя человека, а знаем только его ID. Что мы будем делать? Ну лично я бы полез в исходный код, спарсил бы оттуда значения, если они открыты. А если скрыты? Тогда надо думать и искать пути, как же нам узнать имя человека. Вот что бы такого не было, и существуют функции, которые может использовать разработчик для комфортной работы с сайтом. Вместо 20-ти строчек кода мы можем выполнить 1 запрос с функцией, получив при этом в ответе все необходимые параметры.
Чем это (использование API) выгодно сайту? Распространением приложений для сайта, соответственно и увеличением аудитории, да и просто комфортной работой пользователей с сайтом (различные аудиопрееры, аудиосейверы, мессендж-клиенты). Чем это выгодно разработчику приложения? Зависит как от приложения, так и от разработчика. Можно зарабатывать как на приложении (голоса), так и на рекламе, данной на сайте этого приложения.
Пример общего алгоритма работы с сайтом я буду рассматривать на языке программирования Делфи. Сам алгоритм, в последующем, вы можете использовать в любом языке и любом приложении, так как я рассмотрю все (исключая платёжные и рекламые) формы запросов для различных API.
Для начала скажу, что, так как мы делаем всё с помощью API, я подразумеваю, что вы зарегистрировали заранее своё приложения.
Все методы (говори API-функции) для работы с vk представлены на данной странице - . Разделить их можно на 2 типа - открытые методы и закрытые, которые требуют ключ приложения (как это что такое ключ? вы точно прочли предыдущую статью?:) ). Открытые методы представляют собой те API-функции, которые не требуют ключа, поэтому мы, фактически, можем обращаться к ним и без зарегистрированного приложения. Например, метод users.get является открытым, о чём можно догадаться вот по этой сноске на странице описания метода:

Данный метод возвратит данные со стены пользователя.
Отправляются открытые методы обычным GET-запросом в данном общем виде:
Код:
https://api.vk.com/method/ИМЯ_МЕТОДА?ПАРАМЕТР1=ЗНАЧЕНИЕ1&ПАРАМЕТР2=ЗНАЧЕНИЕ2.
Так как выше я привёл в пример метод users.get, то сейчас и рассмотрим его вызов на практике. На форму кидаем 6 компонентов: 2 Button, memo и ещё 1 memo, IdSSLIOHandlerSocketOpenSSL, idhttp.
IdSSLIOHandlerSocketOpenSSL - страшное название, не правда ли? Зато этот компонент, идущий в XE-версиях в стандартном наборе, позволяет с лёгкостью работать с протоколом ssl. Настраивается и привязывается он очень легко: в компоненте idhttp щёлкните по свойству IOHandler, там в выпадающем списке выберете IdSSLIOHandlerSocketOpenSSL(1/2/n).
Пример формы:

Теперь на событии onclick кнопки "Отправить запрос" напишем следующее:
Код:
begin
data:= TStringList.Create;
data.Text:= form1.IdHTTP1.Get('https://api.vk.com/method/users.get?user_ids=1&fields=sex,bdate,city');
form1.sMemo1.Text:= data.Text;
end;
У метода 3 параметра - user_ids - ID юзера, fields - то, что хотим получить (что можно - смотрите ) и name_case - падеж склонения (не обязателен).
Нажмём кнопку "Отправить запрос" и получим в Memo1 вот что:
Код:
{"response":[{"uid":1,"first_name":"Павел","last_name":"Дуров","sex":2,"bdate":"10.10.1984","city":"2"}]}
Именно так происходят запросы ко всем (или почти всем) открытым методам.
ЗАЩИЩЁННЫЕ МЕТОДЫ.
В закрытом методе структура та же, что и в открытом, но добавляется лишь 1 параметр - access_token. Что это и как его получить - смотрим в статье, ссылка на которую была сверху. Продемонстрирую на практике. Возьмём для этого метод photos.createAlbum (первое, на что взгляд упал:) ). Я надеюсь, что token вы умеете получать, как уже было сказано выше. Код с запросом выглядит следующим образом:
Код:
token:= virvytoken(WebBrowser1.LocationURL);
data:= TStringList.Create;
ShowMEssage(token);
data.Text:= form1.IdHTTP1.Get('https://api.vk.com/method/photos.createAlbum?title=НАЗВАНИЕ_АЛЬБОМА&group_id=ID_ГРУППЫ&description=ПОДПИСЬ_АЛЬБОМА&access_token='+token);
form5.sMemo1.Text:= data.Text;
Видим, что в конце добавлен параметр - access_token=token. В переменной токен лежит сам секретный ключ. В результате функция вернёт следующее:
Код:
{"response":{"aid":11111111,"thumb_id":-1,"owner_id":-123123,"title":"TestAlbum","description":"Test","created":123123,"updated":123123,"privacy":0,"comment_privacy":0,"size":0,"can_upload":1}}
thumb_id — идентификатор фотографии, которая является обложкой альбома;
owner_id идентификатор пользователя или сообщества, которому принадлежит альбом;
title — название альбома;
description — описание альбома;
created — дата создания альбома в формате unixtime;
updated — дата обновления альбома в формате unixtime;
size — количество фотографий в альбоме;
privacy — настройки приватности для просмотра альбома;
comment_privacy — настройки приватности для комментирования альбома;
can_upload — может ли текущий пользователь добавлять фотографии в альбом.
Ну и подтверждение тому, что всё создано:

Давайте подведём итоги.
Алгоритм сложился, и выглядит он так:
1) Смотрим, требует метод, который нам нужен, token, или же нет.
2) Если нет, то отправляем запрос вида
3) Если требует, то авторизируем приложение, получаем токен, и отправляем запрос вида
.
4) Не забываем, что запросы вида GET.
Статья прежде всего рассчитана на новичков, кто не работал с vk-api ранее. Показывает алгоритм, актуальный на 2014 год.
Спасибо за внимание.