Что нового

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

Коршун

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

А как же быть с добавлением фото??
 

Коршун

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

При отправке Post запроса получаю пустой photos_list
Кто поможет?!

Код:
#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---

---Zak---

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

Подробная документация по функциям находится в разработке...

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

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

Инструкция:
1. Подключить UDF VK_Desktop_API.au3
2. Вызвать функцию авторизации _VK_API_OAuth с 3 обязательными параметрами
  • 'E-MAIL' (обяз) -> Адрес эл. почты или телефон для авторизации пользователя
  • 'PASSWORD' (обяз) -> Пароль пользователя
  • 'APP_ID' (обяз) -> Идентификатор Вашего приложения. Исользуемое «Standalone-приложение» для выполнения запросов API ВКонтакте
  • 'PERMISSIONS' -> Запрашиваемые права доступа приложени (по-умолчанию: 2015231) (см. документацию API ВКонтакте)
3. Вызвать функцию _VK_GetMethod указав название метода
  • 'METHOD_NAME' (обяз) -> Название метода из списка функций API
  • 'PARAMETERS' -> Параметры соответствующего метода API
  • 'VERSION_API' -> Обозначает версию API, которая используется. Использование этого параметра применяет некоторые изменения в формате ответа различных методов. (по-умолчанию текущая версия ВКонтакте)
4. Результатом функции _VK_GetMethod будет глобавльный массив $vARR. При необходимости есть возможность сохранять результат _VK_GetMethod в свою переменную

Код:
Код:
#include <VK_Desktop_API.au3>

_VK_API_OAuth('E-MAIL', 'PASSWORD', 'APP_ID')

_VK_GetMethod('METHOD_NAME_1')
	_ArrayDisplay($vARR)
	
$YourConst = _VK_GetMethod('METHOD_NAME_2')
	_ArrayDisplay($YourConst)

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

Снимок:









Файлы:
см. прикреплённые файлы.
Зеркало 1: drive.google.com
 
Автор
---Zak---

---Zak---

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

Версия разработки:
  • 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
Сообщения
877
Репутация
240
Re: Обращение к API vk.com и обработка полученных данных

Хороший пример, но я заметил вот что:
Код:
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 думаю нужно сделать так:

Код:
InetGet($URL, @TempDir&'\captcha.jpeg')
 
Автор
---Zak---

---Zak---

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

Ganibal95
Спасибо за поправку - исправил и залил все это дело на "зеркало"...

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

---Zak---

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

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

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

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

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

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

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

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

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

 

Коршун

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

А на группу файлов не работает :'(
 

Miffer

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

Библиотека ещё актуальна? У меня почему-то при любом запросе беспрерывно сыпет капчами, если капчу закрыть, то в консоли ошибка VK_Desktop_API.au3"(213,87) : warning: $VK_LogIN: possibly used before declaration
 
Автор
---Zak---

---Zak---

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

Miffer
Проверил - вроде как работает...

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

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

Коршун

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

По-моему отвалилась авторизация ВК... Ошибка 101
 
Автор
---Zak---

---Zak---

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

Примечание разработки:
Версия AutoIt: 3.3.12.0

Версия разработки:
  • 1.1.3 (beta)
    Перерабока функций: авторизация.

Файлы:
см. прикреплённые файлы.
Зеркало 1: drive.google.com
 

Коршун

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

При получении капчи - авторизации не проходит
$VK_HIDDEN имеет Sid и дальше ошибка т.к. в массиве больше строк на 2 чем обычно)
 
Автор
---Zak---

---Zak---

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

Коршун
В понедельник/вторник гляну что там с авторизацией при капче...
Сам понимаешь - выходные все дела))) :beer:

PS: видимо когда переделывал авторизацию совершенно "случайно" забыл про капчу, т.к. что-то не встречаю вызова ф-ции _VK_API_onLogin
 

Коршун

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

Как показывают тесты - капча всплывает в разных местах...
 
Автор
---Zak---

---Zak---

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

Примечание разработки:
Версия AutoIt: 3.3.12.0

Версия разработки:
  • 1.1.3.1 (beta)
    Перерабока функций: авторизация - исправление ошибок (вывод и обработка "капчи").
  • 1.1.4 (beta)
    Тестовая версия, которая может использовать "куки" после авторизации на сайте vk.com.

