Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Вконтакте lib (http://www.flasher.ru/forum/showthread.php?t=129050)

$mival 23.08.2009 20:29

Вконтакте lib
 
Ссылка на демо-приложение, группа (краткое описание обновлений там)

На данный момент реализованы простейшие методы (из раздела Пользователи и фотографии).

Пример (upd 6го сентября), берём список друзей:

Код AS3:

this._service = new VKService(flashVars, api_secret); 
this._service.addEventListener(VKEvent.COMPLETE, this.myHandler);
this._service.getFriends();
 
private function myHandler(e:VKEvent):void
{
    trace(e.response.data); // XML или JSON
    trace(e.response.vars); // переменные, которые отсылались на сервер,
                            // например o.response.vars.method - строковое имя метода API Вконтакте
}


etc 23.08.2009 22:19

Ну зачем отходить от общепринятой схемы событий в AS3? Про auth_key либа не знает? Я бы постеснялся хранить api_secret по факту в открытом доступе.

musat 24.08.2009 00:22

etc,
думаю, что api_secret тут имеется в виду первый ключ, который принято хранить в клиенте. А второй ключ, который требуется для работы с голосами и должен лежать на сервере, тут не используется.

$mival,
хочу поинтересоваться, в вашей библиотеке интервал между запросами учитывается?

Яски 24.08.2009 09:11

В Опере нельзя скачать

$mival 24.08.2009 09:28

Цитата:

Сообщение от etc (Сообщение 845024)
Ну зачем отходить от общепринятой схемы событий в AS3?

Вы имеете в виду опциональную подписку на события? Действительно сейчас Handler является обязательным и это не всегда удобно. Будет исправлено.

Цитата:

Сообщение от etc (Сообщение 845024)
Про auth_key либа не знает?

не знает.
С auth_key интересно получилось, когда я добавил это приложение, auth_key вообще был пуст, то есть переменная была пуста. естественно приложение было у меня добавлено и я был авторизован. сейчас она таинственно появляется.
нужно блокировать работу с либой при несоответствии ключа действительности, но как быть если он то есть то нет? Наверное нужно сделать проверку тоже опциональной.

Цитата:

Сообщение от etc (Сообщение 845024)
Я бы постеснялся хранить api_secret по факту в открытом доступе.

так не храните :)
может я не так понял вопрос, секрет участвует в формировании подписи запроса sig и больше нигде не фигурирует. в общем перефразируйте вопрос.

Цитата:

Сообщение от musat (Сообщение 845055)
$mival,
хочу поинтересоваться, в вашей библиотеке интервал между запросами учитывается?

нет. я думал об этом изначально, но мне не удалось ни разу превысить лимит, хотя выполнял по 5 запросов за доли секунды. это ограничение работает вообще?
а думалось следующее: делать очередь и учитывая интервал от туда уже брать запросы к API, сделать некое ограничение этой очереди (регулируемое), по превышению которой выстреливало бы соответствующее событие.

Цитата:

Сообщение от Яски (Сообщение 845107)
В Опере нельзя скачать

а точнее? скажите Ваш юзер ид
там выдается ссылка, по нажатию на кнопку.
пока администрация не одобрила приложение, оно не может выдавать файлы и открывать ссылки.

etc 24.08.2009 09:49

Цитата:

Сообщение от $mival (Сообщение 845112)
Вы имеете в виду опциональную подписку на события? Действительно сейчас Handler является обязательным и это не всегда удобно. Будет исправлено.

Нет, я имею ввиду то, как подписываются на события везде. Т. е. например банальный addEventListener(Event.COMPLETE, this.handler_friendsLoaded), а не передача хендлера по ссылке, которую потом проблематично убрать.

Цитата:

Сообщение от $mival (Сообщение 845112)
так не храните :)
может я не так понял вопрос, секрет участвует в формировании подписи запроса sig и больше нигде не фигурирует. в общем перефразируйте вопрос.

Это я малость спутал с фейсбуком. Вообще, подпись, которая хранится в приложении как есть, смысла не имеет.

