Что нового

Обращение к API ВКонтакте

---Zak---

Скриптер
Сообщения
455
Репутация
120
[info]
C-H08EzeVP8.jpg

AutoIt: 3.3.14.2
Версия: 1.4.1.1 (beta)/(1.4-b1)
Windows:
7, 8, 8.1, 10
Категория: Разное

Описание: Обращение к API ВКонтакте при помощи AutoIt. Получение данных через API на основе "Документации ВКонтакте" в формате JSON.

Автор(ы):
---Zak---
[/info]

ВНИМАНИЕ !!!

Данный метод использует скрытую авторизацию, а так же скрытое подтверждение разрешение на добавление приложения.
Распространяется "как есть", автор не несет за собой никаких последствий, ответственности, обязательств или иного рода влияния причин связанных с работой ПК и/или влияния на функционал работы сайта vk.com с использованием данного кода. Использовать на свой страх и риск.

ПОДРОБНЕЕ:
  • Данный пример взаимодействует с методами API ВКонтакте и на основе полученных данных обрабатывает информацию.
  • Не требуется открытия какого-либо браузера - запросы к API ВКонтакте отправляются через службу WinHttp.
  • Скрипт позволяет получить данные API не указывая никаких данных для обработки, т.к. все данные будут обработаны автоматически и получены в виде 2D массива.
  • По-умолчанию ID standalone-клиента (необходим для работы с API) = 2987875. Вы можете создать собственный standalone-клиент и при авторизации указать другой ID (см. документацию API ВКонтакте), а так же заменить ID клиента по-умолчанию: см. функцию _vAPI_OAuth2 - переменная $VKAPI_ID

АКТУАЛЬНАЯ ВЕРСИЯ: 1.4.1.1 (1.4-b1)
  • В данный момент осуществляется привязка к версии API ВКонтакте (5.53) из-за отсутствия корректного получения актуальной версии.
  • С вводом режима 'offline' на уровне "Права доступа для токена пользователя" отсутствует необходимость вести разработку в сторону получения и обработки 'Cookie' после авторизации пользователя. К сожалению, данный метод еще не реализован.
  • В некоторых случаях функция __JSONDecode работает не корректно... Временно стоят 'легкие заглушки'.

ОСНОВНЫЕ ФУНКЦИИ:
Код:
;~ ===============================================================================
;~    _vAPI_OAuth2 - первоначальная авторизации пользователя
;~    _vAPI_GETMethod - выполнение запросов к API ВКонтакте
;~    _vAPI_TOKENParse - получение access_token 
;~    _vAPI_SCOPE - разрешение прав доступа
;~
;~    _ARRS - возвращение позиции столбца в 2D массиве по первичному элементу
;~    _WinHTTP_FileUpload - функция используется для загрузки изображений
;~
;~    _vGUI_CAPTCHA - вывод GUI с требованием ввода кода с картинки (Captcha). 
;~    _vGUI_AUTHCODE - вывод GUI ввода данных для двухэтапной аутентификации
;~
;~    __JSONDecode - декодирование JSON ответа API и реализации 2D массива
;~ ===============================================================================



ИНСТРУКЦИЯ (1.4-b1):
1. Подключить UDF VK_desktop_API.au3
2. Вызвать функцию первоначальной авторизации _vAPI_OAuth2 с 2 обязательными параметрами
  • 'VKAPI_login' - адрес эл. почты или телефон
  • 'VKAPI_pass' - пароль
  • 'VKAPI_ID' - ID standalone-клиента (по-умолчанию = 2987875)
  • 'VKAPI_SCOPE' - запрашиваемые права доступа приложения (по-умолчанию: см. версию скрипта)
3. Вызвать функцию _vAPI_GETMethod указав название метода
  • 'VKAPI_METHOD' - название метода API ВКонтакте
  • 'VKAPI_PARAM' - дополнительные параметры метода API ВКонтакте
4. Результатом функции _vAPI_GETMethod будет глобальный массив $aFun. При необходимости есть возможность сохранять результат _vAPI_GETMethod в свою переменную