Инструкция по 1.1.4 (beta):
Тестовый файл находится в отдельной папке и не рекомендуется использовать на другом компьютере: "куки" на данный момент не зашифрованы - сохраняются в отдельном файле (в открытом виде). Использовать на свой страх и риск - при передаче иным лицам данного файла может повлечь за собой печальные последствия.

Как использовать:
Скачать "VK_Desktop_API.au3" с github.com расположеный в папке "Testing/COOKIE". Пройти первую авторизацию.

Примечание:
Первоначальная версия носит исключительно информационный характер. Использование "куков" работает на данный момент сутки. В файле прописывается текущая дата, если она совпадает, то авторизации второй раз (скорее всего) не будет.

Отчет о багах в данной версии:
Убедительная просьба пишите какую версию Вы используете.


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

Версия разработки:
  • 1.1.4.1 (beta)
    Исправление ошибок в тестовой версии с использованием "куков"

Инструкция по 1.1.4.1 (beta):
Тестовый файл находится в отдельной папке и не рекомендуется использовать на другом компьютере: "куки" на данный момент не зашифрованы - сохраняются в отдельном файле (в открытом виде). Использовать на свой страх и риск - при передаче иным лицам данного файла может повлечь за собой печальные последствия.
В функции _VK_API_OAuth добавлен новый параметр "$VK_Cookie = False" отвечающий за использование "куков" или нет (по-умолчанию не использует).

Как использовать/пример:
Скачать "VK_Desktop_API.au3" с github.com расположеный в папке "Testing/COOKIE".
Код:
$VK_LogIN = ""
	$VK_PassWORD = ""
	$VK_API_ID = "2987875"
	_VK_API_OAuth($VK_LogIN, $VK_PassWORD, $VK_API_ID, True)
;~ -------------------------------------------------------------------------------
;~ Example of downloading music for the current user
;~ -------------------------------------------------------------------------------
	$vARR = _VK_GetMethod("audio.get", "count=20")
	_ArrayDisplay($vARR)

При первом запуске авторизация происходит через логин и пароль.
Если запустить скрипт очередной раз - авторизация произойдет через "куки", которые распологаются в отдельном файле.

Примечание:
Первоначальная версия носит исключительно информационный характер. Использование "куков" работает на данный момент сутки. В файле прописывается текущая дата, если она совпадает, то авторизации второй раз (скорее всего) не будет.

Отчет о багах в данной версии:
Убедительная просьба пишите какую версию Вы используете.
 
Автор
---Zak---

---Zak---

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

Примечание разработки:
Версия AutoIt: 3.3.14.0

Версия разработки:
  • 1.2.2.1 (rc1)
    Перевод на стадию разработки: Релиз-кандидат

Подробно:
  • Исправлены мелкие ошибки с использованием "куков"
  • Файл в сохранением "куков" остался без шифрования (в открытом виде), но теперь он называется "cookie.ini"
  • В файл "куков" добавлен новый параметр - эл.почта пользователя
  • Изменен порядок переменных в вызове функция авторизации "_VK_API_OAuth" - см. "Параметры _VK_API_OAuth" ниже
  • Изменена функция авторизации "_VK_API_OAuth" указывать ID собственного приложения не обязательно (по-умолчанию используеся "2987875") - теперь это 4 параметр
  • Использование "куков" по-умолчанию выключенно - False. Для включения необходимо 3 параметром в вызове функции авторизации "_VK_API_OAuth" поставить "True"
  • При запросах "User-Agent" теперь "Mozilla/4.0 (compatible; MSIE 8.0; Win32)"
  • После авторизации используется метод "stats.trackVisitor" (Добавляет данные о текущем сеансе в статистику посещаемости приложения.)
  • Между вывовами методов по-умолчанию используется задержка в 0,5 секунд

Параметры _VK_API_OAuth:
Код:
_VK_API_OAuth($VK_LogIN, $VK_PassWORD, $VK_Cookie = False, $VK_API_ID = Default, $VK_Scope = 2015231)

  • $VK_LogIN - Эл.почта или номер телефона пользователя
  • $VK_PassWORD - Пароль пользователя
  • $VK_Cookie - Использовать/не использовать "куки" (по-умолчинию: не использовать)
  • $VK_API_ID - Идентификатор Вашего приложения (по-умолчанию: 2987875)
  • $VK_Scope - Запрашиваемые права доступа приложени (по-умолчанию: 2015231) (см. документацию API ВКонтакте)

