Что нового

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

BestProTop

http://www.about.me/bestprotop
Сообщения
28
Репутация
3
2 Семёнычев Роман
То что можно - это точно 8) но вот как - я не особо шарю...
Будем ждать, может кто подскажет 8)
 

Ромка Пупков

Новичок
Сообщения
25
Репутация
1
в идеале хочется папку рядом со скриптом, где лежат куки от ИЕ, информация об авторизации на сайте, и всё прочее
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Слушайте, а еще не появилось просмотр диалогов? Отправка сообщений в диалоге и.т.д... ? Хочется мини клиент сделать, т.к вк мне не очень нравится. Не очень удобный он. Хочется сделать что-то компактное, удобное.
 
G

GenoTIP

Гость
Семёнычев Роман [?]
в идеале хочется папку рядом со скриптом, где лежат куки от ИЕ, информация об авторизации на сайте, и всё прочее
OffTopic:
наивный такой.
И вообще, судя по твоим сообщениям на форуме, ты хочешь чужими руками всё сделать..я бы банил этих скрипткидисов
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Извиняюсь, если мой вопрос слегка туповат, но будут-ли функции для работы с сообщениями? И если будут, то когда?

Если уже есть, то прошу скинуть ссылку на UDF, в которой они имеются


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

Не знаю, пригодится-ли...
Недавно нашел в группе в контакте такой скрипт для скачивания музыки из ВКонтакте. На версии 3.3.6.1 работает как часы, правда загружает долговато... Может понадобится :smile:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListBoxConstants.au3>
#include <EditConstants.au3>
#include <ProgressConstants.au3>
#include <GUIConstantsEx.au3>

#NoTrayIcon

Global $sURL = 'http://vk.com/audio' 
Global $sSongName
Global $sLog
Global $sLink
Global $sDir = @ScriptDir


$MainWin = GUICreate("VKSave", 400, 450, -1, -1)
GUISetBkColor(0xFFFFFF) 
GUISetState()
$icon = GUICtrlCreateIcon('C:\Users\И\Desktop\au3\VKSave\B.ico', 1, 10, 400)
$dl = GUICtrlCreateButton("Скачать", 250, 350, 120, 25)
$StartList = GUICtrlCreateButton("Войти", 250, 300, 120, 25)
$quit = GUICtrlCreateButton("Выйти", 250, 400, 120, 40)
$DirButton = GUICtrlCreateButton("Обзор", 100, 400, 120, 40)
GUICtrlSetBkColor($DirButton, 0x4682B4)
GUICtrlSetColor($DirButton, 0xFFFFFF)
GUICtrlSetBkColor($StartList, 0x4682B4)
GUICtrlSetColor($StartList, 0xFFFFFF)
GUICtrlSetBkColor($quit, 0x4682B4)
GUICtrlSetColor($quit, 0xFFFFFF)
$oEmailLabel = GUICtrlCreateLabel('Телефон или e-mail:', 10, 280, 125, 25)
$oPassLabel = GUICtrlCreateLabel('Пароль:', 10, 330, 125, 25)
GUICtrlSetColor($oEmailLabel, 0x808080)
GUICtrlSetColor($oPassLabel, 0x808080)
$oEmail = GUICtrlCreateInput('Login', 10, 300, 170, 25)
$oPass = GUICtrlCreateInput('Pass', 10, 350, 170, 25, $ES_PASSWORD)
$mylist = GUICtrlCreateListView("Исполнитель         |Название песни         |Размер файла          ", 2, 2, 396, 270)
GUICtrlSetBkColor($mylist, 0xFFFFFF)
GUICtrlSetLimit(-1, 200)
GUICtrlSetState($dl, $GUI_DISABLE)
GUICtrlSetBkColor($dl, 0xDCDCDC)
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$msg = 0
	
While $msg <> $GUI_EVENT_CLOSE
	$msg = GUIGetMsg()
	Select
		Case $msg = $quit
			Exit
		Case $msg = $dl
			$sRecord = GUICtrlRead(GUICtrlRead($mylist), 2)
			$sLink = GetLink($sRecord)
			$aName = StringRegExp($sRecord, '(.*?\|.*?)\|', 3)
			$sName = StringReplace($aName[0], '|', '-')
			DlSong($sLink, $sName, $sDir)
			ConsoleWrite($sLink & @CRLF &  $sRecord)
		Case $msg = $DirButton
				$sDir = FileSelectFolder('Выберите папку', '')	
		Case $msg = $StartList
				GUICtrlSetState($StartList, $GUI_DISABLE)
				GUICtrlSetBkColor($StartList, 0xDCDCDC)
			If Not Connect() Then
				MsgBox(0, '', 'ресурс vk.com не доступен')
				Exit
			EndIf
			If Login() Then
				$sSrc = GetAudioSource()
				GetAudioList($sSrc)
				GUICtrlSetState($dl, $GUI_ENABLE)
				GUICtrlSetBkColor($dl, 0x4682B4)
				GUICtrlSetColor($dl, 0xFFFFFF)
				GUICtrlSetColor($StartList, 0xFFFFFF)
				GUICtrlSetState($oEmail, $GUI_DISABLE)
				GUICtrlSetState($oPass, $GUI_DISABLE)
			Else 
				MsgBox(0, '', 'логин или пароль введены неверно')
				GUICtrlSetState($StartList, $GUI_ENABLE)
				GUICtrlSetBkColor($StartList, 0x4682B4)
				GUICtrlSetColor($StartList, 0xFFFFFF)
			EndIf	
	EndSelect		
	sleep(10)
