Что нового

VK API UDF - библиотека для работы с Vkontakte API

Guezt

Продвинутый
Сообщения
335
Репутация
82
Medic84
в общем минус данного udf и метода вообще в том что я смог получить 2 ключа (2х разных приложений) в рамках 1й сессии(запуска скрипта)но работает только с 1 тот что впервую очередь авторизовывался идея была такая подключаюсь через существующее iFrame приложение парсю список методом friends.getAppUsers потом используя ключ от desktop приложения пытаюсь создать список пользователей... хотел всех друзей которые играют в одно определенное приложение в 1 список занести - пришлось в 2 этапа делать. задачу решил при чем как видно из нашей переписки давно, но вот что это нельзя провернуть в 1 запуск приложения меня расстраивает при чем не понятно почему не срабатывает ведь ключа то access_token получает два... в чем может быть загвоздка? (( ....
 
Автор
F

Fever

Скриптер
Сообщения
308
Репутация
112
Medic84 [?]
Первое с чего лучше начать - это возвращение значений функциями. Лучше сразу возвращать массивом, то что можно вообще вернуть.

во многих ф-циях возвращаемых данных слишком много и они не всегда нужны, может это лучше оставить регулярным выражениям, в примере у меня так
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Fever
Поздно я уже дописал все почти. 4 ф-ии твои остались.

OffTopic:
P.S. Напиши в аську мне, связь нужна...
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Guezt Gutsy
Конечно стоит =) И она не только от меня, а от нас обоих =)
 

Arei

Скриптер
Сообщения
938
Репутация
115
Вы делали поддержку функций Api Стены ?
можете показать примеры реализации
Код:
wall.post – добавляет запись на стену.
wall.delete – удаляет запись со стены.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Arei
Еще не писали. Решили дописать функций, что бы был определенный минимум. Да и другие функции усовершенствуем - до более оптимальных вариантов.
Если интересно, то могу написать набросок функции
 

Arei

Скриптер
Сообщения
938
Репутация
115
Да, если вас это не затруднит.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Пока это будет выглядеть как то так.

Код:
Func _VK_wallPost($_sAccessToken, $_sMessage = "", $_sAttashments= "", $_sOwner_ID = "", $_sServices = "", $_sFrom_Group = 0, $_sFriends_Only = 0)
	Local $sReturn, $sResponse

	If $_sAttashments = "" And $_sMessage = "" Then Return SetError(2,0,-1)
	If Not $_sMessage = "" Then $_sMessage = BinaryToString(StringToBinary($_sMessage, 4))
	
	$sResponse = BinaryToString(InetRead("https://api.vkontakte.ru/method/wall.post.xml?access_token=" & $_sAccessToken & "&message=" & $_sMessage & "&attachments=" & $_sAttashments & "&owner_id=" & $_sOwner_ID & "&services=" & $_sServices & "&from_group=" & $_sFrom_Group & "&friends_only=" & $_sFriends_Only), 4)
	If _VK_CheckForError($sResponse) Then
		Return SetError(1, 0, _VK_CheckForError($sResponse))
	Else
		$sReturn = _CreateArray($sResponse, "post_id")
		Return $sReturn[0]
	EndIf
EndFunc   ;==>_VK_wallPost

Func _VK_wallDelete($_sAccessToken, $_sPost_ID, $_sOwner_ID = "")
	Local $sReturn, $sResponse
	
	$sResponse = BinaryToString(InetRead("https://api.vkontakte.ru/method/wall.delete.xml?access_token=" & $_sAccessToken & "&post_id=" & $_sPost_ID & "&owner_id=" & $_sOwner_ID), 4)
	If _VK_CheckForError($sResponse) Then
		Return SetError(1, 0, _VK_CheckForError($sResponse))
	Else
		$sReturn = _CreateArray($sResponse, "response")
		Return $sReturn[0]
	EndIf
EndFunc   ;==>_VK_wallDelete

Func _VK_CheckForError($sResponse)
	Local $error_Code, $error_Msg

	$error_Code = _CreateArray($sResponse, "error_code")
	$error_Msg = _CreateArray($sResponse, "error_msg")

	If IsArray($error_Code) Then
		Return "Error: " & $error_Code[0] & " - " & $error_Msg[0]
	Else
		Return 0
	EndIf
EndFunc   ;==>_VK_CheckForError

Func _CreateArray($sString, $sCodeWord)
	Dim $aRetArray

	$aRetArray = StringRegExp($sString, "(?s)(?i)<" & $sCodeWord & ">(.*?)</" & $sCodeWord & ">", 3)

	Return $aRetArray
EndFunc   ;==>_CreateArray


