Страница 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, а более сложная структура.
Вот что мне посоветовали
Можно быстро проверить какие ключи и значения находятся в объекте с помощью
Но у меня такой команды не нашлось, я использовал
- на тестовом классе все ок, но я использую 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 групп за один запрос)