PDA

Просмотр полной версии : [Вконтакте] Работа с ВКонтактовским APIConnection через метод api


s3dworld
22.02.2012, 14:20
Всем доброго дня!

Скачал APIConnection с ВКонтакта. Решил получить список друзей пользователя, у которых установлена игра:


vkAPI.api("friends.getAppUsers",null,OnSuccess,OnError);

// ...

public function OnSuccess(_object:Object):void
{
var array:Array=_object as Array;
var friends:Vector.<uint>=new Vector.<uint>();
var length=array.length;

for(var i:uint=0;i<length;i++) friends.push(uint(array[i]));
}

public function OnError(_object:Object):void
{
funSend(new GetFriendsAppError());
}


Это работает. А вот решил получить информацию о пользователях:


var object:Object=new Object();
var ids:String=_users[0].toString();

for(var i:uint=1;i<_users.length;i++) ids+=","+_users[i].toString();

object["uids"]=ids;
object["fields"]="photo_rec";

vkAPI.api("users.get",object,OnSuccess,OnError);


Срабатывает OnSuccess. Но я не понимаю как из Object получить параметры друзей. Не понимаю как они там хранятся, как извлекать. Сейчас сделал вот так:


public function OnSuccess(_object:Object):void
{
var array:Array=_object as Array;
var users:Vector.<UserDesc>=new Vector.<UserDesc>();
var length=array.length;

for(var i:uint=0;i<length;i++)
{
var object:Object=array[i];
users.push(new UserDesc(uint(object["uid"]),null,String(object["photo_rec"])));
}
}


Но данный код стопорит проигрыватель. Как правильно извлекать? Раньше я работал с сервером ВКонтакте через XML (то есть сам делал запрос и получал XML в ответ). А тут ведь всё лежит в Object. И не понимаю как там это лежит и как докопаться до каждого пользователя и каждого элемента.

И ещё, а можно ли как-то локально тестировать игру? То есть вот мне приходится каждый раз компилировать и заливать на сервер чтобы запускать из ВКонтакта. А это очень не удобно, так как нет отладки. А если запускать локально, то я не могу взаимодействовать с API ВКонтакте. Можно ли как-то это настроить? Процесс разработки ускорился бы.

olexandr
22.02.2012, 19:13
разве, в доках нету примеров этого объекта?
что мешает пропарсить весь объект и посмотреть самому?

for (var i:String in _obj)
trace(i + ": " + _obj[i]);


или вот такой код используется в моем логгере:

public static function logObject(obj:Object, withType:Boolean = false):void {
recoursiveTrace(obj, withType, 0);
}


private static function recoursiveTrace(obj:Object, withType:Boolean, level:int):void {
var _indent:String = '';
for (var i:int = 0; i < level; i++)
_indent += ' ';

var _type:String = obj is Array ? 'arr' : 'obj';
var _constructor:String = '';

for (var _name:Object in obj) {
if (withType) {
_constructor = obj[_name].constructor;
_constructor = ' [' + _constructor.split(' ')[1]
}

log(_type + ':' + level, _indent + _name + ': ' + obj[_name] + _constructor);

if ((typeof obj[_name]) === 'object')
recoursiveTrace(obj[_name], withType, level + 1);
}
}

s3dworld
22.02.2012, 19:46
olexandr
С первым вопросом я разобрался. А вот локально как работать? У меня не получилось.

Rzer
22.02.2012, 21:49
открываешь страничку с игрой, копируешь из приложения flashVars, подсовываешь их APIConnection