Для нетерпеливых вот ссылка на исходный код этого проекта Уведомить меня. Попробуйте и дайте мне знать, как это работает.

- Сначала я опубликовал эту историю на https://raju.guide, в моем личном блоге!

Потребность в проекте выходного дня

Instacart — это уникальная платформа, где можно заказать продукты сразу из нескольких местных магазинов. Позже покупатели Instacart посещают эти магазины лично, чтобы сделать все покупки, как указано в заказе, и доставить их на дом в течение часа или около того! Для конечных пользователей это действительно полезная услуга в текущей ситуации (благодаря COVID-19), когда мы все вынуждены оставаться дома! Из-за этого сайт в настоящее время испытывает огромный спрос, и становится почти трудно размещать заказы, поскольку покупатели Instacart продолжают работать над своим отставанием.

Поскольку мы находимся в отпуске Corona, также известном как домашний арест, мы стараемся использовать онлайн-сервисы как можно больше, чтобы удовлетворить наши основные потребности. Многие местные магазины до сих пор не предлагают онлайн-покупки, что делает использование Instacart необходимостью. Но каждый раз, когда я пытался разместить заказ через их веб-сайт, чтобы получить товары из таких магазинов, как Costco, Safeway или CVS, я получал следующее сообщение. Меня это очень рассердило, и я хотел узнать, могу ли я что-нибудь сделать, чтобы узнать, как только в Instacart станут известны сроки доставки, чтобы я мог отправить свой заказ!

Поэтому я записал, что мне нужно сделать, чтобы я мог расслабиться и перейти к экрану только тогда, когда мне нужно разместить заказ в соответствии с предупреждением от моего бота. С тех пор я успешно создал небольшой скрипт, который оповещает меня (по электронной почте или текстовым сообщениям) всякий раз, когда у Instacart есть определенные временные окна, доступные для отправки заказа. И да, наконец, мне удалось разместить заказ на Instacart, чтобы получить продукты от Costco и Foodmaxx. Ниже вы узнаете, как я придумал решение и как вы можете использовать его для своих нужд.

Instacart, Firefox и Postman

Сначала я решил выяснить, какие API Instacart используются для информирования пользователя о доступных сроках доставки или нет. Ранее мой друг из Нэшвилла упомянул мне, что они могут сразу размещать заказы с этого сайта. Поэтому для начала я установил для своего адреса доставки почтовый индекс 37067 (Франклин, Нэшвилл, Теннесси). Это позволило мне увидеть доступное время для Costco.

Инструменты разработчика Firefox помогли мне сузить выбор до двух вызовов API, которые кажутся полезными для моих нужд.

Затем я переключился на Postman, чтобы понять, что представляют собой различные входные/выходные данные, предоставляемые этими API.

Исходя из этого, я решил использовать Instacart Retailer Delivery Information API для своего дела, так как он не только указывает, доступно ли время доставки для данного магазина или нет, но также предоставляет точную информацию о дне для каждого окна (если доступно), которое я может захотеть использовать в будущей версии этого бота!

Почтальон — мой путеводитель по доставке

Прежде чем мы углубимся дальше, один вопрос, который должен прийти на ум, заключается в том, как, черт возьми, я могу успешно запустить этот API в приложении Postman. Правильно? Кстати, если вы не знаете Postman, это швейцарский армейский нож, который должен быть у каждого разработчика. Это помогает понять API с близкого расстояния, когда у вас нет соответствующей документации!

Первоначально я пытался использовать свои учетные данные Instacart с BASIC AUTH в Postman, но столкнулся с сообщением 401 (ошибка несанкционированного доступа). Я смог найти информацию об идентификаторе сеанса в Firefox, но настройка этой информации в заголовке запроса также не помогла. И тогда я увидел ссылку Cookies в Postman, как вы можете видеть на изображении Retailer Info API. Раздел Управление файлами cookie в Postman позволяет загружать файлы cookie из вашего браузера с помощью расширения Postman Chrome Inspector (доступно только в Chrome). Благодаря этому я могу получить доступ к вышеуказанным API через Postman, альт! Мы на пути к чему-то великому 🙂