ПРИМЕР (1.4-b1):
Код:
#include <VK_Desktop_API.au3>
;~ -------------------------------------------------------------------------------
;~ Name: Example VK_Desktop_API
;~ Author: Valan4ig
;~ NickName: ---Zak---
;~ Version: 1.4.1.1 (1.4-b1)
;~ Author URI: http://vk.com/id859000
;~ -------------------------------------------------------------------------------

   $VKAPI_login = 'YouEmailOrPhone'
   $VKAPI_pass 	= 'YouPassword'
   
;~ Первоначальная авторизация пользователя с указанием ID standalone-клиента по-умолчанию (2987875), а так же прав доступа (136232095)
_vAPI_OAuth2($VKAPI_login, $VKAPI_pass)

;~ Получает настройки текущего пользователя в данном приложении.
_vAPI_GETMethod("account.getAppPermissions")
   _ArrayDisplay($aFun, '$aFun')


Код:
#include <VK_Desktop_API.au3>
;~ -------------------------------------------------------------------------------
;~ Name: Example VK_Desktop_API
;~ Author: Valan4ig
;~ NickName: ---Zak---
;~ Version: 1.4.1.1 (1.4-b1)
;~ Author URI: http://vk.com/id859000
;~ -------------------------------------------------------------------------------

   $VKAPI_login = 'YouEmailOrPhone'
   $VKAPI_pass 	= 'YouPassword'
   
;~ Первоначальная авторизация пользователя с указанием ID standalone-клиента по-умолчанию (2987875), а так же прав доступа к друзьям, фотографиям, аудиозаписям
Local $aLOCAL = ['friends', 'photos', 'audio']
_vAPI_OAuth2($VKAPI_login, $VKAPI_pass, Default, $aLOCAL)

;~ Возвращает список аудиозаписей пользователя. Количество аудиозаписей = 20
_vAPI_GETMethod("audio.get", "count=20")
      _ArrayDisplay($aFun, '$aFun')


Код:
#include <VK_Desktop_API.au3>
;~ -------------------------------------------------------------------------------
;~ Name: Example VK_Desktop_API
;~ Author: Valan4ig
;~ NickName: ---Zak---
;~ Version: 1.4.1.1 (1.4-b1)
;~ Author URI: http://vk.com/id859000
;~ -------------------------------------------------------------------------------

   $VKAPI_login = 'YouEmailOrPhone'
   $VKAPI_pass 	= 'YouPassword'
   
;~ Первоначальная авторизация пользователя с указанием ID standalone-клиента по-умолчанию (2987875), а так же прав доступа к API в любое время с бессрочным ключом
_vAPI_OAuth2($VKAPI_login, $VKAPI_pass, Default, 'offline')

