Что нового

Наброски бота для OLike

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Мне это не нужно, но желающих много..

Собственно код:

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

Функцию для Капчи не проверял. Будьте внимательны :smile:

З.Ы. Некоторые функции просто взяты из http://autoit-script.ru/index.php/topic,7517.msg51510.html#msg51510, некоторые доработаны. Не осуждайте за это :smile:
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
DarWiM [?]
З.Ы. Некоторые функции просто взяты из VK API UDF - библиотека для работы с Vkontakte API, некоторые доработаны
Я рад что ты это написал. Но на будущее: если функции копируются из UDF, то они копируются вместе с шапкой если таковая имеется, потому что в ней зачастую указан автор, и дополнительная информация :smile:
 
Автор
DarWiM

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Medic84
Та знаю я, но наброски же :smile: Просто шапки много места занимают и мешают ориентироваться..


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

Странно. Работает "через раз". Иногда _VK_likesAdd() возвращает ошибку параметров, хотя они (вроде) верные.
Кто пользуется, сообщите о своих наблюдениях.
Уверен, что _VK_UrlToID() виновен во всех бедах и поэтому требует доработки.
 
Верх