При более внимательном рассмотрении выходных данных Retailer Info API в формате JSON я увидел полезную информацию, связанную с доставкой, в разделе modules этих выходных данных. 1-й словарь из этого раздела сообщает браузеру, доступны ли сроки доставки или нет. Если типы установлены как «icon_info», то да, окна доставки доступны для конечного пользователя, чтобы отправить заказ для этого магазина. И если в качестве значения указано «ошибка», это означает, что покупатели Instacart сейчас очень заняты, и нам следует повторить попытку позже. Кроме того, когда типы установлены как «icon_info», второй словарь в этом разделе предоставляет всю информацию о доступности разных временных интервалов.

Основная информация для реализации в нашем боте

Почтальон — Курьер снова приходит на помощь

И со всей этой информацией я был уверен, что смогу начать писать скрипт Python с модулем Requests для получения соответствующих деталей и отображения/отправки по электронной почте/текстового сообщения по мере необходимости. Но позже я не мог понять, как использовать эти файлы cookie с моим любимым модулем «Запросы». Опять застрял, но ненадолго!

Еще один взгляд на Почтальона показал мне ссылку Код, которая все это время смотрела прямо на меня. Эврика! Почтальон уже сгенерировал для меня необходимый код. В следующий момент я запустил фрагмент кода из раздела Python — Запросы в своем блокноте Jupyter. Но, к моему отчаянию, и это не сработало 🙁

Я решил попробовать фрагмент кода cURL из командной строки, и он сработал, как и ожидалось. Это был хороший знак, и я увидел свет в конце туннеля! Я смог обнаружить еще один фрагмент кода Python с помощью модуля http.client. И этот код оправдал мои ожидания, и я впервые смог увидеть API в реальном действии на основе заданных команд!

Идеальная настройка с использованием Mailgun, Twilio и Cronjob

Теперь, когда в моем распоряжении был базовый рабочий код, я хотел добавить все навороты, которые действительно могут помочь мне получать уведомления, не привязывая меня все время к компьютеру.

Первое, что я сделал, это зарегистрировался в Mailgun и Twilio, чтобы позволить мне отправлять электронные письма / тексты через мою программу. Поскольку я никогда раньше не пользовался обоими этими сервисами, я немного скептически отнесся к быстрому результату. Настройка Mailgun была очень простой и понятной. Через несколько минут я смог отправлять электронные письма через программу. (Бесплатная версия позволяет отправлять до 5000 писем в месяц, что более чем достаточно для моих нужд). В случае с Twilio мне пришлось немного поиграться, чтобы понять, как заставить его работать. Пара проблем, которые мне нужно найти, это:

  • Ошибка — Номер телефона, который вы используете для отправки сообщения, не активирован Мне нужно использовать номер телефона, предоставленный Twilio, вместо моего собственного!
  • Добавление символа новой строки в содержимое сообщения
  • Как обойти добавленное сообщение «Отправлено из пробной учетной записи Twilio —»

И с этим я начал спамить себя всеми текстовыми сообщениями, которые мне никто не присылал раньше! Затем я интегрировал обе эти службы в свою основную программу. Также я усовершенствовал скрипт для обработки ошибок, чтения различных учетных данных через точечные файлы, а также убедился, что этот скрипт можно использовать с различными магазинами, доступными в Instacart, и пользователь может изменить список магазинов через конфигурацию.

Когда все это работало вместе, я настроил работу cron и пошел спать. В 2 часа ночи я получил текст и электронное письмо, в котором упоминалось, что у Costco и Total Wine and More есть окна доставки, доступные для отправки моих заказов. Поскольку я уже положила все в корзину, я сразу же смогла отправить свой заказ! Ура!!! Теперь я могу продолжать оставаться дома и ждать, пока Instacart Shopper (спасибо, приятель!) доставит еду прямо к нашему порогу.

С тех пор я внес больше изменений, чтобы скрипт стал более универсальным и доступным для всех с минимальными усилиями по настройке. Вот ссылка на проект Уведомить меня на Github. Попробуйте и дайте мне знать, если это будет полезно для вас. Спасибо, что остаетесь со мной до сих пор.

использованная литература