;~ Возвращает информацию о сообществе идентификатор или короткое имя сообщества равному sosimc (официальная группа ВКонтакте группировке 'Ленинград")
_vAPI_GETMethod("groups.getById", "group_id=sosimc")
   _ArrayDisplay($aFun, '$aFun')

СКРИНШОТЫ:



ИСХОДНИКИ:


ИСТОРИЯ ВЕРСИЙ:
  • 1.0.1 (beta)
    Исходная/тестовая версия (без проверок на различные ошибки, без использования GUI).
    Авторизация пользователя c использование Desktop приложение: Добавление пользователю Desktop приложение с правами "16127"
  • 1.0.2 (beta)
    Небольшие косметические изменения в коде + добавление примера получение списка аудио-записей другого пользователя через его "короткое имя"
  • 1.0.3 (beta)
    Изменение авторизации пользователя, исправление ошибок.
    Изменение прав приложений на "2015231"
  • 1.1.0 (beta)
    Глобальная переработка скрипта отвечающего за обработку полученных данных.
    Подключение дополнительной библиотеки.
  • 1.1.1 (beta)
    Предоставление в виде UDF.
    Перерабока функций: авторизация, обработка полученных данных.
    Добавление новых вспомогательных функций.
  • 1.1.2 (beta)
    Вывод при необходимости диалога "Captcha needed" на этапе авторизации пользователя
  • 1.1.3 (beta)
    Перерабока функций: авторизация.
  • 1.1.3.1 (beta)
    Перерабока функций: авторизация - исправление ошибок (вывод и обработка "капчи").
  • 1.1.4 (beta)
    Тестовая версия, которая может использовать "куки" после авторизации на сайте vk.com.
    Тестовый файл находится в отдельной папке и не рекомендуется использовать на другом компьютере: "куки" на данный момент не зашифрованы - сохраняются в отдельном файле (в открытом виде). Использовать на свой страх и риск - при передаче иным лицам данного файла может повлечь за собой печальные последствия.
  • 1.1.4.1 (beta)
    Исправление ошибок в тестовой версии с использованием "куков"
  • 1.2.2.1 (rc1)
    Перевод на стадию разработки: Релиз-кандидат
  • 1.3.0.1 (1.3-a)
    Изменение метода получения данных: используем JSON
  • 1.3.0.2 (1.3-a2)
    Реализована двухэтапная аутентификация (подтверждение входа через SMS)
  • 1.4.1.1 (1.4-b1)
    Полное или частичное переименование функций + частичное обновление функций библиотеки.
    Получение 2D массива на стадии декодирования JSON ответа.
    Привязка к версии API ВКонтакте.

ПРИМЕЧАНИЕ:
01-09-2016 | Прекращена поддержка скрипта работающего под ОС Windows XP из-за отсутствия возможности тестирования, но это не означает, что скрипт не будет работать в данной ОС.

О СКРИПТЕ:
Вы можете вносить изменения и доработки в скрипт, а так же на основе данного кода составлять полноценные программы и т.п.

ИСТОЧНИК:
Google
Autoit-script.ru
ВКонтакте - Разработка приложений
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Re: Обращение к API (vk.com) через WinHttp

Ну собственно мы и искали такое решение. Почему у нас в теме не отписался? В GitHub бы добавил...
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Обращение к API (vk.com) через WinHttp

2 Medic84: признаюсь - поиском не пользовался ;) Возможно просто отбросил все мысли и решил взять дело в собственные руки.
Если надо именно от меня надпись - ссылочку в студию))))
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Re: Обращение к API (vk.com) через WinHttp

http://autoit-script.ru/index.php/topic,7517.0.html
Ну мы занимаемся вот этим.
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Обращение к API (vk.com) через WinHttp

Все это забавно, но есть одно но

VK меняет свой функционал не по дням, а по часам. Я до этого писал для себя - т.к. сайт очень хорош базой музыки и просто получал список и скачивать его же на свой любимый ПК, а далее уже куда захочу.

Буквально неделю (сейчас по личным причинам особо нет времени) назад я уже не смог скачать свою любимую музычку. Вот пока есть свободная минутка - переписал все + дописал для других .

К чему все это - насколько часто будут выходить обновления у собственной проги ??? Они там поменяют что-нибудь и сидеть ковыряться ? Не - ну - интересно, конечно... Хотя тогда уже проще готовый продукт выпускать.

PS: у Вас там функций уже достаточно - только обновлять их надо.

PSS: я бы вступил в команду, но при условии, что выпускать уже готовый продукт -> exe файл. А в нем уже делать все приблуды.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Re: Обращение к API (vk.com) через WinHttp

API меняется редко, и то только добавлением функционала, а не измегением, написанная мною программа работает до сих пор...
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Обращение к API (vk.com) через WinHttp

Странно, но я не мог сделать авторизацию через свой старый скрипт использую Desktop приложение.

Изменения, которые заметил:
При авторизации через https://oauth.vk.com/authorize?.... всегда требует нажатия "разрешения", даже, если у пользователя уже добавлено это приложение с необходимыми правами.

PS: видимо попался на смену API
PSS: чуть-чуть приувеличил со временем))))

