Страница 1 из 1

AS3.0 получить список групп

Добавлено: 17 сен 2012, 14:18
Kavis
Пытаюсь вывести список групп
никаких ошибок при получении списка не происходит,
в вернувшемся массиве количество элементов data.length равно 26
а вот сами id групп я так и не получил, что могу делать не так ?
Вот часть кода

Код: Выделить всё

 // если произошла ошибкаfunction onError(data: Object):void {   //SendMessageUp(data.error_msg);   txt1.text=data.error_msg;}var grCount; // количество группvar grCount_prev; //предыдущее количество  aList2.addEventListener(Event.CHANGE, showData2);// выполняем запрос получения списка группgrCount_prev=100;//нужно для вызываемой функцииVK.api('groups.get', {extended:"1", count:100}, groupsLoaded, onError);// данные полученыfunction groupsLoaded(data: Object):void { grCount = data.length;  // узнаем количество групп//txt1.text=grCount; for (var i=0; i<grCount; i++) {     aList2.addItem({label:data[i].name, data:data[i].gid});             }//Если вернулось сто групп, то похоже есть еще группы, делаем новый запросif (grCount==100) {setTimeout(groups_get, 10);}} function groups_get():void {VK.api('groups.get', {extended:1, count:100, offset:grCount_prev }, groupsLoaded, onError);grCount_prev+=grCount;}

Re: AS3.0 получисть список групп

Добавлено: 17 сен 2012, 19:11
gpv123

Код: Выделить всё

function groupsLoaded(data:Array):void{    grCount = data.length - 1;  // узнаем количество групп        //txt1.text=grCount;        for (var i = 1; i < grCount + 1; i++)    {        aList2.addItem({label:data[i].name, data:data[i].gid});    }        // Если есть еще группы, то делаем запрос снова    if (data[0] > grCount_prev) setTimeout(groups_get, 10);}

Код: Выделить всё

function groups_get():void{    VK.api('groups.get', {extended:1, count:1000, offset:grCount_prev}, groupsLoaded, onError);    grCount_prev += grCount;}

Re: AS3.0 получисть список групп

Добавлено: 18 сен 2012, 00:39
sanych_dv
Привыкайте пользовать Timer вместо setTimeout, который фактически использует субкласс SetIntervalTimer класса Timer.

Re: AS3.0 получисть список групп

Добавлено: 18 сен 2012, 14:26
Psijic
тоже не смог разобрать что приходит в группах. В любом случае, там не просто object.name, а более сложная структура.

Вот что мне посоветовали

Можно быстро проверить какие ключи и значения находятся в объекте с помощью

Код: Выделить всё

trace(JSON.encode(object));
Но у меня такой команды не нашлось, я использовал

Код: Выделить всё

JSON.stringify(object);
- на тестовом классе все ок, но я использую wrapper, а контакт не пропускает JSON с ним. Поэтому надо использовать API напрямую (я никогда не использовал так). Поэтому как получится - напиши, какие там пути для данных и как подключать API напрямую заодно (в оф. руководстве написано вроде, надо подключать библиотеку через flashDevelop)

Если что, структура данных там такая:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?><response> <groups_get list="true">  <item>44</item>  <item>   <gid>2992</gid>   <name>F ▪ R ▪ I ▪ E ▪ N ▪ D ▪ S</name>   <screen_name>tvfriends</screen_name>   <is_closed>1</is_closed>   <type>group</type>   <photo>http://vk.com/images/community_50.gif</photo>   <photo_medium>http://vk.com/images/community_100.gif</photo_medium>   <photo_big>http://vk.com/images/question_a.gif</photo_big>  </item>

Re: AS3.0 получисть список групп

Добавлено: 18 сен 2012, 17:32
Kavis
gpv123, дал нормальный код, рабочий)),
вот только мне его все равно пришлось не много изменить если брать по 100 групп из потока, то выводится только сто почему-то
я на скорую руку сделал так

Код: Выделить всё

//постинг в группы var grCount; // количество группvar grCount_prev; //предыдущее количество  cl_frame4.aList2.addEventListener(Event.CHANGE, showData2);// выполняем запрос получения списка группgrCount_prev=100;//нужно для вызываемой функцииVK.api('groups.get', {extended:1, count:100}, groupsLoaded, onError);// данные полученыfunction groupsLoaded(data:Array):void{   grCount = data.length - 1;  // узнаем количество групп      for (var i = 1; i < grCount + 1; i++)    {        cl_frame4.aList2.addItem({label:data[i].name, data:data[i].gid});    }    // Если есть еще группы, то делаем запрос снова    if (data.length > 99) setTimeout(groups_get, 200);} function groups_get():void {VK.api('groups.get', {extended:1, count:100, offset:grCount_prev }, groupsLoaded, onError);grCount_prev+=grCount;} function showData2(event:Event):void {VK.api('wall.post', {owner_id:'-'+event.target.selectedItem.data, message:post_message, attachments:id_upload_photo+'}, wallPostSuccess2, onError);} function wallPostSuccess2(data: Object):void {   SendMessageUp('отправлено');}//end постинг в группы

Re: AS3.0 получисть список групп

Добавлено: 18 сен 2012, 19:02
gpv123

Код: Выделить всё

// Если есть еще группы, то делаем запрос сноваif (data.length > 99) setTimeout(groups_get, 200);
В data[0] вк передает общее кол-во групп, так почему бы не сделать

Код: Выделить всё

// Если есть еще группы, то делаем запрос сноваif (data[0] > grCount_prev) setTimeout(groups_get, 200);

Re: AS3.0 получить список групп

Добавлено: 18 сен 2012, 21:31
Kavis
Буду пробовать размышлять и записывать суть логики

grCount_prev у меня равно 100

data[0] тоже равно 100 она никак не может быть больше grCount_prev, цикл сразу рвется

даже гипотетически , если перейти на следующий цикл запроса
при условии что групп более 100
то в data[0] снова будет 100 в grCount_prev будет уже 200


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

Re: AS3.0 получить список групп

Добавлено: 19 сен 2012, 20:37
gpv123
Kavis писал(а):data[0] тоже равно 100 она никак не может быть больше grCount_prev, цикл сразу рвется
Извиняюсь, я просто в документации немного запутался.

По поводу запросов: лучше использовать execute, т.к. он позволяет сделать до 25 запросов API (т.е. можно вернуть до 25000 групп за один запрос)