Что нового

Добываем ID записи и юзера вк и тип поста функциями _IE*.

Gzzk

Новичок
Сообщения
104
Репутация
1
Нужно научится использовать вот эту функцию:
Код:
_VK_likesAdd($sAccessToken, 'post', ид записи, ид хозяина записи)

Но я не знаю,где можно взять ID записи,ID хозяина записи и тип поста.Где можно найти эти данные на странице с записью и как можно вычленить из функциям _IE*?
Пример записи: http://vk.com/photo-31989630_290700628
 

Marselos

Новичок
Сообщения
26
Репутация
0
http://autoit-script.ru/index.php/topic,7517.15.html

почетай внимательно 2 страница
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Gzzk

Код:
; Получение адреса
#include <IE.au3>
$oIE=_IECreate()
$sUrl=_IEPropertyGet($oIE,'locationurl')


;~ $sUrl='http://vk.com/art_instinkt?w=wall-31989630_19101' ; случай 1
$sUrl='http://vk.com/photo-31989630_290700628' ; случай 2

ConsoleWrite('Название объекта: '&_VK_UrlToID($sUrl)&@LF)
ConsoleWrite('ID страницы: '&_VK_UrlToID($sUrl,2)&@LF)
ConsoleWrite('ID записи: '&_VK_UrlToID($sUrl,3)&@LF)

Func _VK_UrlToID($_sUrl,$_iFlag=1)
	If StringInStr($_sUrl,'=') Then
		Local $_sPattern='.*=(.*?)-(\d+)_(\d+)'
	Else
		Local $_sPattern='.*/(.*?)-(\d+)_(\d+)'
	EndIf
	Return StringRegExpReplace($_sUrl,$_sPattern,'\'&$_iFlag)
EndFunc
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Наверное я кривой,но в это коде постоянно прохожит ошибка:
Код:
#include <IE.au3>
#include <VK_API.au3>
; Получение адреса
;$oIE=_IECreate()
;$sUrl=_IEPropertyGet($oIE,'locationurl')

$sAccessToken='670bd156bcd533be95175fd9b7393945'
;~ $sUrl='http://vk.com/art_instinkt?w=wall-31989630_19101' ; случай 1
$sUrl='http://vk.com/wall141591758_4070' ; случай 2

ConsoleWrite('Название объекта: '&_VK_UrlToID($sUrl)&@LF)
ConsoleWrite('ID страницы: '&_VK_UrlToID($sUrl,2)&@LF)
ConsoleWrite('ID записи: '&_VK_UrlToID($sUrl,3)&@LF)
_VK_likesAdd($sAccessToken, 'post', _VK_UrlToID($sUrl,3), _VK_UrlToID($sUrl,2))
if Not @error Then
	MsgBox(64,'Good','Good')
Else
	MsgBox(64,'Error','Error')
EndIf
Func _VK_UrlToID($_sUrl,$_iFlag=1)
    If StringInStr($_sUrl,'=') Then
        Local $_sPattern='.*=(.*?)-(\d+)_(\d+)'
    Else
        Local $_sPattern='.*/(.*?)(\d+)_(\d+)'
    EndIf
    Return StringRegExpReplace($_sUrl,$_sPattern,'\'&$_iFlag)
EndFunc
Думаю,что-то не так с AccessToken.Читал в теме с либой,что где-то в библиотеке нужно поменять APP_ID,как это сделать?
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Gzzk
А если так?
Код:
;~ $sUrl='http://vk.com/art_instinkt?w=wall-31989630_19101' ; случай 1
;~ $sUrl='http://vk.com/photo-31989630_290700628' ; случай 2
$sUrl='http://vk.com/wall141591758_4070' ; случай 3

ConsoleWrite('Название объекта: '&_VK_UrlToID($sUrl)&@LF)
ConsoleWrite('ID страницы: '&_VK_UrlToID($sUrl,2)&@LF)
ConsoleWrite('ID записи: '&_VK_UrlToID($sUrl,3)&@LF)

;~ _VK_likesAdd($sAccessToken, _VK_UrlToID($sUrl,1), _VK_UrlToID($sUrl,3), _VK_UrlToID($sUrl,2))

Func _VK_UrlToID($_sUrl,$_iFlag=1)
	If StringInStr($_sUrl,'=') Then
		Local $_sPattern='.*=([a-z]+).*?(\d+)_(\d+)'
	Else
		Local $_sPattern='.*/([a-z]+).*?(\d+)_(\d+)'
	EndIf
	Return StringRegExpReplace($_sUrl,$_sPattern,'\'&$_iFlag)
EndFunc
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
В вашей функции всё идеально.Просто функция __VK_likesAdd() всегда возвращает ошибку.
Скорее всего - неверно задан auth_key.Как его правильно задать?Из какоего приложения нужно брать auth_key?Я взял из первого попавшегося.Зачем нужно собственное приложение?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Gzzk
Где взять APP_ID? И что это вообще?
Общение программы с API Vkontakte происходит через приложение, его необходимо создать (в нашем случае Standalone-приложение).
http://vkontakte.ru/editapp?act=create&site=1

А создается для безопасности приложения. Если приложение стало воровать пароли(спамит и т.п.), то APP_ID блокируется и приложение больше ничего не может, а человеку запрещают создавать APP_ID (скорее всего).
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Код:
#include <IE.au3>
#include <VK_API.au3>
; Получение адреса
;$oIE=_IECreate()
;$sUrl=_IEPropertyGet($oIE,'locationurl')
$aAuth='0'
$iApp_ID=1
$aAuth = _VK_SignIn($iApp_ID,"notify,status")
if ($aAuth='0') Then
	MsgBox(64,'Error','Error')
EndIf
;~ $sUrl='http://vk.com/art_instinkt?w=wall-31989630_19101' ; случай 1
;~ $sUrl='http://vk.com/photo-31989630_290700628' ; случай 2
$sUrl='http://vk.com/wall141591758_4070' ; случай 3

ConsoleWrite('Название объекта: '&_VK_UrlToID($sUrl)&@LF)
ConsoleWrite('ID страницы: '&_VK_UrlToID($sUrl,2)&@LF)
ConsoleWrite('ID записи: '&_VK_UrlToID($sUrl,3)&@LF)

 _VK_likesAdd($aAuth, 'post', _VK_UrlToID($sUrl,3), _VK_UrlToID($sUrl,2))
if Not @error Then
    MsgBox(64,'Good','Good')
Else
    MsgBox(64,'Error','Error')
EndIf
Func _VK_UrlToID($_sUrl,$_iFlag=1)
    If StringInStr($_sUrl,'=') Then
        Local $_sPattern='.*=([a-z]+).*?(\d+)_(\d+)'
    Else
        Local $_sPattern='.*/([a-z]+).*?(\d+)_(\d+)'
    EndIf
    Return StringRegExpReplace($_sUrl,$_sPattern,'\'&$_iFlag)
EndFunc
Полагаю,такой код,если поставить правильный APP_ID будет работать.Верно?
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Medic84, Gzzk

Уважаемые, я с ходу нашёл несколько ошибок в _VK_likesAdd()
К тому же я заметил, что именно в эти дни в VK происходят обновления. Они затронули и авторизацию приложений..
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
DarWiM
Тогда надо будет посмотреть... Но что то много на мне проектов висит... Ничего не успеваю :(
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Вот мой вариант функции для авторизации. Переделывался 100 раз, но за основу взята первая версия из VK API.

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



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

Gzzk
Коряво, но должно работать.
Код:
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
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Так тот код,что я приводил выше с вашими изменениями должен работать?
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Gzzk
Врядли.. :smile:
И проблемы были(?) именно в моей функции, а не в получении ключика..
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Код:
#include <IE.au3>
#include <VK_API.au3>
; Получение адреса
;$oIE=_IECreate()
;$sUrl=_IEPropertyGet($oIE,'locationurl')
$aAuth='0'
$iApp_ID=1
$aAuth = _VK_SignIn($iApp_ID,"notify,status")
if ($aAuth='0') Then
	MsgBox(64,'Error','Error')
EndIf
MsgBox(64,'Auth','Auth'& $aAuth)
;~ $sUrl='http://vk.com/art_instinkt?w=wall-31989630_19101' ; случай 1
;~ $sUrl='http://vk.com/photo-31989630_290700628' ; случай 2
$sUrl='http://vk.com/wall141591758_4070' ; случай 3

ConsoleWrite('Название объекта: '&_VK_UrlToID($sUrl)&@LF)
ConsoleWrite('ID страницы: '&_VK_UrlToID($sUrl,2)&@LF)
ConsoleWrite('ID записи: '&_VK_UrlToID($sUrl,3)&@LF)

 _VK_likesAdd($aAuth, 'post', _VK_UrlToID($sUrl,3), _VK_UrlToID($sUrl,2))
if Not @error Then
    MsgBox(64,'Good','Good')
Else
    MsgBox(64,'Error','Error')
EndIf
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
После того,как я логинюсь и нажимаю разрешить в окне появляется надпись Login Succes и всё.Код дальше не работает(не срабатываем
Код:
MsgBox(64,'Auth','Auth'& $aAuth)
).
Использовался ваш вариант функции __guiAccessToken().Может всё дело в том,что приложение не моё?
 
Верх