UPDATE to 1.0.2 (beta):
* Небольшие косметические изменения в коде
* Добавил пример получение списка аудио-записей другого пользователя через его "короткое имя"
 

Бумбликус

Новичок
Сообщения
7
Репутация
1
Re: Обращение к API (vk.com) через WinHttp

VK меняет свой функционал не по дням, а по часам. Я до этого писал для себя - т.к. сайт очень хорош базой музыки ...
Буквально неделю (сейчас по личным причинам особо нет времени) назад я уже не смог скачать свою любимую музычку. Вот пока есть свободная минутка - переписал все + дописал для других .

Код:
javascript:function playAudioNew(a){ var url = document.getElementById('audio_info'+a).value.split(',')[0]; window.open(url,'Download'); }

в закладки и можно качать любую музыку из ВК, года полтора уже пользуюсь.

не совсем в тему и не совсем AutoIt, но вдруг пригодится ;)
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Обращение к API (vk.com) через WinHttp

2 Бумбликус
Я юзаю где только можно Google Chrome
1. У меня твой скрипт переходит в поиск гугла, т.е. не срабатывает.
2. Раньше юзал такие скрипты, но не совсем удобно - там еще рядом с песней кнопка появляется "Download" и каждую песню надо так сидеть клацать. У меня 800+ песен - представь как это все будет)))

Здесь чутка поудобнее (могу скинуть код) запустил и сиди жди, когда все скачается))))
Да и сидеть запоминать - что скачал, а что нет... не особо. Я поставил фильтр (еще не совсем доделал) на символы (отсеиваю лишние символы) + идет проверка есть ли такой уже файл или нет. Если нет - не качать...

Но (!) спасибо за скрипт... может кому пригодится на самом деле...

PS: скоро тему создам - как сделать, чтобы autoit читал свойства из файла и вкладку "сводка"
 

Бумбликус

Новичок
Сообщения
7
Репутация
1
Re: Обращение к API (vk.com) через WinHttp

Я юзаю где только можно Google Chrome
1. У меня твой скрипт переходит в поиск гугла, т.е. не срабатывает.
2. Раньше юзал такие скрипты, но не совсем удобно - там еще рядом с песней кнопка появляется "Download" и каждую песню надо так сидеть клацать. У меня 800+ песен - представь как это все будет)))

в хроме да, если вставить в адресную строку, то пытается искать в интернетах. поэтому делаем так: создать закладку и в URL пишем этот скрипт.
еще один минус у этого скрипта - когда поочередно скачиваешь много песен, аудио становиться недоступно. видимо ВК что то неладное подозревает))) правда через несколько минут опять нормально работает
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Обращение к API (vk.com) через WinHttp

Уважаемые посетители, в особенности те, кто все же проверял работоспособность данного скрипта, убедительно прошу Вас Выполнить мою просьбу !!!

На момент запуска скрипта 1.0.2 (beta) получил отказ о входе в систему с сообщением в консоли "ОШИБКА: не верно указан логин и пароль...".

Убедительная просьба проверьте работоспособность скрипта - в котором я уже сомневаюсь, но решение нашел (о нем позже - возможно в понедельник или даже раньше - просто я через 10 минут уйду от ПК до глубокой ночи) :stars:

Заранее спасибо...

PS: это не призыв запуска скрипта с криком "почему меня тут так мало похвалили" - это призыв проверить.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Re: Обращение к API (vk.com) через WinHttp

---Zak--- [?]
PSS: я бы вступил в команду, но при условии, что выпускать уже готовый продукт -> exe файл. А в нем уже делать все приблуды.
А какой продукт Вы собрались выпускать? Клиентов, качалок музыки, рисовалок- достаточно. Я написал конечно себе глобальную качалку музыки, но толку от нее?

Я изменил авторизацию, но она теперь все время требует подтверждения. Не против если я буду использовать твою?

И минус в твоем варианте - разрешение запрашивается скрытно, и нажимается скрытно - это запрещено правилами Вконтакте.
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Обращение к API (vk.com) через WinHttp