Все подробности смотреть к описаниям методов.
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
Medic84
на какой стадии готовность UDF ? может как то попробовать изменить метод авторизации заменив работу IE на
Код:
ObjCreate('WinHttp.WinHttpRequest.5.1')
через post get? вот тут пример http://kbyte.ru/ru/Programming/Articles.aspx?id=62&mode=artдумаю может под autoit переделать стоит?!

и еще такой момент как же все же правильно сделать logout ?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Готовность около 65%
Хорошо. Мы посмотрим что можно сделать =)


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

Нет. По другому не пойдет.
Авторизация для реальных пацанов

Всё, что делается пользователем через браузер - можно сделать программно. В этой части статьи мы пройдем процедуру авторизации и получение ключа доступа (access_token) без использования WebBrowser. Но я еще раз хочу обратить ваше внимание на то, что это запрещено правилами ВКонтакте и приложение, использующее подобный метод авторизации, скорей всего не пройдет проверку и будет запрещено администрацией ВКонтакте.
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
Понял - вот этот момент не видел про запрещено правилами Вконтакте, так а что на счет все таки Logout из подобного приложения ?! ))

ведь что-то типа так:
Код:
$oIE = _IECreate("https://login.vk.com/?act=logout&from_host=vk.com",0,0)

тоже тогда не правильно ))
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Guezt Gutsy [?]
тоже тогда не правильно ))
Почему? Запрещено только получать ключ доступа, не предупреждая пользователя о доступе к данным.

P.S. 777 сообщение :laugh:
 

Moonsin

Новичок
Сообщения
17
Репутация
2
Как готовность? Есть функции для работы с сообщениями?
 

sumejcom