WEnd



Func Login()
	$sEmail = GUICtrlRead($oEmail)
	$sPass = GUICtrlRead($oPass)
	$oHTTP.Open("POST","http://login.vk.com/?act=login")
	$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
	$oHTTP.SetRequestHeader("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*")
	$oHTTP.SetRequestHeader("Accept-Language", "ru")
	$oHTTP.SetRequestHeader("Referer","http://vkontakte.ru")
	$oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
	$oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
	$oHTTP.SetRequestHeader("Host","login.vk.com")
	$oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
	$oHTTP.Send('email='&$sEmail&'&pass='&$sPass)
	$sData = $oHTTP.ResponseText
	If StringInStr($sData, 'Не удается войти') Then
		Return 0
	Else
		Return 1
	EndIf
EndFunc

Func GetAudioSource()
	$oHTTP.Open('GET', 'http://vk.com/audio', 0) 
	$oHTTP.Send()
	$sData = $oHTTP.ResponseText
	Return $sData
EndFunc

Func DlSong($sLink, $sName, $sDir)
	$DlWin = GUICreate('Загрузка', 100, 10, -1, -1, $WS_POPUP)
	GUISetState(@SW_SHOW)
	$oProgress = GUICtrlCreateProgress(0, 0, 100, 10)
	$sName = StringReplace($sName, "'", "")
	$iSize = InetGetSize($sLink)
	If $iSize = 0 Then 
		MsgBox(0, '', 'Ошибка загрузки')
		GUIDelete($DlWin)	
		Return 0 
	EndIf	
	ConsoleWrite('$iSize ' & $iSize & @CRLF)
	$hFile = InetGet($sLink, $sDir & '\' & $sName & '.mp3', 0, 1)
    $iPercent = 0
	While $iPercent < 100
		$iReady = InetGetInfo($hFile, 0)
		ConsoleWrite('$iReady ' & $iReady & @CRLF)
		$iPercent = ($iReady/$iSize) * 100
		ConsoleWrite('$iPercent ' & $iPercent & @CRLF)
		GUICtrlSetData($oProgress, $iPercent) 
		sleep(10)
	WEnd
	GUICtrlSetData($oProgress, 100)
	sleep(1000)
	GUIDelete($DlWin)	
EndFunc

Func GetLink($sRecord)
	$aSong = StringRegExp($sRecord, '.*?\|.*?\|', 3)
	$start = StringInStr($sLog, $aSong[0]) + StringLen($aSong[0]) + 1
	$end = StringInStr($sLog, '.mp3', 0, 1, $start)
	$count = $end - $start
	$sCut = StringMid($sLog, $start, $count)
	$sLink = $sCut & '.mp3'
Return $sLink
EndFunc	



Func Connect()
	If ping('vk.com') Then
		Return 1
	Else
		Return 0
	EndIf
EndFunc	

Func GetAudioList($sSrc)
	GUISetState(@SW_DISABLE, $MainWin)
	$WinForWait = GUICreate('Пожалуйста подождите...', 180, 40, -1, -1, $WS_POPUP+$WS_BORDER+$WS_DLGFRAME)
	GUISetBkColor(0xFFFFFF, $WinForWait)
	GUICtrlCreateLabel('Построение списка...', 30, 10, 240, 20)
	GUISetState(@SW_SHOW, $WinForWait)
	GUISetState(@SW_DISABLE, $WinForWait)
	$aSrcElement = StringRegExp($sSrc, '(?s)<input type="hidden" id="audio_info.*?Audio\.selectPerformer.*?udio_remove_wrap fl_r', 3)
	For $i = 0 To UBound($aSrcElement) - 1
		$aDlLink = StringRegExp($aSrcElement[$i], '(?s)http://cs.[^<>]*?mp3', 3)
		$aPerformer = StringRegExp($aSrcElement[$i], '(?s)selectPerformer\(event,(.*?)\);', 3)
		$aSongName1 = StringRegExp($aSrcElement[$i], '(?s)<span class="title">([^<>]*?)<\/span><span', 3)
		$aSongName2 = StringRegExp($aSrcElement[$i], '(?s)cancelEvent\(event\);">([^<>]*?)<\/a> <\/span><span', 3)
		$aPerformer[0] = StringReplace($aPerformer[0], "'", "")
		
		If IsArray($aSongName1) Then
			$iSongSize = InetGetSize($aDlLink[0])
			$iSongSize = $iSongSize/1000000
			$aFormatSize = StringRegExp($iSongSize, '.*?\..', 3)
			If IsArray($aFormatSize) Then
				GUICtrlCreateListViewItem('' & $aPerformer[0] & '|' & $aSongName1[0] & '|' & $aFormatSize[0] & ' Мб' & '', $mylist)
				$sLog &= $aPerformer[0] & '|' & $aSongName1[0] & '| ' & $aDlLink[0] & @CRLF
			Else
				GUICtrlCreateListViewItem('' & $aPerformer[0] & '|' & $aSongName1[0] & '|' & $aFormatSize[0] & ' Мб' & '', $mylist)
				$sLog &= $aPerformer[0] & '|' & $aSongName1[0] & '| ' & '?' & @CRLF
			EndIf	
		EndIf
		If IsArray($aSongName2) Then
			$iSongSize = InetGetSize($aDlLink[0])
			$iSongSize = $iSongSize/1000000
			$aFormatSize = StringRegExp($iSongSize, '.*?\..', 3)
			If IsArray($aFormatSize) Then
				GUICtrlCreateListViewItem('' & $aPerformer[0] & '|' & $aSongName2[0] & '|' & $aFormatSize[0] & ' Мб' & '', $mylist)
				$sLog &= $aPerformer[0] & '|' & $aSongName2[0] & '| ' & $aDlLink[0] & @CRLF
			Else
				GUICtrlCreateListViewItem('' & $aPerformer[0] & '|' & $aSongName2[0] & '|' & $aFormatSize[0] & ' Мб' & '', $mylist)
				$sLog &= $aPerformer[0] & '|' & $aSongName2[0] & '| ' & '?' & @CRLF
			EndIf
		EndIf	
	Next
	GUISetState(@SW_ENABLE, $MainWin)
	GUIDelete($WinForWait)
EndFunc
 

BestProTop

http://www.about.me/bestprotop
Сообщения
28
Репутация
3
Сделал функции с загрузкой файлов 8)

