Оглавление:

Сбор данных с помощью ESP8266 / ESP32: 7 шагов
Сбор данных с помощью ESP8266 / ESP32: 7 шагов

Видео: Сбор данных с помощью ESP8266 / ESP32: 7 шагов

Видео: Сбор данных с помощью ESP8266 / ESP32: 7 шагов
Видео: Доступ к ESP8266, ESP32 из интернета. Управление из любой точки мира. ВсегДа ли возможно.. 2024, Июль
Anonim
Сбор данных с помощью ESP8266 / ESP32
Сбор данных с помощью ESP8266 / ESP32
Сбор данных с помощью ESP8266 / ESP32
Сбор данных с помощью ESP8266 / ESP32

Вы когда-нибудь хотели получить данные для своих проектов Arduino, но для этого нет общедоступного API? Или в таких случаях, как Instagram API, когда процесс настройки не очень удобен?

В этом руководстве мы рассмотрим 2 различных варианта сбора данных с веб-сайта для ваших проектов ESP8266 или ESP32.

Шаг 1. Посмотрите видео

Image
Image

Я сделал видео, в котором рассказывается о том же, что и в этом руководстве, поэтому, если вам интересно, посмотрите его!

Шаг 2: Прежде чем мы начнем

Перед тем, как мы начнем
Перед тем, как мы начнем
Перед тем, как мы начнем
Перед тем, как мы начнем

Просто предупреждаем, что данные, о которых я буду говорить, являются общедоступными и не требуют аутентификации. Скажем, например, мое точное количество подписчиков на YouTube доступно только мне в творческой студии, поэтому устройство должно будет сделать запрос, который аутентифицирован как я, чтобы загрузить его. Запросы такого типа выходят за рамки этого видео. Быстрый тест, чтобы проверить, охватывается ли это, - это попытаться загрузить страницу в окне в режиме инкогнито, так как это не приведет к автоматическому входу на какие-либо сайты.

Для методов, описанных в этом Руководстве, нам придется использовать некоторые инструменты разработчика, доступные в браузерах. Я буду демонстрировать их в Firefox, но я точно знаю, что в Chrome есть аналогичные инструменты, и я уверен, что они есть и в других браузерах.

Шаг 3. Непубличные API (спойлер: у Instructables есть один!)

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

Есть несколько причин, по которым этот вариант предпочтительнее использовать.

  1. Самым большим преимуществом является то, что он вряд ли будет меняться так же часто, как веб-страница. Если вы очищаете данные непосредственно с HTML веб-страницы, каждый раз, когда они вносят изменения в сайт, ваш синтаксический анализ может сломаться.
  2. Обычно это более эффективно для данных. Когда вы очищаете веб-страницу, вы в основном загружаете всю HTML-страницу, чтобы извлечь из нее фрагменты информации, API-интерфейсы будут возвращать только точки данных, поэтому обычно будут гораздо меньшие запросы.
  3. Обычно это проще разбирать. Обычно API-интерфейсы возвращают данные в формате JSON, который легко анализировать, это особенно верно, если вы извлекаете несколько фрагментов данных.

Сначала нам нужно выяснить, использует ли веб-страница такую настройку. Самая большая подсказка заключается в том, что сайт обновляет значение в режиме реального времени, как это происходит на Kickstarter, но даже если этого не происходит, остается надежда, что он может использовать эту настройку. Instructables использует непубличный API для получения некоторых данных для своего сайта, даже если он не обновляется в реальном времени.

Чтобы проверить, использует ли сайт эту настройку, войдите в режим разработчика вашего браузера. Я считаю, что самый простой способ сделать это - щелкнуть правой кнопкой мыши по странице и выбрать «Проверить элемент».

Затем вы захотите перейти на вкладку сети, она отобразит запросы, которые веб-страница делает в фоновом режиме, обратите внимание, что вам может потребоваться перезагрузить страницу после открытия этой вкладки, потому что она будет отображать только запросы, сделанные с этого момента.

