Социальные сети уже давно стали частью нашей жизни. Практически у каждого пользователя есть персональная страничка в таких сервисах как вконтакте, фейсбук, твиттер и другие. И поскольку такие сервисы очень популярны в наше время, они сделали специальное API. При помощи методов которые предоставляет API конкретной системы, вы можете получить список пользователей, список фотографий, даже найти всех пользователей в определенной области на карте, список действий очень большой.
Однако, не каждый пользователь может получить доступ к этим данным. Большинство сервисов требуют регистрации и создания специального приложение, которое и будет работать с методами определенного сервиса.
Итак, сегодня мы рассмотрим пример работы с VK API, в котором будем получать список пользователей c именем «Маша» в городе «Москва». Будем искать Маш в Москве.:)
Первым делом нам нужно создать приложение. Для создания приложения переходим по ссылке(https://new.vk.com/dev -> Создать приложение).
Vkontakte API Python | Как работать с методами?
Вводим название и поскольку мы разбираем пример на PHP используя веб-сервер, выбираем тип приложения — «Веб-сайт«. Указываем адрес вашего сайта и базовый домен(если делаете на локальном веб-сервере, пишем http://localhost). Нажимаем кнопку «Подключить сайт» и ваше приложение создано, часть пути пройдена.
Приступаем к программированию. Существует множество классов для работы с API сайтов, однако мы будем писать все сами, чтобы понять основные принципы работы.
Для получения доступа к методам API, нужно выполнить несколько шагов:
- Авторизировать пользователя;
- Получить ключ доступа;
- Получить access_token;
- Выполнить запрос к методу;
4 простых шага, но на деле немного сложнее.
Авторизируем пользователя:
session_start(); $client_id = ‘1234567’; $redirect_uri = ‘http://localhost’; $display = ‘page’; $scope = ‘friends,groups’; $response_type = ‘code’; $auth_uri = «https://oauth.vk.com/authorize?client_id= redirect_uri=response_type=;
Разбираем по пунктам, что же тут написано:
- $client_id — идентификатор вашего приложения, присвоенный системой;
- $redirect_uri — страница на которую будет перенаправлен пользователь после успешной авторизации;
- $display — как отображается страница входа, в данном случае это будет отдельная страница;
- $scope — разрешения для приложения, указывать через запятую. Полный список тут;
- $response_type — тип ответа, в данном случае будет предоставлен JSON;
- $auth_uri — формируем строку для авторизации пользователя, передвая нужные параметры;
С авторизацией пользователя разобрались, теперь нужно получить acces_token. После успешной авторизации нам в get запросе передают специальный код, с помощью которого мы сможем получить токен.
Получаем access_token:
if(isset($_GET[‘code’])) < $code = $_GET[‘code’]; $client_secret = ‘you_application_password’; $acces_uri = «https://oauth.vk.com/access_token»; $fields = array( ‘client_id’ =>$client_id, ‘client_secret’ => $client_secret, ‘redirect_uri’ => $redirect_uri, ‘code’ => $code ); $acces_uri .= «?client_id=; $acces_uri .= «client_secret=; $acces_uri .= «redirect_uri=; $acces_uri .= «code=»; $res = file_get_contents($acces_uri); $response_string = json_decode($res,true); $_SESSION[‘token’] = $response_string[‘access_token’];
Тут все довольно просто, записываем полученный код в переменную $code , формируем ссылку с нужными нам данными — $access_uri . Далее при помощи функции file_get_contents выполняем запрос и в ответ получаем JSON объект который сразу же декодируем в массив. В конце просто полученный токен записываем в переменную сессии. Не очень хороший подход, лучше сразу писать в базу данных, однако цель этого руководства не в этом.
VK API #1 Receiving access token (standalone app)
$client_secret — «Защищенный ключ» вашего приложения, без него работать не будет
Вот теперь у нас уже все готово для того, чтобы получить список пользователей с определенного города. Алгоритм работы очень простой: сформировать запрос, выполнить, получить данные.
if (isset($_SESSION[‘token’])) < $name = ‘Маша’; $url = $url = «https://api.vk.com/method/users.search?city_id=1count=1000; $res = file_get_contents($url); $users_data = json_decode($res,true); $users_count = array_shift($users_data[‘response’]); $users_list = $users_data[‘response’]; >
И не забываем отобразить ссылку для авторизации которая у нас сформирована и записана в переменную $auth_uri .
Данный запрос вернет нам 1000 пользователей с Москвы. На выходе мы получим количество затронутых записей и ассоциативный массив с пользователями записанный в переменную $users_list , который уже можем использовать на свое усмотрение.
Единственный нюанс в том, что API не позволяет выбрать большее количество пользователей, даже если использовать параметр offset в строке запроса. К сожалению такое ограничение в VK API.
Полный список параметров VK API для запроса можете посмотреть в документации.
Надеюсь статья была вам полезна и вы узнали что-то новое для себя, если же нет, оставляйте пожалуйста ваши комментарии.
В следующей статье разберем реальный пример в котором будут реализованы некоторые функции управления сообществом, а именно постинг записей по расписанию, удаление и т.д.
Источник: adminnotes.info
Алгоритм обращения программы к API VKontakte
Часто бывает мы хотим автоматизировать то или иное действие. Порой спешка или просто лень не дает нам возможности ознакомиться со всей документацией(по API VK).
Разработать программу для работы с API ВКонтакте проще чем кажется. Подойдет любой язык, умеющий отправлять http get запросы (соответственно получать ответ). Например: Delphi, shell, C, Perl, PHP, Python и т. п.
Итак, разберем алгоритм создания программы и интеграции её с ВКонтакте.
Первое что нам нужно сделать, это создать(зарегистрировать) Desktop-приложение.
Нажимаем на кнопку «Подключить сайт» в разделе «Разработчикам»
Вводим название и выбираем тип — Standalone-приложение.
После чего, на ваш мобильный телефон (привязанный к аккуанту) придет код, который необходимо ввести в проверочное поле.
Создается приложение, в настройках нам потребуется ID приложения.
- Открытие окна браузера для аутентификации пользователя на сайте Вконтакте.
- Пользователь разрешает доступ приложению к запрашиваемым правам.
- Вконтакте возвращает приложению access_token для доступа к API.
_http://api.vk.com/oauth/authorize?client_id=##ID##scope=##ПРАВА##response_type=token
, где:
##ID##- Id вашего приложения, полученного ранее;
##ОТОБРАЖЕНИЕ## — внешний вид окна авторизации(page, popup, touch и wap).
##ПРАВА##- список прав доступа приложения к данным пользователя. Указываются через запятую(notify,friends,photos,audio,video,docs,notes,pages,wall,groups,messages,ads) либо в цифровом виде, суммируя необходимые права (1,2,4,8,16,32,64. 262144).
Пример: Получить права на Доступ к друзьям и Доступ к фотографиям пользователя:
2 + 4 = 6; scope=1026 либо scope=friends,photos
Подробнее о правах доступа можно почитать здесь и здесь.
В ответ на запрос, сервер вернет:
access_token=93f22a20ddf1174f939108d43e936cd6bb193469344639c2d1c268f3f65fa86 user_id=11347652
, где access_token — необходимый нам параметр, для отправки последующий запросов к API Вконтакте;
expires_in — время жизни token, после истечения необходимо обновить
( UPD: если в правах указать «offline» или 999999, то токен будет бесконечным);
user_id — id пользователя.
Связь программа-приложение-пользователь установлена. Теперь мы можем отправлять любые запросы к Api(в мерах разрешенных пользователем).
Синтаксис запросов:
_https://api.vkontakte.ru/method/##МЕТОД##?##НАЗВАНИЕ_ПЕРЕМЕННОЙ##=##ЗНАЧЕНИЕ_ПЕРЕМЕННОЙ##
//запишем токен, полученный ранее
$day = ’15’;
$month = ’11’;
//Дата, до которой будем отсчитывать время
$year = ‘2011’;
function dateDiff($startDay, $endDay) $endDay = strtotime($endDay);
$startDay= strtotime($startDay);
$difference = abs($endDay — $startDay);
$return[‘days’] = floor($difference / 86400);
$return[‘hours’] = floor($difference / 3600) % 24;
$return[‘minutes’] = floor($difference / 60) % 60;
$date=dateDiff(date(«j-n-Y G:i»),’19-11-2011 9:00′);
$phrases = «/var/www/public/1.txt»;//файл содержащий фразы
$z = file ($phrases);
$cz = count ($z) -1;
$r = rand (0, $cz);
//случайная фраза из файла
$text=»Осталось $date[days] дней, $date[hours] часов.$z[$r]»;
$sRequest = «https://api.vkontakte.ru/method/status.set?text=$text;
echo $text;
// ответ от Вконтакте
$oResponce = json_decode(file_get_contents($sRequest));
Теперь добавляем pub.php в cron с обновлением, не чаще чем раз в минуту, и наблюдаем результат.
Таким способом можно автоматически публиковать статьи, фотографии, видео, отправлять сообщения и много других интересных вещей.
Экспериментируйте! Благодарю за внимание.
UPD: перед отправкой текстовую строку необходимо кодировать $text=urlencode($text);
Источник: habr.com
Сайт на Laravel. Урок 6. Vk API
Привет! Мы написали первый контроллер и маршрут для него. Теперь сделаем этот контроллер немного полезнее для нас. Используем официальный Vk API, чтобы получить информацию о подписчиках нашего сообщества и использовать эту информацию для нашего проекта.
VK API
Сначала разберемся, что такое API. Расшифровывается это как программный интерфейс приложения или интерфейс прикладного программирования (англ. application programming interface) Подробно можно прочитать в википедии.
В нашем случае Api можно понять как способ получить нужные данные от другого сайта или приложения. Например, мы хотим получать информацию о подписчиках сообщества каждую минуту и использовать в логике нашего сервиса. Мы бы могли написать парсер для группы в вк. И заходить на страницу как обычный пользователь, искать нужную информацию и копировать ее.
Мы бы так и сделали, если бы у вк не было более удобного апи. Однако, такой подход имеет много недостатков. Если верстка страницы изменится, то парсер придется переписывать. Вместе с нужной информацией нам придется обработать очень много лишнего. Из-за этого возрастает количество памяти в приложении и время обработки.
Да и сам вконтакте был бы против использования парсеров.
Поэтому они сами подготовили способ получить нужную информацию в удобном формате. Так называемый API. Для разработчиков даже есть подробная документация. Доступная на страницах знакомства и списка методов.
Чтобы получить информацию о подписчиках нашей группы через апи необходим ключ доступа. Создать его можно в самом сообществе в разделе настроек.
Подписчики сообщества
Когда ключ для VK API создан, мы можем написать метод для обращения к апи. Сразу создадим специальный класс для laravel, в котором соберем функции для работы с вк.
Создадим в каталоге app новый подкаталог Library. В этом подкаталоге будем хранить файлы php которые будут содержать наши вспомогательные классы. Обращаться к ним мы будем из контроллеров, а доступа к ним от маршрутизатора не требуется.
В этом подкаталоге создадим файл VKAPI.php с несколькими закрытыми свойствами и методом конструктора.
token = $token; $this->groupId = $groupId; > >
Таким образом, при создании экземпляра мы передадим в конструктор наш апи ключ и идентификатор сообщества.
Также нам понадобится закрытый метод для непосредственного обращения к апи вконтакте. Дополним наш класс следующим методом.
private function apiRequest($method, $data = array()) < $data[‘v’] = $this->v; $data[‘access_token’] = $this->token; $string = http_build_query($data); $url = ‘https://api.vk.com/method/’.$method.’?’; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url.urldecode($string)); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false ); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); >
Здесь мы используем библиотеку curl для формирования get запроса к апи и передаем название метода и наши идентификационные данные.
Теперь напишем методы для извлечения подписчиков из сообщества и доступа к ним.
public function setSubscribers() < $data = [ ‘group_id’ =>$this->groupId, ‘sort’ => ‘time_desc’, ‘fields’ => ‘photo_max’ ]; $members = $this->apiRequest(‘groups.getMembers’, $data); foreach($members[‘response’][‘items’] as $member)< $this->subscribers[] = $member; $this->subscribersId[] = $member[‘id’]; > > public function getSubscribers()< return $this->subscribers; > public function getSubscribersId()< return $this->subscribersId; >
Не забудем добавить свойства subscribers и subscriberId в начало класса.
Класс VKAPI.php
В итоге наш класс для доступа к апи имеет такой вид.
token = $token; $this->groupId = $groupId; > public function setSubscribers() < $data = [ ‘group_id’ =>$this->groupId, ‘sort’ => ‘time_desc’, ‘fields’ => ‘photo_max’ ]; $members = $this->apiRequest(‘groups.getMembers’, $data); foreach($members[‘response’][‘items’] as $member)< $this->subscribers[] = $member; $this->subscribersId[] = $member[‘id’]; > > public function getSubscribers()< return $this->subscribers; > public function getSubscribersId()< return $this->subscribersId; > private function apiRequest($method, $data = array()) < $data[‘v’] = $this->v; $data[‘access_token’] = $this->token; $string = http_build_query($data); $url = ‘https://api.vk.com/method/’.$method.’?’; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url.urldecode($string)); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false ); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); > >
Клиентский код
Теперь мы можем использовать класс доступа в нашем контроллере. Для этого изменим контроллер cover таким образом.
setSubscribers(); return $cover->getSubscribers(); > >
Здесь мы подключаем файл класса. Создаем экземпляр и передаем id группы и ключ. А после этого выполняем сеттер и геттер. Когда мы обратимся к странице из браузера, то получим json объект со всеми подписчиками сообщества.
Настройка Apache в Docker
Теперь осталось настроить вебсервер, чтобы корень сайта ссылался на правильный каталог нашего фреймворка.
Зайдем на виртуальный CentOS сервер и проверим, что контейнеры проекта запущены и работают в штатном режиме.
docker ps
Зайдем внутрь контейнера с вебсервером с помощью команды exec и вызовем командную оболочку.
docker exec -it anonymous_www_1 /bin/bash
Нам нужен файл настроек сервера apache. Он находится в папке /etc/. Отредактируем его.
nano /etc/apache2/sites-enabled/000-default.conf
Найдем строку DocumentRoot и добавим каталог public
DocumentRoot /var/www/html/public
Сохраним файл и выйдем из контейнера командой exit.
Возможные проблемы
Во-первых, в нашем контейнере вебсервера не установлены программы nano и mc. Установить их можно выполнив команды apt внутри контейнера.
apt-get update apt-get install mc -y apt-get install nano-y
Во-вторых, возможно наш класс VKAPI.php не будет найдем фреймворком. Тогда необходимо исправить файл composer.json, а именно добавить наш каталог с классами в раздел autoload.
«autoload»: < «psr-4»: < «App\»: «app/», «Database\Factories\»: «database/factories/», «Database\Seeders\»: «database/seeders/» >>,
И обновить информацию внутри фрейвморка выполнив команду composer внутри каталога фреймворка.
composer dump-autoload
Заключение
Мы написали класс для работы с апи вконтакте и научились его использовать. Настроили вебсервер для более удобной работы. И теперь мы можем использовать данные о нашем сообществе, чтобы закончить приложение.
До того, как вы уйдете, посмотрите наши статьи и уроки про Ардуино. Например, подключение OLED дисплея к Ардуино.
Источник: arcadepub.ru