Для начала загрузка видео:
Код:
Func _VK_videoSave($_sAccessToken ,$_name='', $_description='', $_is_private='0', $_wallpost='1', $_link='', $_group_id='')
	Local $sResponse
	$sResponse = BinaryToString(InetRead("https://api.vkontakte.ru/method/video.save?name=" & $_name & "&description=" & $_description & "&is_private=" & $_is_private & "&wallpost=" & $_wallpost & "&link=" & $_link & "&group_id=" & $_group_id & "&access_token=" & $_sAccessToken), 4)
	$sReturnAll = $sResponse

	If _VK_CheckForError($sReturnAll) Then
        Return SetError(1, 0, _VK_CheckForError($sResponse))
    Else
        Return $sResponse
    EndIf
EndFunc


Вызываем эту функцию (_VK_videoSave), чтобы получить адрес сервера на который будим грузить (делать post запрос).
Для Post запроса нашел супер функцию, которую когда-то давно делал дядька CreatoR (за что ему респект и уважуха):

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


Ну собственно всё 8)
Приведу часть кода, для примера загрузки (то - как она реализована у меня):
Код:
$sLocalFile = FileOpenDialog('Откройте файл',@ScriptDir,'все(*.*)')
	if not @error Then
		Local $VideoTitle = InputBox("Question", "имя видео файла?", "video1");, "", _
		Local $VideoDesc = InputBox("Question", "описание видео файла?", 'http://vk.com/bestprotop');, "", _
		Global $UploadUrl = _VK_videoSave($aA[1] ,$VideoTitle ,$VideoDesc, '0', '1', '', '')
		ConsoleWrite($UploadUrl&@CR)
		$UploadUrl= StringRegExp($UploadUrl,'.upload_url.:.(.*?).}.*?', 3)
		if IsArray($UploadUrl) Then $UploadUrl=$UploadUrl[0]
		$UploadUrl=StringReplace($UploadUrl,'\','')
		ConsoleWrite($UploadUrl&@CR)
		$hostBegin=StringInStr($UploadUrl,'vk.com')
		$sHost=StringLeft($UploadUrl,$hostBegin+5);Адрес страницы загрузки
		ConsoleWrite($sHost&@CR)
		$sFormAction = $UploadUrl ;Действие формы загрузки (из формы "form action=...upload.php)"
		$sFormName = 'video_file' ;Имя формы загрузки ("input name=uploadfile")
		$status = _TCPFileUpload($sLocalFile, $sHost, $sFormAction, $sFormName)
		ConsoleWrite($status&@CR)
	EndIf


Надеюсь разберетесь 8)
Кстать - ответ функции в _VK_videoSave в JSoN формате.

P.S. - если кто реализует тоже самое с _VK_audioSave - то прошу выложить код 8)
(у меня почему-то пишет ошибку (не верный hash)...)
 