Новичок
Сообщения
3
Репутация
0
Привет
(access_token Я везде убрал))))
Пытаюсь сделать Video Put Tag добавил 2-е функции в библиотеку:
http://vk.com/developers.php?oid=-1&p=video.putTag
http://vk.com/developers.php?o=-1&p=video.get
Но чего-то не доганяю(((

AutoIt код:
#region Video Functions
Func _VK_videoPutTag($_sAccessToken, $_sUID = "", $_sVID = "",$owner_id="")
	;Local $r ="https://api.vkontakte.ru/method/video.putTag.xml?uid=" & $_sUID & "&vid=" & $_sVID & "&access_token=" & $_sAccessToken
	;Local $passwd = InputBox("Security Check", "Enter your password.", $r)
	Return BinaryToString(InetRead("https://api.vkontakte.ru/method/video.putTag.xml?owner_id="& $owner_id&"uid=" & $_sUID & "&vid=" & $_sVID & "&access_token=" & $_sAccessToken), 4)
EndFunc
Func _VK_videoGet($_sAccessToken, $_sUID = "", $_sVIDEOS = "",$_sGID = "",$_sAID = "",$_sWIDTH = "",$_iCOUNT = "",$_sOffset = "" )
	;videos - перечисленные через запятую идентификаторы – идущие через знак подчеркивания id пользователей, которым принадлежат видеозаписи, и id самих видеозаписей. Если видеозапись принадлежит группе, то в качестве первого параметра используется -id группы.
    ;Пример значения videos: -4363_136089719,13245770_137352259.

	;uid -id пользователя, видеозаписи которого нужно вернуть. Если указан параметр videos, uid игнорируется.
	;gid - id группы, видеозаписи которой нужно вернуть. Если указан параметр videos, gid игнорируется.
	;aid - id альбома видеозаписи из которого нужно вернуть.
	;width - требуемая ширина изображений видеозаписей в пикселах. Возможные значения - 130, 160 (по умолчанию), 320.
	;count - количество возвращаемых видеозаписей (максимум 200).
	;offset -смещение относительно первой найденной видеозаписи для выборки определенного подмножества.
	;Local $r ="https://api.vkontakte.ru/method/video.get.xml?uid=" & $_sUID & "&videos=" & $_sVIDEOS & "&gid=" & $_sGID & "&aid=" & $_sAID & "&width=" & $_sWIDTH & "&count=" & $_iCount & "&offset=" & $_sOffset & "&access_token=" & $_sAccessToken;
	;Local $passwd = InputBox("VK_videoGet", "result.", $r)
	Return BinaryToString(InetRead("https://api.vkontakte.ru/method/video.get.xml?uid=" & $_sUID & "&videos=" & $_sVIDEOS & "&gid=" & $_sGID & "&aid=" & $_sAID & "&width=" & $_sWIDTH & "&count=" & $_iCount & "&offset=" & $_sOffset & "&access_token=" & $_sAccessToken), 4)
EndFunc
#endregion Video Functions

Итак отрабатывает getVideo:
https://api.vkontakte.ru/method/video.get.xml?uid=&videos=8113078_162800789&gid=&aid=&width=&count=&offset=&access_token=
Код:
<?xml version="1.0" encoding="utf-8"?>
<response list="true">
 <count>1</count>
 <video>
  <vid>162800789</vid>
  <owner_id>8113078</owner_id>
  <title>Видеоклип  &amp;quot;По дороге к солнцу&amp;quot; Александр Кварта Http://akvarta.com</title>

  <description>Видеоклип &amp;quot;По дороге к солнцу&amp;quot;. Жанр - анимация. Создан Amuse Production 11.12.2011г&amp;lt;br&amp;gt;Песня написана Александром Квартой в 1997м году. В 2010 спета примадонной российской эстрады Аллой Борисовной Пугачёвой. Вошла в одноимённый альбом &amp;quot;По дороге к солнцу&amp;quot; &amp;lt;br&amp;gt;http://akvarta.com</description>
  <duration>207</duration>
  <link>video162800789</link>

  <image>http://cs6041.vkontakte.ru/u8113078/video/m_04250fc8.jpg</image>
  <image_medium>http://cs6041.vkontakte.ru/u8113078/video/l_253c88ae.jpg</image_medium>
  <date>1324508433</date>
  <views>13</views>
  <player>http://vkontakte.ru/video_ext.php?oid=8113078&amp;id=162800789&amp;hash=3448a4050116508c</player>

 </video>
</response>


https://api.vkontakte.ru/method/video.putTag.xml?uid=7349017&vid=162800789&access_token=
Код:
<?xml version="1.0" encoding="utf-8"?>
<error>
 <error_code>1</error_code>
 <error_msg>Unknown error occured</error_msg>
 <request_params list="true">
  <param>
   <key>oauth</key>
   <value>1</value>

  </param>
  <param>
   <key>method</key>
   <value>video.putTag.xml</value>
  </param>
  <param>
   <key>uid</key>

   <value>7349017</value>
  </param>
  <param>
   <key>vid</key>
   <value>162800789</value>
  </param>
  <param>

   <key>access_token</key>
   <value>-------------</value>
  </param>
 </request_params>
</error>

:'(
 

sumejcom

Новичок
Сообщения
3
Репутация
0
Заметил, что для видео, которое загружено не из вКонтакте нет кнопки "Отметить", тем не менее указанная функция не работает(((
Вот Я вручную отметил человека
https://api.vkontakte.ru/method/video.getTags.xml?uid=&vid=162459149&access_token=
XML:
<?xml version="1.0" encoding="utf-8"?>
<response list="true">
 <tag>
  <uid>131940776</uid>
  <tag_id>96171901</tag_id>
  <placer_id>8113078</placer_id>
  <tagged_name>Мария Гортованова</tagged_name>
  <date>1329070038</date>

  <viewed>0</viewed>
 </tag>
</response>




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

отвечаю Сам Себе :laugh:
Отметить данным методом можно только то видео, где есть кнопка "ОТМЕТИТЬ".
А так всё работает)))
 

sumejcom

Новичок
Сообщения
3
Репутация
0
Кстати вопрос к Автору по поводу: "Captcha is needed"
http://vk.com/developers.php?oid=-1&p=%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%3A_Captcha_is_needed
Если какое-либо действие (например, отправка сообщения) выполняется пользователем слишком часто, то запрос к API может возвращать ошибку "Captcha needed". При этом пользователю понадобится ввести код с изображения и отправить запрос повторно с передачей введенного кода Captcha в параметрах запроса.

Как поступать?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Проверять что выдает Вам сервер Вконтакте и определять есть ли данная ошибка. Если есть - Выдавать GUI окно с капчей и InputBox и передавать дополнительные параметры. Если такового нет, то делать как обычно.
 

lacoil

Новичок
Сообщения
9
Репутация
1
Если кому интересно, то Logout из приложения можно выполнить так:

Код:
Func _VK_logout($iAppID)
	Local $sOAuth_url = "http://oauth.vkontakte.ru/logout?client_id=" & $iAppID
	Local $oIE = _IECreateEmbedded()
	$_sGUITitle="_VK_Logout"

	$_hATgui = GUICreate($_sGUITitle, 400, 300, -1, -1, $WS_SYSMENU)
	GUICtrlCreateObj($oIE, 5, 5, 385, 260)

	_IENavigate($oIE, $sOAuth_url)
	if @error then
		Return False
	EndIf

	GUIDelete($_hATgui)

	Return True
EndFunc



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

не получается получить getProfiles для нескольких uid :-\
Результат завершается с ошибкой 113 Invalid user ID. Есть идеи?

Код:
$soList="1_2"
$test=_VK_getProfiles($aA[1],$soList)
MsgBox(0,"",$test)
 
Верх