Инструкция в примерах:
'E-MAIL' - эл.почта или номер телефона пользователя
'PASSWORD' - пароль пользователя
'APP_ID' -> Идентификатор Вашего приложения.

Авторизируемся без использования "куков"
Код:
#include <VK_Desktop_API.au3>

_VK_API_OAuth('E-MAIL', 'PASSWORD')
_VK_GetMethod('METHOD_NAME_1')
    _ArrayDisplay($vARR)


Авторизируемся с использованием "куков".
Код:
#include <VK_Desktop_API.au3>

_VK_API_OAuth('E-MAIL', 'PASSWORD', True)
_VK_GetMethod('METHOD_NAME_1')
    _ArrayDisplay($vARR)


Авторизируемся с использованием "куков" и указываем свое ID приложения.
Код:
#include <VK_Desktop_API.au3>

_VK_API_OAuth('E-MAIL', 'PASSWORD', True, 'APP_ID')
_VK_GetMethod('METHOD_NAME_1')
    _ArrayDisplay($vARR)
 

Коршун

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

Опять при загрузке фото на сервер - photos_list":"[]" :stars:
Как это лечить в принципе? что проверять??
 

ruda_den

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

Коршун сказал(а):
Опять при загрузке фото на сервер - photos_list":"[]" :stars:
Как это лечить в принципе? что проверять??

В том то и пакость, что скрипт который писал CreatoR, работает только в старых версиях Autoit-a, а в новой ни в какую работать не хочет, смотрел пакеты с помощью Wireshark, так отсылаемый пакет в старой версии разительно отличается от новой, в новой даже файл не передаётся, я не особо хорошо разбираюсь в этой всей сетевой ерунде, по этому ума не приложу что нужно делать, но пакеты отличаются на столько сильно, будто сгенерированы разным кодом, хотя код 1 и тот же... написаный CreatoR-ом.

А еще пакость в том, что к примеру меня ни новая ни сатрая версии не устраивают Autoit-a, потому что в тарой ни в какую не работают GET запросы через Proxy, но работает загрузка фото, а в новой версии не работает загрузка фото, но работают GET запросы через Proxy.

В общем я в унынии и отчаянье, очень долго разбирался что к чему, ну и выяснить смог только то что косяк в Autoit-e.


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

В общем, тупил я долго, но наконец то протупился...

Для того чтобы загружались фото в ВК, нужно использовать версию Autoit 3.3.12, дата её выхода 1 June 2014, более свежие версии по какой то причине не верно интерпретируют функцию написанную CreatoR-ом, для загрузки фото в ВК.

Если у кого-то есть проблемы с работой Proxy, а именно по какой то причине, Autoit, принимает пустой ответ от серверов ВК, то во первых, прокси должен быть HTTPS, как я понял, может и другие типы работают, проверять надо... но HTTP, работать точно не будут! Во вторых, лишь небольшая часть HTTPS Proxy, работают нормально с Autoit-ом и ВК, по этому, перебрав даже 10 различных Proxy, вы можете получить пустой ответ! Тут только поможет упорство, я лично брал Proxy с сайта Хайдми... Всё это справедливо так же для Autoit 3.3.12

Надеюсь помог хоть кому то, если в чём то я не прав, поправьте пожалуйста.
И было бы не плохо разобраться, почему же не работает функция написанная CreatoR-ом в новой версии Autoit-а.
 
Автор
---Zak---

---Zak---

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

Коршун сказал(а):
Опять при загрузке фото на сервер - photos_list":"[]" :stars:
Как это лечить в принципе? что проверять??

На 'Github' опубликовал версию с загрузкой фотографий (ссылка на файл)

Проверял только на загрузку фото в своем альбоме, но и на загрузку фото в группу так же должно работать.
Если все будет хорошо и будет работать - переделаю это все в божеское состояние и уже закину функцию в "VK_Desktop_API".

PS: ушли от TCP перешли на WinHTTP
PSS: AutoIt 3.3.14.3
 
Верх