Как получить mg_geo_id для Рязани на magnit.ru

    При парсинге данных с сайта magnit.ru/promo вы можете столкнуться с проблемой неверного определения города. Например, значение mg_geo_id=1761 соответствует Краснодару, а не Рязани. Чтобы получить корректный идентификатор для нужного населённого пункта, необходимо выполнить несколько шагов. В этой статье мы разберём, как найти правильный city_code для Рязани и других городов.

    Почему возникает ошибка с mg_geo_id

    Сайт Магнит определяет геолокацию пользователя по IP-адресу, но при использовании прокси или VPN значение в cookies может остаться от предыдущего сеанса. В результате идентификатор города (mg_geo_id) не соответствует реальному местоположению. Для корректного парсинга необходимо принудительно установить нужный код.

    Методы получения корректного city_code для Рязани

    1. Использование инструментов разработчика браузера

    Откройте сайт magnit.ru/promo в браузере, включите режим разработчика (F12) и перейдите на вкладку Network. Выберите фильтр XHR/Fetch и обновите страницу. Найдите запрос к API, содержащий параметр city_code или mg_geo_id. Для Рязани значение будет отличаться от 1761.

    2. Анализ cookies после ручного выбора города

    На главной странице magnit.ru вручную выберите город Рязань через виджет выбора региона. После этого откройте ApplicationCookies в инструментах разработчика. Найдите ключ mg_geo_id - его значение и будет нужным идентификатором для Рязани. Обычно это число от 1000 до 2000.

    3. Использование сниффера трафика

    Запустите сниффер (например, Wireshark или Fiddler), выберите город Рязань на сайте и перехватите HTTP-запросы к API. В теле запроса или в cookies вы увидите актуальный city_code. Этот метод подходит для продвинутых пользователей.

    Пример кода для установки mg_geo_id в Python

    После получения корректного идентификатора для Рязани (например, 1234) вы можете использовать его в своём боте. Пример для библиотеки aiogram:

    @dp.message_handler(Text(equals='Ryazan'))
    async def ryazan_city(message: types.Message):
        await message.answer('Please waiting...')
        chat_id = message.chat.id
        await send_data(city_code='1234', chat_id=chat_id)

    Замените city_code='1234' на реальное значение, полученное одним из описанных методов.

    Альтернативный способ: поиск через публичные API

    Некоторые разработчики публикуют списки соответствий городов и mg_geo_id на форумах или в GitHub-репозиториях. Вы можете найти готовую базу данных, но учитывайте, что она может устареть. Рекомендуется всегда проверять актуальность через браузер.

    Проверка корректности данных

    После установки нового city_code выполните тестовый запрос к magnit.ru/promo. Если в ответе приходят акции по Рязани - идентификатор верный. Если данные соответствуют другому городу, повторите процедуру поиска.

    Помните, что сайт может менять систему идентификации, поэтому периодически проверяйте актуальность mg_geo_id для вашего города.

    Часто задаваемые вопросы