Обычно вы хотите искать те, которые имеют тип «json». Здесь может быть много запросов, поэтому может помочь сортировка по типу. На странице кампании кикстартера вы можете увидеть, что он использует эту настройку, поскольку вы можете видеть, что к конечной точке stats.json постоянно поступают запросы. На странице авторов Instructables (например, моя - «https://www.instructables.com/member/witnessmenow/») они не делают постоянных запросов, но вы можете увидеть скрытый среди других запрос к конечной точке «showAuthorStats».

Чтобы узнать больше об этом запросе, вы можете щелкнуть по нему. Отсюда вы сможете получить всю необходимую информацию для репликации запроса. Но прежде чем вы это сделаете, вам нужно сначала дважды проверить, есть ли в нем нужные вам данные. Щелкните вкладку ответа и посмотрите, есть ли там данные.

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

Для анализа данных JSON я бы рекомендовал использовать ArudinoJSON в большинстве сценариев, если это то, о чем вы хотели бы получить инструкции, просто дайте мне знать!

Шаг 4: сбор данных напрямую

Сбор данных напрямую
Сбор данных напрямую
Сбор данных напрямую
Сбор данных напрямую
Сбор данных напрямую
Сбор данных напрямую

Далее мы рассмотрим очистку данных непосредственно с веб-страницы, это запрос полной веб-страницы на устройстве и анализ данных, которые мы хотим получить. Я уже упоминал о преимуществах непубличного API по сравнению с этим методом, но иногда это необходимо!

Здесь важно отметить одну вещь: если вы знакомы с веб-разработкой, вы, возможно, привыкли использовать функцию проверки элемента, чтобы узнать информацию о конкретном элементе и о том, как он структурирован. При таком подходе этого следует избегать, поскольку современные веб-страницы обычно динамически изменяются с помощью Javascript, чего не происходит на вашем устройстве. HTML-код, доступный на вашем устройстве, будет только исходной загруженной веб-страницей. Хорошим примером этого является страница TeamTrees, текущий счетчик пожертвований начинается с 0 и загружается на страницу позже с этой анимацией, но в отличие от двух примеров, которые мы видели ранее, он не загружает данные в фоновом режиме, поэтому правильные данные должны быть где-то еще.

Чтобы просмотреть исходный код веб-страницы, щелкните страницу правой кнопкой мыши и выберите «Просмотреть исходный код». Затем вы хотите найти конкретные данные, которые вам нужны, поэтому в примере TeamTrees, когда мы ищем текущее количество пожертвований, мы можем видеть, что фактическое количество хранится в свойстве data-count элемента count, именно здесь нам нужно очистить данные из.

Вам нужно найти строку поиска, которая приведет вас к вашим данным. Гораздо проще выяснить это, прежде чем писать код для устройства. В этом примере поиск по запросу «data-count \» приводит меня прямо к нужным нам данным, что идеально. Нам не нужно беспокоиться о том, что он будет совпадать и в других местах страницы, потому что первым попадет в верхний. Если вам действительно нужно было ударить 3-й удар, вы можете просто запрограммировать его так, чтобы он игнорировал первые 2 удара.

Если мы посмотрим на пример TeamTrees, как и раньше, мы пропустили заголовки ответа и теперь смотрим на тело ответа (которое является веб-страницей). От клиента возвращается поток данных. Нас не интересует ничего, кроме нашего поискового запроса, поэтому мы делаем client.find. Если он найдет поисковый запрос, он вернет истину и переместит поток в конец запроса. Следующее, что будет доступно из потока, - это данные, которые мы ищем, но в этом случае мы не уверены, как долго они будут длиться, но мы знаем, что это вся информация между нашим текущим местом в потоке и следующей кавычкой.. Мы можем добиться этого, используя client.readBytesUntil, который делает то, что он говорит: он считывает байты в буфер до тех пор, пока не попадет в указанный запрос. Просто убедитесь, что буфер, в который вы читаете, достаточно большой, чтобы вместить все данные, я думаю, мы здесь в полной безопасности с 32!

Если у вас есть все необходимые данные, вам больше не нужно их читать. Я не закрывал соединение здесь, потому что это не вызывало проблем с ESP8266, оно действительно вызывало проблемы с ESP32, поэтому я добавил client.stop (). Честно говоря, я не уверен, почему я поставил его на первое место в методе, я бы подумал, что было бы разумнее закрыть его, когда у вас есть нужные данные.

Шаг 5: парсинг данных с помощью внешнего сервера:

Сбор данных с помощью внешнего сервера
Сбор данных с помощью внешнего сервера
Сбор данных с помощью внешнего сервера
Сбор данных с помощью внешнего сервера

Еще одна тема, которую стоит затронуть, есть гораздо лучшие инструменты для анализа в обычных компьютерных средах, таких как NodeJS, чем на микроконтроллере, поэтому иногда имеет смысл создать службу, которая извлекает данные с веб-страницы и обеспечивает более простой конечная точка для вашего ESP8266 или ESP32. Одним из примеров этого было сканирование страницы CrowdSupply, чтобы в реальном времени подсчитать, сколько TinyPICO было продано. Возможно, это было возможно достичь непосредственно на ESP8266 или ESP32, но, поскольку он анализировал несколько разных точек данных на нескольких разных элементах, это было бы сложно.

В итоге я создал проект NodeJS и проанализировал данные с помощью библиотеки под названием cheerio, и это сработало очень хорошо. Я разместил этот проект на облачном сервере, который у меня уже был, но вы могли бы запустить такой проект на пи, если бы у вас не было чего-то подобного.

Шаг 6: пределы использования

Пределы использования
Пределы использования

Одна вещь, которая потенциально может повлиять на все эти подходы, - это ограничение использования сайтов. В обычных API обычно довольно хорошо документировано, сколько запросов вы можете делать в минуту или в день, и вы можете ограничить запросы своих проектов на основе этого. Когда вы соскабливаете, вы не знаете, каковы эти ограничения, поэтому вы рискуете выйти за них и потенциально оказаться заблокированным. Я не могу дать точных советов по его ограничению, чтобы вы оставались в их хороших книгах, но я думаю, что все, что меньше каждой минуты, было бы слишком часто, кроме, возможно, таких случаев, как кикстартер, когда они, кажется, сами отправляют запросы каждые несколько секунд.

Шаг 7. Спасибо за внимание

Надеюсь, это видео помогло, если вы заинтересованы в анализе данных прямо с веб-страниц на вашем ESP8266 или ESP32. У вас есть еще вопросы по теме, которые я не затронул? Пожалуйста, дайте мне знать в комментариях ниже или присоединитесь ко мне и к группе других производителей на моем сервере Discord, где мы можем обсудить эту тему или любого другого создателя, связанного с вашим, люди действительно полезны там, так что это отличное место, чтобы повесить из

Я также хотел бы поблагодарить моих спонсоров Github, которые помогают поддерживать то, что я делаю, я действительно ценю это. Если вы не знаете, Github подбирает спонсорство в течение первого года, поэтому, если вы сделаете спонсорство, они будут соответствовать ему на 100% в течение следующих нескольких месяцев.

Спасибо за прочтение!

Рекомендуемые: