• Как сделать post запрос?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Половина хедеров просто не нужна

    Открываем браузер, находим этот запрос. Открываем его нагрузку, жмем "view source", копируем - вставляем в код. Заменяем JS null на питоновский None. Отправляем как JSON. Обычная копипаста, даже править ничего не нужно (кроме null)

    import requests
    
    headers = {
        'x-uid': '61fbadfb8616a'
    }
    
    data = {
      "operationName": "catalogProductsBoard",
      "variables":
      {
        "sort": "DEFAULT",
        "attributes": [
        {
          "slug": "categories",
          "value": [""],
          "from": None,
          "to": None
        }],
        "datePublished": None,
        "location":
        {
          "latitude": None,
          "longitude": None,
          "city": "576d0612d53f3d80945f8b5d",
          "distanceMax": None
        },
        "search": "",
        "cursor": "{\"page\":1,\"totalProductsCount\":60,\"totalPremiumProductsCount\":4,\"dateUpdatedTo\":1651722922}"
      },
      "extensions":
      {
        "persistedQuery":
        {
          "version": 1,
          "sha256Hash": "bf7a22ef077a537ba99d2fb892ccc0da895c8454ed70358c0c7a18f67c84517f"
        }
      }
    }
    
    response = requests.post("https://api-gw.youla.io/federation/graphql", json=data, headers=headers).json()
    print(response)
    Ответ написан
    4 комментария
  • Как сделать счетчик страниц в парсере?

    iggor-markin
    @iggor-markin
    Python Developer
    Что, если так попробовать:
    STATUS_OK = 200
    url = 'https://www.avito.ru/moskva/avtomobili?p={page}&radius=100'
    page = 1
    status = 200
    
    while status == STATUS_OK:
        response = requests.get(url.format(page=page))
        if response.status_code == STATUS_OK:
            page += 1
            print("Working...")
        else:
            status = response.status_code
            print("Всего страниц: ", page)
    Ответ написан
    1 комментарий
  • Не могу изменить сообщение Telebot Python. Что не так я делаю?

    @twistfire92
    Python backend developer
    у вас два одинаковых обработчика кнопок, которые обрабатывают одинаковые запросы.
    @bot.callback_query_handler(func=lambda call: True)

    При нажатии на кнопку идет поиск соответствующего обработчика сверху вниз. натыкается на первый и во второй вообще никогда не заходит.

    либо обработку кнопок делать в одном хэндлере

    @bot.callback_query_handler(func=lambda call: True)
    def choice_course(call):
        if call.data == 'usd':
                bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=f"На {date_and_time}\n\nКурс {usd_name}: {usd}")
        else:
            today = datetime.datetime.now()
            date_and_time = (today.strftime('%Y-%m-%d %H:%M:%S'))
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Выберите валюту", reply_markup=kd.choice_cource)
            usd  = data['Valute']['USD']['Value']
            usd_name = data['Valute']['USD']['Name']


    Либо в самих хэндлерах описывать правильную функцию
    @bot.callback_query_handler(func=lambda call: call.data=='usd')
    def course(call):
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=f"На {date_and_time}\n\nКурс {usd_name}: {usd}")


    Но в таком случае этот хэндлер нужно поставить выше по коду чем предыдущий.
    Ответ написан
    Комментировать