@rusindex
Начинающий програмист

Как получить методом groups.getMembers пользователей сообщества у кого сегодня день рождение?

Вот код:

date_default_timezone_set('Etc/GMT-5');
$date = date("d.m"); // Текущая дата (день.месяц)
$datestr = strtotime($date);

//header('Content-type: application/json');
$token = "";
$page = 0;
$limit = 1000;
$users = array();
do {
$offset = $page * $limit;
//Получаем список пользователей
$members = json_decode(file_get_contents("https://api.vk.com/method/groups.getMembers?group_id=тутid&offset={$offset}&count={$limit}&fields=bdate&access_token={$token}&v=5.69"), true);

//Спим
sleep(1);

for($i = 0; $i < count($members['response']['items']); $i++) {
$users []= $user; // добавляем юзера к юзерам

$dateusers = strtotime($members['response']["items"][$i]["bdate"]);
//$datevk = date("d.m.Y", $dateusers);
//$datev = strtotime($datevk);

if ($dateusers == $datestr) {
//if(preg_match("~\s*(09.12)\s*~u", $datevk)) {
echo $members['response']["items"][$i]["bdate"].' <a href="//vk.com/id'.$members['response']["items"][$i]["id"].'" target="_blank">'.$members['response']["items"][$i]["first_name"].'</a><br>';
} else {$members['response']['items'][$i]['bdate'] = "";}

}
//Увеличиваем страницу
$page++;
} while($members['response']['count'] > $offset + $limit );

foreach ($users as $n => $user) // ходим по юзерам
if(@$user['deactivated']) // и забаненных
unset($users[$n]); // удаляем
//var_dump($users);


Подскажите пожалуйста почему код не работает?
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
bdate может быть без года или вообще отсутствовать
"bdate": "19.3"
"bdate": "3.2.1988"
"bdate": "18.3.1985"


формат bdate в vk на РНР соотв-но
date("j.n.Y"); или если без года date("j.n");

strtotime выкиньте, он тут не нужен
Всё что нужно это сравнить текущую дату date("j.n") и bdate. Причем для сравнения надо проверить что bdate начинается с этой строки.

ходим по юзерам, забаненных, удаляем

И оптимизация по коду. Эту проверку можно сделать в начале цикла for, и не вносить deactivated в список $users в принципе, тогда и не придётся потом их удалять.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы