Как получать города из СДЭК и подставлять в select?
У СДЭК API есть метод, который возвращает все города из их базы. Но проблема в том, что они как-то очень криво берутся.
Ибо там есть всякие деревни и поселки, но нет крупных городов (даже таких как Москва, СПБ, Волгоград и тд), это очень странно.
Я подумал сначала брать города другим методом, не из API СДЭК, однако позже обнаружил, что для работы с другими методами, например создания заказа, требуется id города в их базе, то есть мне наверняка придется брать оттуда.
Вопрос как это делать, если их апи отдает города таким неподходящим образом?
Возможно у них какой то другой метод (я использовал пункт 4.13 из их документации (Список городов)) Или возможно брать города из другого сервиса и как то подставлять их?
response = requests.get('http://integration.cdek.ru/v1/location/cities/json?countryId=RU').json()
cities = [city_data['cityName'] for city_data in response]
print(cities) # здесь поселки и тд, без крупных городов
Ответы (2 шт):
Идентификатор города в базе СДЭКа умеет отдавать сервис dadata - https://dadata.ru/api/delivery/
Возможно помогу кому то этим. Искал способы получения информации о пунктах сдек по АПИ без лога. В результате
- библиотека fs-cdek-api - по логу
- pycdek и pycdek3 - не работают без лога, ошибка аля (метода не существует), лезть в исходники и тратить время не стал
- официальное API CDEK по post/get запросам. V2 - требует лог пароль даже для получения пунктов
Что и итоге сработало без лога.
Запрос по v1 как в описании, но, либо параметры на время написания этого вопроса автором были другие, либо он подставлял не верный параметр. Подробно смотрите на оф. документации про параметры.

В моем случае хватило запроса http://integration.cdek.ru/pvzlist/v1/xml?citypostcode=603000
Если задача такая же как у автора темы, "найти города", то в инструкции на то так же есть запрос. По поводу получения всех городов РФ, достаточно указать запрос
http://integration.cdek.ru/v1/location/cities/json?countryCode=RU