2 Medic84
А какой продукт Вы собрались выпускать?
На данный момент никакой продукт не хочу выпускать - пишу для себя и своих знакомых. Одному этим всем делом заниматься скучно, противно и не охота)))))
Клиентов, качалок музыки, рисовалок- достаточно.
Клиентов много, но что за клиенты не знаю - а свое всегда приятнее...Причем я знаю как и куда мой пароль от ВК подставляется
Я написал конечно себе глобальную качалку музыки, но толку от нее?
У каждого свои интересы - мне качалка нужна и не более.
Не против если я буду использовать твою?
Конечно не против... сейчас выложу последнюю версию "Version: 1.0.3 (beta)" - там с авторизацией не будет проблем, 1.0.2 - у меня не срабатывала.
И минус в твоем варианте - разрешение запрашивается скрытно, и нажимается скрытно - это запрещено правилами Вконтакте.
Возможно и правилами ВК так же запрещено скачивать от туда музыку, размещать ХХХ и т.п. Если Вам не нравиться - можете не пользоваться, если хотите подправить - подправте код и т.п. Я сюда пришел делиться своими достижениями, а так же питать от сюда информацию. Если смогу быть полезен, всегда рад помочь...
ЗЫ: "мы в одной лодке - ловим одних и тех же жуликов"

Можно вообще не использовать авторизацию: Документация » Авторизация » Авторизация сервера приложения
Но там необходимо подставить client_secret для каких целей используется он лично мне еще не понятно - в частности если client_secret попадет в чужие руки. Ну и решил, что метод не изучен - не буду использовать.

ЗЫ: Обновил до "1.0.3 (beta)"
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Re: Обращение к API (vk.com) через WinHttp

Я Вас не осуждаю не в коем случае. Просто если библиотека пишется для народа, то народ нужно либо предупредить, либо написать по требуемым правилам (а там каждый для себя разберется, стоит ему их нарушать или нет). Я разобрался со своей авторизацией и оставил ее. Но Вы все равно молодец, что написали свой скрипт и поделились им.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: Обращение к API (vk.com) через WinHttp

OffTopic:
---Zak--- [?]
автор не несет за собой никаких последствий
а ответственность автор готов понести ? ;D
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Обращение к API (vk.com) через WinHttp

2 Medic84
Буквально завтра (уже сегодня) будет новая версия (1.1.0 b) - идею, которой мне все же удалось довести до ума и воплотить в реальность. Причем она заметно повлияет на кол-во кода в скрипте. Скорее всего Вас она так же заинтересует... но об этом позже. Пока что тестирую на Windows 7 x64 - вроде работает.
ЗЫ: хотя ее надо будет причесать по хорошему и начинать готовить на ее основе другую функцию для удобства.
ЗЫЫ: кстати после Ваших строк родилась идея - на будущее - предоставить выбор пользователю ручное или автоматическое подтверждение. С пометкой - выбора по-умолчанию ручное.

2 Kaster
))))) По идеи я это и имел в виду - после подправлю... а то когда пишешь много текса уже под конец мозг вырубает и обязательно напишешь что-нибудь не так.


Добавлено:
Сообщение автоматически объединено:

* 1.1.0 (beta) - Глобальная переработка скрипта отвечающего за обработку полученных данных.
Переработка заключается в том, чтобы не использовать регулярные выражения, а так же ни в одной из функции получения данных не указывать название полей, которые необходимо получить. Все это делается автоматически и выводится в 2D массиве.

Скрипт теперь использует дополнительную библиотеку "XML DOM wrapper (COM)".

Читайте первый пост, если возникнут какие-нибудь вопросы - задавайте, с удовольствием отвечу на них.
ЗЫ: на данный момент исправляются мелкие ошибки, а так же идет разработка полноценного облегченного варианта работы с кодом.
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Обращение к API vk.com и обработка полученных данных