musat 24.08.2009 12:10

Цитата:

Сообщение от $mival (Сообщение 845112)
мне не удалось ни разу превысить лимит, хотя выполнял по 5 запросов за доли секунды. это ограничение работает вообще?

Странно, может быть, ответ от апи был too many requests?

$mival 24.08.2009 12:53

Цитата:

Сообщение от etc (Сообщение 845116)
Нет, я имею ввиду то, как подписываются на события везде. Т. е. например банальный addEventListener(Event.COMPLETE, this.handler_friendsLoaded), а не передача хендлера по ссылке, которую потом проблематично убрать.

я так и понял.
Цитата:

Сообщение от etc (Сообщение 845116)
Это я малость спутал с фейсбуком. Вообще, подпись, которая хранится в приложении как есть, смысла не имеет.

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

Цитата:

Сообщение от musat (Сообщение 845136)
Странно, может быть, ответ от апи был too many requests?

я знаю как звучит ответ при превышении частоты запросов, спасибо :)

musat 24.08.2009 13:20

$mival,
ну мало ли :) мне пришлось делать очередь, так как без нее вообще никак, запросы постоянно пересекались.

$mival 01.09.2009 11:22

Я смотрю присутствует некоторая путаница в документации.
Про то что идентификатор приложения назвали api_id я уже молчу.
А вот проверка auth_key: из документации:
Цитата:

auth_key вычисляется на сервере ВКонтакте следующим образом:
auth_key = md5(api_id + '_' + viewer_id + '_' + api_secret)

Защищенный секрет api_secret Вы можете узнать на вкладке Платежи при редактировании приложения.
далее про подпись запроса sig:
Цитата:

Параметр sig равен md5 от конкатенации следующих строк:

- viewer_id – id текущего пользователя, переданный SWF посредством flashvars при инициализации.
- пар "parameter_name=parameter_value", расположенных в порядке возрастания имени параметра (по алфавиту).
- секрета приложения api_secret (секрет Вы можете менять при редактировании страницы приложения).
название одно и то же - api_secret, но это два разных ключа, один на закладке "Платежи" (используется для проверки auth_key), другой на закладке "Редактирование" (для подписи запроса sig)

В общем хотелось бы здесь обсудить все эти махинации с ключами, зачем это нужно и есть ли от этого толк.

easmith 06.09.2009 00:03

auth_key используется только для аутентификации на другом сервере

easmith 10.09.2009 22:17

странно Вы сортируете передаваемые параметры =)

$mival 10.09.2009 23:03

Цитата:

Сообщение от easmith (Сообщение 849935)
странно Вы сортируете передаваемые параметры =)

например? предложите свой вариант.

Wolsh 11.09.2009 20:03

По поводу задержек хочу высказаться - на самом деле скорость работы сервера непостоянна. Иногда действительно успевает обрабатывать запросы как есть, но мой первый же опыт с записью нескольких переменных подряд провалился, и как выяснилось - иногда даже двух секунд между запросами не хватает. Когда Москва активна, сервер жутко начинает тормозить. Этого нельзя не учитывать.

$mival 11.09.2009 20:11

Цитата:

Сообщение от Wolsh (Сообщение 850159)
По поводу задержек хочу высказаться - на самом деле скорость работы сервера непостоянна. Иногда действительно успевает обрабатывать запросы как есть, но мой первый же опыт с записью нескольких переменных подряд провалился, и как выяснилось - иногда даже двух секунд между запросами не хватает. Когда Москва активна, сервер жутко начинает тормозить. Этого нельзя не учитывать.

если бы API предоставлял открытый доступ к статистике по серверам, в т.ч. по их нагруженности, тогда да. а как по-другому это учитывать? всегда считать, что сервак нагружен?

Wolsh 12.09.2009 01:29

Ну.. отправлять следующий запрос после получения положительного ответа на предыдущий - вроде разумный подход?

$mival 12.09.2009 02:18

