Я сам вытянул, но там не хватает городов в больших регионах (не до конца видимо адекватный скрипт или ВК так отдает сейчас)
Нашёл 13 года на гите, но там у крупных городов нет региона, а таких 350 тысяч(((
В общем кто знает где взять, нидхэлп!
Вы уверены?
Я в ручную импортирую 1000 городов с координатами, но 350 тысяч…
А каким образом копируете? т.е. цикл как определяет что полный список выдан, а не популярный.
вот как парсю, там есть файлы примеры уроков, только токен надо добавить чтобы заработало www.youtube.com/watch?v=caUjr_9zvmk&t=3s
Параметры все?need_all1 – возвращать все города. 0 – возвращать только основные города.
флаг, может принимать значения 1 или 0
а ключ какой используете? Сервисный ключ доступа не весь список дает!!!
$regions = Baza::getRegions(); foreach ($regions as $key => $region) { if ($cities = Vk::getCities($region, 0)) { if ($count > 999) { echo "Городов больше тысячи\n"; echo "Всего страниц - " . $pages . "\n"; for ($offset = 1 ; $offset < $pages ; $offset++) { echo "Получаем страницу - {$offset}\n"; if ($cities = Vk::getCities($region, $offset)) { Baza::addCities($cities, $region); } } } else { Baza::addCities($cities, $region); } } //die; echo "---count: " . $count . "----"; } echo "\n-------Скрипт отработал-------\n";
$regions = Baza::getRegions(); foreach ($regions as $key => $region) { if ($cities = Vk::getCities($region, 0)) { $count = $cities->response->count; //вот тут можно вывести переменную $count чтоб понять сколько гродов нашел скрипт if ($count > 999) { // условие деления на страницы при достижении счетчика более 999 echo "Городов больше тысячи\n"; echo "Всего страниц - " . $pages . "\n"; for ($offset = 1 ; $offset < $pages ; $offset++) { // тут цикл прохода постранично. ++ увеличиваем номер страницы Но почему pages больше offset ??? echo "Получаем страницу - {$offset}\n"; if ($cities = Vk::getCities($region, $offset)) { Baza::addCities($cities, $region); } } } else { Baza::addCities($cities, $region); } } //die; echo "---count: " . $count . "----"; } echo "\n-------Скрипт отработал-------\n";
$regions = Baza::getRegions(); foreach ($regions as $key => $region) { if ($cities = Vk::getCities($region, 0)) { if ($count > 999) { echo "Городов больше тысячи\n"; echo "Всего страниц - " . $pages . "\n"; for ($offset = 0 ; $offset < $pages ; $offset++) { echo "Получаем страницу - {$offset}\n"; if ($cities = Vk::getCities($region, $offset*1000)) { Baza::addCities($cities, $region); } } } else { Baza::addCities($cities, $region); } } //die; echo "---count: " . $count . "----"; } echo "\n-------Скрипт отработал-------\n";
Но вылезла другая проблема, судя по готовой базе 2013 года, у городов федерального значения ИД региона 0, это города вроде Москвы или Торонто и их районов, типа Внуково или Пулково в Питере, таких городов и частей больше 350 тысяч и у всех ИД региона 0 (в текстовом поле area хотя там что то вроде "город Москва")) .
В коде выше они не спарсились вообще, поэтому 1,7 а не 2,2, но основная проблема даже не в этом, что делать с регионом 0, логично что он никуда не попадает и найти его в инстанте нельзя при выборе города, вот тут надо понять как быть???
выведите $count а потом уже рассуждать. Он скажет сколько городов отдает скрипт Вам!
Далее уже смотрите логику скрипта.
ну смотрите
foreach ($regions as $key => $region)
это переборка массива.
Далее ставите ограничение сами же:
if ($cities = Vk::getCities($region, 0))
т.е. для всех городов условие юзаете. А только потом уже заносите в базу. И если в этом условие не только 0 значение есть, а для это надо проверить дамп массива, то Вы сами режете список городов.
Вопрос в том что получилось у меня 350 к городов с регионом 0, как с ними быть?
Иерархия в инстанте не позволяет выбирать город без региона, а назначить "вручную" регионы для такого количества городов нереально, вот тут надо какое то изящное решение.