Реализация примера загрузки "Аудиозаписи" текущего пользователя (см. "Прикреплённые файлы" - VK_API_XML-audio.au3)

Ну и немного комментариев по этому поводу:
Получение списка аудизаписей текущего пользователя
Код:
$Script = _VK_Get("audio.get")

Вызов функции загрузки файлов на ПК (в примере указан как комментарий)
Код:
_InetGetURL($Script, _BDF("url"))


Добавлены некоторые функции:
Функция возвращает номер столбца по "названию" столбца.
Код:
_BDF($STR_F)

Функция реализации удаление лишних символов, а так же ссылок в названии аудиозаписи (возможно есть недочеты)
Код:
_FilterSTR($STR_F)

Функция загрузки на ПК файлов
Код:
_InetGetURL($ARR, $URL, $InetGetDir = Default)

Код:
$ARR - массив с данными (artist, title, url и т.п.)
$URL - номер столбца с ссылкой на файл
$InetGetDir = Default - путь для сохранения файлов. По-умолчанию загрузка файлов в "@ScriptDir&'\audio'"
ЗЫ: требуется дополнительная проверка пути сохранения файлов - в частности удаление лишних "\".
Пример:
Код:
@ScriptDir&'\audio\\audio1\\\audio2\
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Обращение к API vk.com и обработка полученных данных

Добрый всем день.

На днях обнаружил небольшое обновление у Desktop-приложения, на котором и тестирую свой скрипт. Хотел бы поделиться этой новостью:
Заходим на редактирование своего приложения (Приложения - Настройки - Редактирование напротив своего приложения) и видим новую (лично для меня) вкладку "Хранимые процедуры".

Хранимые процедуры позволяют исполнять код на стороне сервера API аналогично методу execute, но без передачи кода процедуры по сети.
Использование хранимых процедур рекомендовано для мобильных приложений с целью экономии трафика.
Вы можете вызвать созданные в интерфейсе хранимые процедуры, используя следующую конструкцию:
https://api.vk.com/method/execute.ИМЯ_ПРОЦЕДУРЫ?СПИСОК_ПАРАМЕТРОВ
Переданные параметры будут доступны внутри кода процедуры в виде полей объекта Args, например, если Вы передали ?user=123, то значение этой переменной будет доступно в Args.user.

И тут же привожу пример, как пользоваться данной вкладкой - в имя процедуры пишем желаемое имя, ну а в код соответственно код:
код алгоритма в VKScript - формате, похожем на JavaSсript или ActionScript (предполагается совместимость с ECMAScript). Алгоритм должен завершаться командой return %выражение%. Операторы должны быть разделены точкой с запятой.

gS0FBc04UdM.jpg

У меня процедура "agus" - "возвращает адрес сервера для загрузки аудиозаписей".
А процедура "test" возвращает параметр "argtest", передаваемый из самого скрипта.

Код:
Код:
$Script = _VK_Get("execute.agus")
		If IsArray($Script) Then
			_ArrayDisplay($Script)
		Else
			MsgBox(16, "ERROR", "Что-то пошло не так: "&$Script)
		EndIf

		$Script = _VK_Get("execute.test", "argtest=text_fun_vk")
		If IsArray($Script) Then
			_ArrayDisplay($Script)
		Else
			MsgBox(16, "ERROR", "Что-то пошло не так: "&$Script)
		EndIf


Результат:
28tw4kueUTA.jpg
 
Автор
---Zak---

---Zak---

Скриптер
Сообщения
455
Репутация
120
Re: Обращение к API vk.com и обработка полученных данных

Появились небольшие изменения в получении ссылок и скачивании музыки через портал:

Ссылки слегка изменились - в них появился какой-то замысловатый текст.


Решил проблему так:
Код:
If StringInStr($ARR[$i][$URL], '?extra=') Then
			$URL_Exp = StringRegExp($ARR[$i][$URL], "http://(.*?)\?extra=", 1)
			$ARR[$i][$URL] = "http://" & $URL_Exp[0]
		EndIf
 
Верх