Цитата:

Сообщение от Wolsh (Сообщение 850211)
Ну.. отправлять следующий запрос после получения положительного ответа на предыдущий - вроде разумный подход?

ну да, можно сделать свойством очереди (последовательное выполнение или параллельное), а там уж пускай каждый сам решает.

terbooter 21.09.2009 09:33

Я все запросы на вконтакт ставлю в очередь и шлю по таймеру (3 запроса в секунду)
Конкретное значение подобрал опытным путем (Увеличивал интервал пока не перестал подучать too many requests error)

$mival 21.09.2009 09:36

Цитата:

Сообщение от terbooter (Сообщение 852344)
...
Конкретное значение подобрал опытным путем (Увеличивал интервал пока не перестал подучать too many requests error)

и какое подобрали? в выходные пробовали тестить? :D

BlooDHounD 21.09.2009 10:22

terbooter, а прочитать в документации, что чаще чем в 3 секунды низя, Вы не смогли?

$mival 21.09.2009 10:31

Цитата:

Сообщение от BlooDHounD (Сообщение 852347)
terbooter, а прочитать в документации, что чаще чем в 3 секунды низя, Вы не смогли?

http://www.flasher.ru/forum/showpost...9&postcount=14

_KVA_ 11.01.2010 00:53

поделитесь плиз примером создания очереди для запросов к API ВК. Или советом/принципом/алгоритмом ее создания.
заранее сенкс

udaaff 11.01.2010 01:18

Алгоритм прост: не больше трех запросов в секунду. На деле в полторы, а то и в две.

$mival 11.01.2010 01:34

ну из того класса который я писал летом

Код AS3:

// попытка постановки запроса в очередь, если есть возможность, то запрос сразу выполняется не попадая в очередь
StackController.put(vars:URLVariables, url:String = null):void
// возвращает текущее время таймера
public function get time():uint
// возвращает длину очереди
public function get length():int

подписываемся у StackController на StackStatusEvent.STACK_STATUS

Код AS3:

this._stackControl = new StackController();
this._stackControl.addEventListener(StackStatusEvent.STACK_STATUS, this.prepareAndSend);
this._stackControl.put(vars, url);
 
private function prepareAndSend(e:StackStatusEvent):void
{       
    trace(e.url, e.vars)
}

не совсем красиво но работает :)

_KVA_ 11.01.2010 01:42

хотелось бы найти сообща что-то типа такого:

TimeManager класс для создания очереди

метод QueryAdd -- ставим в очередь запрос, параметры:
-метод api
-параметры для метода api
-приоритет выполнения
-медот выполняемый при получении ответа

метод QuerySend -- отправка запроса к api (с учетом очереди, частоты запросов), параметры:
-
-

и т.д.
или такая функция уже есть в какой-то из сторонних библиотек для взаимодействия с api ВКонтакте и можно из нее взять пример?

$mival 11.01.2010 01:52

Цитата:

Сообщение от _KVA_ (Сообщение 878131)
хотелось бы найти сообща что-то типа такого:

TimeManager класс для создания очереди

метод QueryAdd -- ставим в очередь запрос, параметры:
-метод api
-параметры для метода api
-приоритет выполнения
-медот выполняемый при получении ответа

метод QuerySend -- отправка запроса к api (с учетом очереди, частоты запросов), параметры:
-
-

и т.д.
или такая функция уже есть в какой-то из сторонних библиотек для взаимодействия с api ВКонтакте и можно из нее взять пример?

чем не подходит выше?

_KVA_ 11.01.2010 02:16

в принципе интересное решение, но хотелось бы иметь возможность указывать мой метод,
который будет разбирать ответ от API, в зависимости к какому методу API обратились

chabapok 16.01.2010 16:33

Цитата:

Сообщение от udaaff (Сообщение 878128)
Алгоритм прост: не больше трех запросов в секунду. На деле в полторы, а то и в две.