trizorka

Новичок
Сообщения
53
Репутация
4
отличная библиотека, а возможно ли добавление своих стилей, например, как в аддоне stylish к mozilla firefox.
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
есть авторизация, но как выйти из аккаунта?

кст,вот я функции сделал, точнее взял основу и из них сделал:
Код:
Func _VK_audioSearch($_sSearch, $_sUID = "", $_iCount = "300", $_iOffset = "")
	Local $Temp, $sResponse, $asFields[6] = ["aid", "owner_id", "artist", "title", "duration", "url"]

	$sResponse = BinaryToString(InetRead("https://api.vkontakte.ru/method/audio.search.xml?access_token=" & $_sAccessToken & "&q=" & $_sSearch & "&auto_complete=1&lyrics=0&performer_only=0" & "&count=" & $_iCount & "&offset=" & $_iOffset), 4)
	If _VK_CheckForError($sResponse) Then
		Return SetError(1, 0, _VK_CheckForError($sResponse))
	Else

		$aAudio = _CreateArray($sResponse, "audio")

		Dim $aFullArray[UBound($aAudio) + 1][UBound($asFields)]

		$aFullArray[0][0] = UBound($aAudio)
		For $i = 0 To UBound($asFields) - 1
			For $j = 0 To UBound($aAudio) - 1
				$aTemp = _CreateArray($aAudio[$j], StringStripWS($asFields[$i], 8))
				If IsArray($aTemp) Then $aFullArray[$j + 1][$i] = $aTemp[0]
			Next
		Next

		Return $aFullArray
	EndIf
EndFunc   ;==>_VK_audioGet

Func _VK_audioAdd($_audio_id, $_owner_id)
	$sResponse = BinaryToString(InetRead("https://api.vkontakte.ru/method/audio.add.xml?access_token=" & $_sAccessToken & "&audio_id=" & $_audio_id & "&owner_id=" & $_owner_id), 4)
	If _VK_CheckForError($sResponse) Then
		Return SetError(1, 0, _VK_CheckForError($sResponse))
	EndIf
	Return 1
EndFunc


вдруг кому понадобится )
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Все -же, кто может подсказать как выйти из авторизованного пользователя?
Буду очень рад :smile:
 

nsgenn

Новичок
Сообщения
52
Репутация
1
Друзья, а постинг на стену в ГРУППу, а не к пользователю, тоже юзается с помощью команды:

_VK_wallPost ?
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Ganibal95

Попробуй просто перейти по ссылке:
Код:
http://vk.com/login.php?op=logout
 

BestProTop

http://www.about.me/bestprotop
Сообщения
28
Репутация
3
Функция чтоб разлогиниться 8)
Код:
#region _VK_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
 

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
98
Репутация
38
А функций заливки изображений в альбом нету?

PS: Хочу прикрутить к SNAGIT'у скриптик, который будет заливать скрины в спец альбом и возвращать прямую ссылку на картинку...
 

BestProTop

http://www.about.me/bestprotop
Сообщения
28
Репутация
3
2 HukpoFuJl (к сожалению, я дибил и не научился цитировать - но...)

Дружище, посмотри выше... Там я выкладывал функции для заливки чего-то куда-то... Предположительно там как раз фото...
Даже если нет - можешь посмотреть... и сделать по аналогии... Если не получится или не кошерно - я могу выложить у мнея есть функции, которые тебе нужны... Дело в том, что после падения жестяка мне их придется долго искать... + я полностью перекочивал на .Net, MVC и С#.
Собственно по-этому не могу выложить все прямо сейчас (ибо на память уже тоже не вспомню...)
Как я уже сказал - функции есть - если все же у тебя будут затруднения - отпишись в этой теме или в личку... я покарпею и выложу решение сей траблы...

PS - прошу прощения за збивчатость в волеизъявлении - просто и вправду времени немного.... написал - как мог 8)
 

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
98
Репутация
38
Я собственно, покурив документацию апи и примеры заливки видео уже сделал по аналогии функции заливки картинки в альбом и заливки файла в "мои файлы" буду дома выложу свои варианты. Спасибо.
 

prostoix

Новичок
Сообщения
8
Репутация
0
Уважаемые HukpoFuJl и BestProTop
поделитесь пожалуйста созданной Вами функцией для публикации фото в сообщении на стену.
 
Верх