Автор Тема: Обращение к API ВКонтакте  (Прочитано 43099 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4016
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Обращение к API (vk.com) через WinHttp
« Ответ #15, Отправлен: Январь 24, 2013, 23:47:46 »
OffTopic---Zak---  [?]
Цитировать
автор не несет за собой никаких последствий
а ответственность автор готов понести ?  ;D

Русское сообщество AutoIt

Re: Обращение к API (vk.com) через WinHttp
« Ответ #15 Отправлен: Январь 24, 2013, 23:47:46 »

Оффлайн ---Zak--- [?]

  • Скриптер
  • ****
  • Сообщений: 437

  • Автор темы
  • Репутация: 110
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Обращение к API (vk.com) через WinHttp
« Ответ #16, Отправлен: Январь 25, 2013, 00:25:37 »
2 Medic84
Буквально завтра (уже сегодня) будет новая версия (1.1.0 b) - идею, которой мне все же удалось довести до ума и воплотить в реальность. Причем она заметно повлияет на кол-во кода в скрипте. Скорее всего Вас она так же заинтересует... но об этом позже. Пока что тестирую на Windows 7 x64 - вроде работает.
ЗЫ: хотя ее надо будет причесать по хорошему и начинать готовить на ее основе другую функцию для удобства.
ЗЫЫ: кстати после Ваших строк родилась идея - на будущее - предоставить выбор пользователю ручное или автоматическое подтверждение. С пометкой - выбора по-умолчанию ручное.

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


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

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

Читайте первый пост, если возникнут какие-нибудь вопросы - задавайте, с удовольствием отвечу на них.
ЗЫ: на данный момент исправляются мелкие ошибки, а так же идет разработка полноценного облегченного варианта работы с кодом.
« Последнее редактирование: Январь 25, 2013, 12:14:18 от ---Zak---, Причина: Объединение сообщений »
OS: WinXp SP3 (RUS), Win7 (x86/x64)


My development:
http://autoit-script.ru/index.php/topic,11541.0.html

Оффлайн ---Zak--- [?]

  • Скриптер
  • ****
  • Сообщений: 437

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

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

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


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

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

Функция загрузки на ПК файлов
Код: AutoIt [Выделить]
_InetGetURL($ARR, $URL, $InetGetDir = Default)

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


Оффлайн ---Zak--- [?]

  • Скриптер
  • ****
  • Сообщений: 437

  • Автор темы
  • Репутация: 110
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Добрый всем день.

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

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

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


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

Код:
(нажмите для показа/скрытия)

Русское сообщество AutoIt

Re: Обращение к API vk.com и обработка полученных данных
« Ответ #18 Отправлен: Февраль 14, 2013, 10:06:24 »

Оффлайн ---Zak--- [?]

  • Скриптер
  • ****
  • Сообщений: 437

  • Автор темы
  • Репутация: 110
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Появились небольшие изменения в получении ссылок и скачивании музыки через портал:

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

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


Оффлайн Коршун [?]

  • Новичок
  • *
  • Сообщений: 52
  • Репутация: 1
  • Пол: Мужской
    • Награды
А как же быть с добавлением фото??

Оффлайн Коршун [?]

  • Новичок
  • *
  • Сообщений: 52
  • Репутация: 1
  • Пол: Мужской
    • Награды
При отправке Post запроса получаю пустой photos_list
Кто поможет?!

Код: AutoIt [Выделить]
#include <VK_API_XML.au3>
_VK_LogIN($VK_LogIN, $VK_PassWORD, $VK_API_ID)

        $sLocalFile = FileOpenDialog('Откройте файл',@ScriptDir,'все(*.*)')
        Global $UploadUrl = _VK_Get("photos.getUploadServer", "album_id=184545910")
        $hostBegin=StringInStr($UploadUrl[1][1],'vk.com')
        $sHost=StringLeft($UploadUrl[1][1],$hostBegin+5);Адрес страницы загрузки
        ConsoleWrite($sHost&@CR)
        $sFormAction = $UploadUrl[1][1] ;Действие формы загрузки (из формы "form action=...upload.php)"
        ConsoleWrite($sFormAction&@CR)
        $sFormName = 'photo_file' ;Имя формы загрузки ("input name=uploadfile")
        $status = _TCPFileUpload($sLocalFile, $sHost, $sFormAction, $sFormName)
        ConsoleWrite($status&@CR)
 
Func _TCPFileUpload($sLocalFile, $sHost, $sFormAction, $sFormName)
    Local $sFileRead, $sFileType, $sBoundary, $sData, $iDataSize, $sHeader, $sCommand, $iSocket, $sRecv

    $sHost = StringRegExpReplace($sHost, '(?i)^https?://', '')
    $sHost = StringRegExpReplace($sHost, '(?i)^http?://', '')
    $sFileRead = FileRead($sLocalFile)
    $sFileType = StringRegExpReplace($sLocalFile, '^.*\.', '')
    If $sFileType = 'jpg' Then $sFileType = 'jpeg'

    $sBoundary = StringFormat('----------------%s%s%smzF', @MIN, @HOUR, @SEC)

    $sData = '--' & $sBoundary & @CRLF & _
        'Content-Disposition: form-data; name="' & $sFormName & '"; filename="' & StringRegExpReplace($sLocalFile, '^.*\\', '') & '"' & @CRLF & _
        'Content-Type: image/' & $sFileType & @CRLF & @CRLF & _
        $sFileRead & @CRLF & '--' & $sBoundary & '--' & @CRLF

    $iDataSize = StringLen($sData)

    $sHeader = 'POST ' & $sFormAction & ' HTTP/1.1' & @CRLF & _
                'Host: ' & $sHost & @CRLF & _
                'Connection: close' & @CRLF & _
                'Content-Type: multipart/form-data; boundary=' & $sBoundary & @CRLF & _
                'Content-Length: ' & $iDataSize & @CRLF & @CRLF

    $sCommand = $sHeader & $sData

    TCPStartup()
    $iSocket = TCPConnect(TCPNameToIP($sHost), 80)
    TCPSend($iSocket, $sCommand)

    While 1
        $sRecv &= TCPRecv($iSocket, 20000)
        If StringLen($sRecv) <> 0 Then ExitLoop
        Sleep(50)
    WEnd

    TCPShutdown()
    Return $sRecv
EndFunc


Оффлайн ---Zak--- [?]

  • Скриптер
  • ****
  • Сообщений: 437

  • Автор темы
  • Репутация: 110
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Подробная документация по функциям находится в разработке...

Примечание разработки:
Версия AutoIt: 3.3.10.2
Windows: XP SP3 (RUS) x86

Версия разработки:
  • 1.1.1 (beta)
    Предоставление в виде UDF.
    Перерабока функций: авторизация, обработка полученных данных.
    Добавление новых вспомогательных функций.

Инструкция:
(нажмите для показа/скрытия)

Код:
(нажмите для показа/скрытия)

Пример:
Для тестирования своих разработок идентификатор моего приложения = 2987875
(раздел в разработке)

Снимок:
(нажмите для показа/скрытия)

Файлы:
см. прикреплённые файлы.
Зеркало 1: drive.google.com
« Последнее редактирование: Январь 15, 2014, 17:55:42 от ---Zak--- »

Русское сообщество AutoIt

Re: Обращение к API vk.com и обработка полученных данных
« Ответ #22 Отправлен: Январь 15, 2014, 12:14:44 »

Оффлайн ---Zak--- [?]

  • Скриптер
  • ****
  • Сообщений: 437

  • Автор темы
  • Репутация: 110
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Версия разработки:
  • 1.1.2 (beta)

    Вывод при необходимости диалога "Captcha needed" на этапе авторизации пользователя
    Add Func: _VK_GUI_Captcha()
    Edit Func: _VK_API_OAuth(), _VK_API_onLogin()

Подробнее:

Func _VK_API_onLogin($sData, $VisibleGUI = True) - функция обработки входа пользователя (вывод ошибок входа/вывод капчи/другое)
  • $sData = обрабатываемая информация
  • $VisibleGUI = флаг, со значениями:
    True - показать диалог ввода Captcha
    False - вывести MsgBox с ошибкой "onLoginCaptcha (captcha needed)"

Func _VK_GUI_Captcha($sCaptchaID) - вывод диалога ввода капчи по ID

Снимок:
(нажмите для показа/скрытия)

Файлы:
Зеркало 1: drive.google.com

Оффлайн Ganibal95 [?]

  • GreenBytes
  • AutoIt Гуру
  • *****
  • Сообщений: 864
  • Репутация: 236
  • Пол: Мужской
  • GreenBytes
    • GreenBytes
    • Награды
  • Версия AutoIt: 3.3.14.0
Хороший пример, но я заметил вот что:
Код: AutoIt [Выделить]
Func _VK_GUI_Captcha($sCaptchaID)
    $URL = 'http://vk.com/captcha.php?sid='&$sCaptchaID
    InetGet($URL, @TempDir&'captcha.jpeg')

    $hGUI = GUICreate('Captcha #'&$sCaptchaID, 130, 100)
    $capPic = GUICtrlCreatePic('', 0, 0, 130, 50)
        GUICtrlSetImage($capPic, @TempDir&'captcha.jpeg')
    $capInp = GUICtrlCreateInput("", 5, 55, 120, 20)
    $capBut = GUICtrlCreateButton("OK", 20, 75, 85, 25)

    GUISetState()
    While 1
        $iMsg = GUIGetMsg()
        Select
            Case $iMsg = -3
                $capText = False
                Exit
            Case $iMsg = $capBut
                    $capText = GUICtrlRead($capInp)
                    ExitLoop
        EndSelect
    WEnd
    GUIDelete($hGUI)

    If ($capText) Then
        Return $capText
    EndIf
EndFunc
 


Вроде как по умолчанию @TempDir отдает что -то вроде такого: C:\Windows\Temp

по этому чтоб сохранить в Temp думаю нужно сделать так:

Код: AutoIt [Выделить]
InetGet($URL, @TempDir&'\captcha.jpeg')
 


Оффлайн ---Zak--- [?]

  • Скриптер
  • ****
  • Сообщений: 437

  • Автор темы
  • Репутация: 110
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Ganibal95
Спасибо за поправку - исправил и залил все это дело на "зеркало"...

@ll
*** В следующей версии будет очередной раз переработан скрипт входа на портал. А именно - реализован пример авторизации через 'Cookie'.

Оффлайн ---Zak--- [?]

  • Скриптер
  • ****
  • Сообщений: 437

  • Автор темы
  • Репутация: 110
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Всем добрый день.

По многочисленным просьбам Коршун'а был реализован тестовый скрипт загрузки фотографий на портал в альбом текущего пользователя.

Данный код выкладывается сырой (возможны ошибки), но работоспособный.

Скачать пример:
Зеркало 1/VK_Desktop_API/TestIng/photos_save_b_100.au3

Немного слов:
  • Как обычно указываем свои данные от портала "ВК"
  • Так же необходимо будет указать в переменную ID альбома пользователя
    Код: AutoIt [Выделить]
    $VK_album_id = ""               ;Указываем ID альбома

  • Через метод "photos.getUploadServer" получаем ссылку для загрузки файла:
    Код: AutoIt [Выделить]
    $pURLs[1][1] - необходимая ссылка

  • Через функцию _TCPFileUpload (автор на сколько мне известно: CreatoR) производим загрузку файла.
    Код: AutoIt [Выделить]
    $sLocalFile - путь к файлу
    $sHost - имя сервера ВК
    $TCPFileUpload - переменная для сохранения результатов отправки файла на сервер ВК

  • В ответ нам приходят необходимые данные для сохранения на сервере.
    Цитировать
    В ответ приложение получает следующие данные в формате JSON: {"server": '1', "photos_list": '2,3,4', "aid": '5', "hash": '12345abcde'}
    Код: AutoIt [Выделить]
    через StringRegExpReplace обрабатываем и получаем необходимые данные, для дальнейшего использования

  • Через метод "photos.save" сохраняем файл.
    Код: AutoIt [Выделить]
    Как параметры передаем ID альбом пользователя, а так же обработанные данные из переменной $TCPFileUpload

« Последнее редактирование: Февраль 19, 2014, 14:32:04 от ---Zak--- »

Оффлайн Коршун [?]

  • Новичок
  • *
  • Сообщений: 52
  • Репутация: 1
  • Пол: Мужской
    • Награды
А на группу файлов не работает   :'(

Оффлайн Miffer [?]

  • Новичок
  • *
  • Сообщений: 1
  • Репутация: 0
    • Награды
Библиотека ещё актуальна? У меня почему-то при любом запросе беспрерывно сыпет капчами, если капчу закрыть, то в консоли ошибка  VK_Desktop_API.au3"(213,87) : warning: $VK_LogIN: possibly used before declaration

Оффлайн ---Zak--- [?]

  • Скриптер
  • ****
  • Сообщений: 437

  • Автор темы
  • Репутация: 110
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Miffer
Проверил - вроде как работает...

У меня капча у самого появляется, но только когда вызываешь "_VK_API_OAuth", а дальше - уже сколько бы не делал запросов - все гуд.
В Вашем случае может быть сервер решил, что Вы похоже используете очень много запросов и начал выдавать капчу.

PS: Функцию "_VK_API_OAuth" надо вызывать всего лишь 1 раз в начале программы, а не каждый раз чтобы сделать запрос...

Русское сообщество AutoIt

Re: Обращение к API vk.com и обработка полученных данных
« Ответ #29 Отправлен: Декабрь 23, 2014, 18:01:35 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
2861 Просмотров
Последний ответ Январь 27, 2010, 13:49:07
от oneDmitry
140 Ответов
56005 Просмотров
Последний ответ Апрель 19, 2015, 02:43:50
от Broadcastic
1 Ответов
2523 Просмотров
Последний ответ Апрель 07, 2013, 12:16:18
от inververs
4 Ответов
1579 Просмотров
Последний ответ Январь 27, 2014, 20:49:53
от La2Angel
5 Ответов
2115 Просмотров
Последний ответ Февраль 23, 2014, 13:54:16
от Garrett
5 Ответов
1312 Просмотров
Последний ответ Май 05, 2014, 11:23:10
от InnI
3 Ответов
1091 Просмотров
Последний ответ Март 30, 2015, 17:16:15
от Rioran
5 Ответов
1231 Просмотров
Последний ответ Февраль 09, 2016, 12:54:16
от Cornet
2 Ответов
502 Просмотров
Последний ответ Февраль 10, 2016, 12:07:37
от Eugenius
7 Ответов
1284 Просмотров
Последний ответ Февраль 24, 2016, 14:39:56
от The_Immortal