DarWiM
Продвинутый
- Сообщения
- 527
- Репутация
- 90
Мне это не нужно, но желающих много..
Собственно код:
Функцию для Капчи не проверял. Будьте внимательны
З.Ы. Некоторые функции просто взяты из http://autoit-script.ru/index.php/topic,7517.msg51510.html#msg51510, некоторые доработаны. Не осуждайте за это
Собственно код:
Код:
#include <Array.au3>
#include <IE.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
$aA = _VK_SignIn(3086927, 8192, 'http://oauth.vk.com/blank.html', 'wap')
$AccessToken=$aA[1]
$oIE=_IEAttach('Заработай') ; присоединяемся к окну, в котором уже вошли на сайт
_IENavigate($oIE,'http://olike.ru/earn.php')
While StringInStr(_IEDocReadHTML($oIE),'1. кликайте эту кнопку')
_IENavigate($oIE,'http://olike.ru/lot-redirect.php')
$sUrl=_IEPropertyGet($oIE,'locationurl')
If $sURL='http://olike.ru/lot-redirect.php' Then
ConsoleWrite('Нечего делать.' & @LF)
Else
ConsoleWrite($sUrl & @LF)
ConsoleWrite('Название объекта: '&_VK_UrlToID($sUrl)&@LF)
ConsoleWrite('ID страницы: '&_VK_UrlToID($sUrl,2)&@LF)
ConsoleWrite('ID записи: '&_VK_UrlToID($sUrl,3)&@LF)
ConsoleWrite(_VK_likesAdd($AccessToken, _VK_UrlToID($sUrl,1), _VK_UrlToID($sUrl,3), _VK_UrlToID($sUrl,2))&@LF&@LF)
EndIf
Sleep(5000)
_IENavigate($oIE,'http://olike.ru/earn.php')
Sleep(5000)
WEnd
Func _VK_likesAdd($_sAccessToken, $_sType, $_iItem_id, $_sOwnerID = "", $_sCaptcha_sid='')
Local $sLikes
If $_sCaptcha_sid <> '' Then
Local $_sCaptcha_ans=_VK_Captcha($_sCaptcha_sid)
Local $sResponse = BinaryToString(InetRead("https://api.vkontakte.ru/method/likes.add.xml?"& _
"owner_id=" & $_sOwnerID & "&type=" & $_sType & "&item_id=" & $_iItem_id & "&access_token=" & $_sAccessToken & _
"&captcha_sid=" & $_sCaptcha_sid & "&captcha_key=" & $_sCaptcha_ans), 4)
Else
Local $sResponse = BinaryToString(InetRead("https://api.vkontakte.ru/method/likes.add.xml?"& _
"owner_id=" & $_sOwnerID & "&type=" & $_sType & "&item_id=" & $_iItem_id & "&access_token=" & $_sAccessToken), 4)
EndIf
$sAnswer=_VK_CheckForError($sResponse)
If StringInStr($sAnswer,'Captcha needed') Then
$_aCaptcha_sid=_CreateArray($sResponse, "captcha_sid")
_VK_likesAdd($_sAccessToken, $_sType, $_iItem_id, $_sOwnerID, $_aCaptcha_sid[0])
ElseIf $sAnswer Then
Return SetError(1, 0, _VK_CheckForError($sResponse))
Else
$sLikes = _CreateArray($sResponse, "likes")
Return $sLikes[0]
EndIf
Return $sResponse
EndFunc ;==>_VK_likesAdd
Func _VK_Captcha($_sCaptcha_sid,$_sGUITitle='Captcha!')
Local $oIE = _IECreateEmbedded()
$_hCgui = GUICreate($_sGUITitle, 150, 164, -1, -1, $WS_SYSMENU)
GUICtrlCreateObj($oIE, -5, -10, 200, 80)
GUICtrlSetState(-1,$GUI_DISABLE)
$_Button_Refresh=GUICtrlCreateLabel('Обновить',0,69,150,15,0x01)
GUICtrlSetFont(-1,8,800)
GUICtrlSetBkColor(-1,0xFFFFFF)
$_Captcha_Input=GUICtrlCreateInput('',5,90,135,20,0x01)
GUICtrlSetFont(-1,9,800)
$_Button_OK=GUICtrlCreateLabel('Подтвердить',0,115,150,20,0x01)
GUICtrlSetFont(-1,8,800)
GUICtrlSetBkColor(-1,0xFFFFFF)
Local $_aAccelKeys[1][2] = [["{ENTER}", $_Button_OK]]
GUISetAccelerators($_aAccelKeys)
_IENavigate($oIE, 'http://api.vk.com/captcha.php?sid='&$_sCaptcha_sid)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $_Button_Refresh
_IENavigate($oIE, 'http://api.vk.com/captcha.php?sid='&$_sCaptcha_sid)
Case $_Button_OK
$_sCaptcha_ans=GUICtrlRead($_Captcha_Input)
GUISetState(@SW_HIDE)
GUISetAccelerators('')
GUIDelete($_hCgui)
Return $_sCaptcha_ans
EndSwitch
WEnd
EndFunc
Func _VK_UrlToID($_sUrl,$_iFlag=1)
If StringInStr($_sUrl,'?w') Then
If $_iFlag=2 Then
Local $_sPattern='(.*)/(.*?)\?w.*'
ElseIf $_iFlag=3 Then
Local $_sPattern='.*/(.*?).*?(\d+)_(\d+)'
Else
Return 'post'
EndIf
Else
Local $_sPattern='.*/([a-z]+).*?(\d+)_(\d+)'
EndIf
$_sReturn=StringRegExpReplace($_sUrl,$_sPattern,'\'&$_iFlag)
If $_sReturn='wall' Then Return 'post'
Return $_sReturn
EndFunc
Func _VK_SignIn($iAppID, $sScope, $sRedirect_uri = "http://oauth.vk.com/blank.html", $sDisplay = "wap", $sResponse_type = "token")
Local $sOAuth_url = "https://oauth.vk.com/authorize?client_id=" & $iAppID & "&scope=" & $sScope & "&redirect_uri=" & $sRedirect_uri & "&display=" & $sDisplay & "&response_type=" & $sResponse_type
Return __guiAccessToken($sOAuth_url, 'Приложение запрашивает доступ', $sRedirect_uri)
EndFunc
#region Internal Functions
Func __guiAccessToken($_sURI, $_sGUITitle, $_sRedirect_uri)
Local $oIE = _IECreateEmbedded()
Local $hTimer = TimerInit()
$_hATgui = GUICreate($_sGUITitle, 400, 300, -1, -1, $WS_SYSMENU)
GUICtrlCreateObj($oIE, 5, 5, 385, 260)
_IENavigate($oIE, $_sURI)
$sResponse = _IEBodyReadText($oIE)
If StringInStr($sResponse, "Login success") Then
$sURL = _IEPropertyGet($oIE, "locationurl")
Return __responseParse($sURL)
EndIf
GUISetState(@SW_SHOW)
While 1
If GUIGetMsg()=$GUI_EVENT_CLOSE Then
Exit
ElseIf TimerDiff($hTimer) > 50 Then
$sURL = _IEPropertyGet($oIE, "locationurl")
;~ ConsoleWrite($sURL & @LF)
If StringInStr($sURL, 'user_id=') Then
GUISetState(@SW_HIDE)
GUIDelete($_hATgui)
Return __responseParse($sURL)
ElseIf StringInStr($sURL,'error') Or StringInStr($sURL,'cancel') Then
Exit
EndIf
$hTimer = TimerInit()
EndIf
WEnd
EndFunc
Func __responseParse($_sResponse)
Local $aNArray = StringSplit($_sResponse, "&"), $aResArray[UBound($aNArray)]
$aResArray[0] = UBound($aNArray)-1
For $i = 1 To $aNArray[0]
$_sStr = StringSplit($aNArray[$i], "=")
$aResArray[$i] = $_sStr[2]
Next
;~ _ArrayDisplay($aResArray)
Return $aResArray
EndFunc
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, "<" & $sCodeWord & ">(.*?)</" & $sCodeWord & ">", 3)
Return $aRetArray
EndFunc ;==>_CreateArray
#endregion Internal Functions
Функцию для Капчи не проверял. Будьте внимательны
З.Ы. Некоторые функции просто взяты из http://autoit-script.ru/index.php/topic,7517.msg51510.html#msg51510, некоторые доработаны. Не осуждайте за это