Получение количества участников групп VK API

674
08 января 2017, 19:55

Доброго времени суток господа. Нужна ваша помощь в легкой задаче, увы, для меня из за нехватки опыта это оказалось сложным.

Работаю с VK API. Произвожу поиск групп по названию через groups.search (к примеру музыка/игры/фильмы), получаю список перебором foreach ($data1['response'] as $item) и вывожу название и картинку группы.

Затем мне нужно получить количество участников для каждой группы, это можно сделать через метод groups.getMembers введя group_id, но group_idя могу получить только во время перебора foreach ($data1['response'] as $item). Если я так сделаю, то в принципе все работает, но скорость существенно падает, и страница начинает грузится до 3-5 секунд. Мне даже кажется, что скрипт не успевает до конца отрабатывать, потому что на некоторые группы я не получаю количества участников.

Может быть я что-то не так делаю, а мне кажется, что это так, и это можно реализовать по другому, но как я пока не знаю. Буду благодарен любой помощи или подсказке в какую сторону копать.

Вот мой код:

<?php 
    //Получаю список групп
    $url1 = file_get_contents("https://api.vk.com/method/groups.search?q=".$_POST['vkgroup']."&access_token=*MYTOKEN*");
    //ССылка на получение количество пользователей
    $url2 = "https://api.vk.com/method/groups.getMembers?group_id=";
    $data1 = json_decode($url1,true);     
    foreach ($data1['response'] as $item) {
        //Получаю список участников в группе
        $url3 = file_get_contents($url2.$item['screen_name']);
        $data2 = json_decode($url3,true);
        //Получаю цифрой количество участников
        $cuser=$data2['response']['count'];
        //Вывожу количество участников
        echo $cuser;
        //Вывожу картинку группы
        echo "<img src=".$item['photo']."> ";
        //Вывожу название группы
        echo $item['name']."<br>";
    }
?>
Answer 1

Вот такой (достаточно кривой, но работающий) пример у меня получился:

var f = []; 
 
var i = 0; 
$("li").each(function() { 
  var gid = $(this).attr("data-gid"); 
  var q = i; 
  i++; 
  var groupInfoUrl = "https://api.vk.com/method/groups.getMembers?callback=f[" + q + "]&v=5.60&group_id=" + gid; 
  f[q] = function(result) { 
    $("li").eq(q).find('span').text(result.response.count); 
  } 
  var script = document.createElement('SCRIPT'); 
  script.src = groupInfoUrl; 
  document.getElementsByTagName("head")[0].appendChild(script); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<ul> 
  <li data-gid="20629724">https://vk.com/habr - <span>...</span></li> 
  <li data-gid="71741545">https://vk.com/googlerussia - <span>...</span></li> 
</ul>

READ ALSO
Не могу исправить ошибку в Symfony

Не могу исправить ошибку в Symfony

CRITICAL - Fatal Error: Class AppBundle\Entity\User contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (Symfony\Component\Security\Core\User\UserInterface::getRoles, Symfony\Component\Security\Core\User\UserInterface::eraseCredentials)

356
PHP, распарсить JSON

PHP, распарсить JSON

Здравствуйте

786
Выводит иероглифы вместо русских букв

Выводит иероглифы вместо русских букв

Почему не выводит русские символы?

509