Доброго времени суток господа. Нужна ваша помощь в легкой задаче, увы, для меня из за нехватки опыта это оказалось сложным.
Работаю с 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>";
}
?>
Вот такой (достаточно кривой, но работающий) пример у меня получился:
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>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
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)