я так понимаю, что проблема как оно "на деле" из за того, что сетка не гарантирует, что если мы отправляем запросы с периодом 0.4сек, что они придут на сервер с таким же периодом. Эти запросы где-то "там" кладутся в буфер, а потом "выстреливают" сразу все в одно мгновенье. И более того, сетка даже порядок не гарантирует, насколько показывают эксперименты.

Если хочется, чтобы работало максимально стабильно, то перед отправкой следющего надо дожидаться ответа предыдущего, но расплачиваться прийдется быстродействием.

udaaff 16.01.2010 18:03

Цитата:

Если хочется, чтобы работало максимально стабильно, то перед отправкой следющего надо дожидаться ответа предыдущего, но расплачиваться прийдется быстродействием.
Для максимальной стабильности я просто возвращаю запросы, которые вернули ошибку 6, назад в очередь + выставляю 1.5 секунды на три запроса, вместо 1.
А производительность нынче можно повысить через метод execute.

Wolsh 17.01.2010 15:46

Разве смысл очереди не в правильном порядке запросов?))
Не знаю, мой скромный опыт говорит что нужна именно очередь "вернулся - ушел", но никак не задержка по времени. Это отголосок таймлайнового мышления ;) и от него надо избавляться, ориентируясь строго на события: запрос - ответ - запрос - ответ. Таймер не дает гарантии даже при одном запросе в три секунды, очередь же дает стопроцентную гарантию.

udaaff 17.01.2010 16:19

Цитата:

Сообщение от Wolsh (Сообщение 879750)
Разве смысл очереди не в правильном порядке запросов?))
Не знаю, мой скромный опыт говорит что нужна именно очередь "вернулся - ушел", но никак не задержка по времени. Это отголосок таймлайнового мышления ;) и от него надо избавляться, ориентируясь строго на события: запрос - ответ - запрос - ответ. Таймер не дает гарантии даже при одном запросе в три секунды, очередь же дает стопроцентную гарантию.

О гарантии чего идет речь? Очередности?
Мы о разных очередях говорим, видимо. Если надо, чтобы один запрос был выполнен после обработки другого, ясное дело, что его отправку нужно инициировать в обработчике первого.
Если должно быть отправлено n несвязных между собой запросов, нет никакого смысла соблюдать их очередность. Достаточно следить за тем, чтобы в рамках одной (читай полторы, а то и двух) секунд не было более трех вызовов.
Но как уже было замечено
Цитата:

Эти запросы где-то "там" кладутся в буфер, а потом "выстреливают" сразу все в одно мгновенье.
Поэтому, только для того, чтобы убедиться, что запросы где-то не лежат в куче, можно предыдущих дожидаться. Да и то я не очень в этом уверен, так как не знаю как на Вконтакте все это дело обрабатывается.

udaaff 23.01.2010 11:00

Цитата:

Сообщение от Tellmypl (Сообщение 881337)
ROK они узнают.. какую-нибудь твою великую тайну например, что ты читаешь башорг
насчет сомнительно.. а как существует такой проект? я могу говорить только про "вконтакте", зарегена только там. у них же даже рекламы нет.
Сиэль а ты в контакте или одноклассниках? или и там, и там?

На форуме завелся троль...

etc 23.01.2010 19:00

Цитата:

Сообщение от Tellmypl (Сообщение 881337)
ROK они узнают.. какую-нибудь твою великую тайну например, что ты читаешь башорг
насчет сомнительно.. а как существует такой проект? я могу говорить только про "вконтакте", зарегена только там. у них же даже рекламы нет.
Сиэль а ты в контакте или одноклассниках? или и там, и там?

Это с кем разговор?

udaaff 23.01.2010 19:08

Цитата:

Сообщение от etc (Сообщение 881424)
Это с кем разговор?

Это что-то непонятное уже не в первой теме.

etc 23.01.2010 19:21

Цитата:

Сообщение от udaaff (Сообщение 881425)
Это что-то непонятное уже не в первой теме.

А, это личинка спамера, оказалось.


Часовой пояс GMT +4, время: 13:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.