Поделитесь у кого есть нормальная?
Я сам вытянул, но там не хватает городов в больших регионах (не до конца видимо адекватный скрипт или ВК так отдает сейчас)
Нашёл 13 года на гите, но там у крупных городов нет региона, а таких 350 тысяч(((
В общем кто знает где взять, нидхэлп!
#1
1 февраля 2019 в 17:38
#2
2 февраля 2019 в 05:20
350 тысяч городов в России?
Вы уверены?
Я в ручную импортирую 1000 городов с координатами, но 350 тысяч…
Вы уверены?
Я в ручную импортирую 1000 городов с координатами, но 350 тысяч…
#3
2 февраля 2019 в 06:34
Александр, d России чуть более 1100 гродов, возможно там населенные пункты ещё? типа хутора, села и т.п.
А каким образом копируете? т.е. цикл как определяет что полный список выдан, а не популярный.
А каким образом копируете? т.е. цикл как определяет что полный список выдан, а не популярный.
Сегодня в 01:57
#4
2 февраля 2019 в 11:11
skewes, kirkr, мне нужен мир, база вк вполне подходит, вот апи vk.com/dev/database.getCities
вот как парсю, там есть файлы примеры уроков, только токен надо добавить чтобы заработало www.youtube.com/watch?v=caUjr_9zvmk&t=3s
вот как парсю, там есть файлы примеры уроков, только токен надо добавить чтобы заработало www.youtube.com/watch?v=caUjr_9zvmk&t=3s
#5
2 февраля 2019 в 12:54
Александр,
а ключ какой используете? Сервисный ключ доступа не весь список дает!!!
Параметры все?need_all1 – возвращать все города. 0 – возвращать только основные города.
флаг, может принимать значения 1 или 0
а ключ какой используете? Сервисный ключ доступа не весь список дает!!!
#6
2 февраля 2019 в 13:07
kirkr, Работаю с ключом доступа пользователя. Need_all изменял, он не существенно прибавляет количество городов с 900 к до милиона, хотя должно быть больше 2,2 млн
#7
2 февраля 2019 в 16:46
Там ошибка в алгоритме парсинга, не могу понять как исправить, сейчас для примера если городов больше 1000 получаем 1000, если больше 3000 тысяч то получаем 1002, если больше 6000 тысяч то получаем 1005
#8
2 февраля 2019 в 17:48
как бы так и есть, он определяет количество страниц, например 7 при 6000+ городов и проходит все 7 (или 6???) сдвигаясь на 1 город вместо 1000, получаются теже самые города +1
Вот тут что то не то с $offset
$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";
#9
3 февраля 2019 в 08:41
Неужели нет знатаков в прекрасное воскресное утро?)
$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";
#11
4 февраля 2019 в 06:43
kirkr, спасибо за ответ и комментарии в коде, примерно так и понятно, на кануне после размышлений сделал так:
Все регионы с ИД спарсились как нужно и получил 1,7млн+ вместо 2,2+ (уже прогресс)
Но вылезла другая проблема, судя по готовой базе 2013 года, у городов федерального значения ИД региона 0, это города вроде Москвы или Торонто и их районов, типа Внуково или Пулково в Питере, таких городов и частей больше 350 тысяч и у всех ИД региона 0 (в текстовом поле area хотя там что то вроде "город Москва")) .
В коде выше они не спарсились вообще, поэтому 1,7 а не 2,2, но основная проблема даже не в этом, что делать с регионом 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 = 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, логично что он никуда не попадает и найти его в инстанте нельзя при выборе города, вот тут надо понять как быть???
#12
4 февраля 2019 в 07:04
Александр,
выведите $count а потом уже рассуждать. Он скажет сколько городов отдает скрипт Вам!
Далее уже смотрите логику скрипта.
выведите $count а потом уже рассуждать. Он скажет сколько городов отдает скрипт Вам!
Далее уже смотрите логику скрипта.
#13
4 февраля 2019 в 07:49
kirkr, я пишу фактически от того что получаю в базу
#14
4 февраля 2019 в 11:17
Александр,
ну смотрите
foreach ($regions as $key => $region)
это переборка массива.
Далее ставите ограничение сами же:
if ($cities = Vk::getCities($region, 0))
т.е. для всех городов условие юзаете. А только потом уже заносите в базу. И если в этом условие не только 0 значение есть, а для это надо проверить дамп массива, то Вы сами режете список городов.
ну смотрите
foreach ($regions as $key => $region)
это переборка массива.
Далее ставите ограничение сами же:
if ($cities = Vk::getCities($region, 0))
т.е. для всех городов условие юзаете. А только потом уже заносите в базу. И если в этом условие не только 0 значение есть, а для это надо проверить дамп массива, то Вы сами режете список городов.
#15
4 февраля 2019 в 13:05
kirkr, с этим спасибо, помогли, ок.
Вопрос в том что получилось у меня 350 к городов с регионом 0, как с ними быть?
Иерархия в инстанте не позволяет выбирать город без региона, а назначить "вручную" регионы для такого количества городов нереально, вот тут надо какое то изящное решение.
Вопрос в том что получилось у меня 350 к городов с регионом 0, как с ними быть?
Иерархия в инстанте не позволяет выбирать город без региона, а назначить "вручную" регионы для такого количества городов нереально, вот тут надо какое то изящное решение.