Съдържание:

Остъргване на данни с ESP8266/ESP32: 7 стъпки
Остъргване на данни с ESP8266/ESP32: 7 стъпки

Видео: Остъргване на данни с ESP8266/ESP32: 7 стъпки

Видео: Остъргване на данни с ESP8266/ESP32: 7 стъпки
Видео: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, Ноември
Anonim
Остъргване на данни с ESP8266/ESP32
Остъргване на данни с ESP8266/ESP32
Остъргване на данни с ESP8266/ESP32
Остъргване на данни с ESP8266/ESP32

Искали ли сте някога да получите данни за вашите проекти на Arduino, но няма публичен API за това? Или в случаи като приложния програмен интерфейс (API) на Instagram, когато процесът на настройка за него не е много удобен?

В тази инструкция ще разгледаме 2 различни опции за извличане на данни от уебсайт за вашите проекти ESP8266 или ESP32.

Стъпка 1: Вижте видеото

Image
Image

Направих видеоклип, който обхваща същото като тази инструкция, така че ако се интересувате, моля, проверете го!

Стъпка 2: Преди да започнем

Преди да започнем
Преди да започнем
Преди да започнем
Преди да започнем

Само едно мнение, че данните, за които ще говоря, са публично достъпни данни и не изискват никакво удостоверяване. Така че, например, моят точен брой абонати в YouTube е достъпен само за мен в студио за създатели, така че устройството ще трябва да направи заявка, удостоверена като мен, за да го заредя. Този тип заявки ще бъдат извън обхвата на този видеоклип. Бърз тест, за да проверите дали ще бъде обхванат, е да се опитате да заредите страницата в инкогнито прозорец, тъй като това няма да ви влезе автоматично в сайтове.

За техниките, обхванати в тази инструкция, ще трябва да използваме някои от инструментите за разработчици, които са налични в браузърите. Ще ги демонстрирам с Firefox, но със сигурност знам, че Chrome има подобни инструменти и съм сигурен, че ги имат и други браузъри.

Стъпка 3: Непублични API (Spoiler: Instructables Has One!)

Първият начин, по който ще разгледаме, е използването на непубличен API. Това не винаги ще бъде достъпно, но ако това е определено, това е методът, който трябва да се стремите да използвате. Това, което наричам „непубличен API“, е основно мястото, където един сайт използва неадекламиран API на своя уебсайт зад кулисите, за да извлече данните, които искаме да получим.

Има няколко причини, поради които това би било предпочитаният вариант за използване.

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

Първо трябва да разберем дали уеб страницата използва такава настройка. Най-голямата улика е, ако сайтът актуализира стойността в реално време, както прави в Kickstarter, но дори и да не го има, все още има надежда, че може да използва тази настройка. Instructables използва непубличен API за извличане на някои данни за своя сайт, въпреки че не се опреснява в реално време.

За да проверите дали сайтът използва тази настройка, влезте в режима за разработчици на браузъра си, намирам най -лесния начин да направите това, като щракнете с десния бутон върху страницата и изберете „инспектиране на елемент“.

След това ще искате да отидете в раздела мрежа, това ще покаже заявките, които уеб страницата отправя във фонов режим, имайте предвид, че може да се наложи да презаредите страницата, след като отворите този раздел, защото оттук нататък ще се показват само заявки, направени.

Обикновено искате да търсите тези с тип „json“. Тук може да има много заявки, така че може да помогне за сортиране по тип. Можете да видите, че е много очевидно на страницата на кампанията на kickstarter, че използва тази настройка, тъй като можете да видите постоянни заявки, отправяни до крайна точка „stats.json“. На страницата с автори на Instructables (например моята е „https://www.instructables.com/member/witnessmenow/“), те не отправят постоянни заявки, но можете да видите скрита сред останалите заявка за „showAuthorStats“крайна точка.

За да научите повече информация за тази заявка, можете да кликнете върху нея. Трябва да можете да получите цялата информация, от която се нуждаете, за да повторите заявката. Но преди да направите това, първо трябва да проверите двойно дали има данните, които искате. Щракнете върху раздела за отговор и вижте дали данните са там.

Ако съдържа необходимите ви данни, всичко е готово! След това можете да използвате същите подходи, обсъдени в предишния ми видеоклип за свързване с API. Кратката версия на това е да се уверите, че заявката работи според очакванията първо на инструмент като Postman и след това използвайте този примерен проект, за да тествате дали работи на вашето устройство.

За анализиране на JSON данните бих препоръчал да използвате ArudinoJSON в повечето сценарии, ако това е нещо, за което бихте искали инструкции, просто ме уведомете!

Стъпка 4: Извличане на данни директно

Извличане на данни директно
Извличане на данни директно
Извличане на данни директно
Извличане на данни директно
Извличане на данни директно
Извличане на данни директно

След това ще разгледаме извличането на данните директно от уеб страницата, това е искане на пълната уеб страница на устройството и анализиране на данните, които искаме да извадим. Вече споменах предимствата на непубличния API пред този метод, но понякога трябва!

Едно нещо, което е важно да се отбележи тук, ако сте запознати с уеб разработката, може да сте свикнали да използвате функцията за инспектиране на елементи, за да разберете информация за конкретен елемент и как той е структуриран. Това трябва да се избягва при този подход, тъй като съвременните уеб страници обикновено се променят динамично с помощта на Javascript, което няма да се случи на вашето устройство. HTML кодът, който е наличен на вашето устройство, ще бъде само оригиналната уеб страница, която се изтегля. Добър пример за това е страницата TeamTrees, текущият брой на даренията започва като 0 и се зарежда в страницата по -късно с тази анимация, но за разлика от двата примера, които видяхме преди, тя не зарежда данните във фонов режим, така че правилните данни трябва да са някъде другаде.

За да видите оригиналния код на уеб страница, можете да щракнете с десния бутон върху страницата и да изберете „Преглед на източника“. След това искате да потърсите конкретните данни, които искате, така че в примера на TeamTrees, когато търсим текущия брой дарения, можем да видим, че действителният брой се съхранява в свойството count-count на елемента count, тук трябва да изстържете данните от.

Трябва да намерите низ за търсене, който да ви отведе до вашите данни. Много по -лесно е да разберете това, преди да кодирате за устройството. За този пример търсенето на „броя на данните \“”ме води точно до данните, които искаме, което е перфектно. Не е нужно да се притесняваме, че той съвпада и на други места в страницата, защото първо ще удари първото. Ако все пак трябваше да удариш третия, можеш просто да го програмираш, за да игнорираш първите 2, които удариш.

Ако разгледаме примера на TeamTrees, както преди, прескочихме заглавията на отговорите и сега разглеждаме тялото на отговора (което е уеб страницата). Това, което се връща от клиента, е поток от данни. Ние не се интересуваме от нищо до нашата заявка за търсене, затова правим client.find. Ако все пак намери заявката за търсене, тя ще върне true и ще премести потока в края на заявката. Следващото нещо, което е достъпно от потока, ще бъдат данните, които търсим, но в този случай не сме сигурни колко дълго ще бъдат данните, но знаем, че това е цялата информация между текущото ни място в потока и следващата обърната запетая. Можем да постигнем това, като използваме „client.readBytesUntil“, който прави това, което казва, чете байтовете в буфер, докато достигне определената заявка. Просто се уверете, че буферът, в който четете, е достатъчно голям, за да съхранява всички данни, мисля, че сме доста сигурни тук с 32!

Ако имате всички необходими данни, няма нужда да четете повече данни. Не затворих връзката тук, защото изглежда не създаваше проблем на ESP8266, изглеждаше, че причинява проблеми с ESP32, затова добавих client.stop (). За да бъда напълно честен, не съм сигурен защо го поставих в горната част на метода, мисля, че би имало по -смисъл да го затворите, след като имате данните, които искате.

Стъпка 5: Изтриване на данни с помощта на външен сървър:

Остъргване на данни с помощта на външен сървър
Остъргване на данни с помощта на външен сървър
Остъргване на данни с помощта на външен сървър
Остъргване на данни с помощта на външен сървър

Само още една тема за докосване, има много по -добри инструменти за анализиране на обикновени компютърни среди като NodeJS, отколкото на микроконтролер, така че понякога може да има смисъл да се направи услуга, която извлича данните от уеб страница и осигурява по -опростена крайна точка за вашия ESP8266 или ESP32. Един пример за това беше изстъргването на страницата CrowdSupply, за да се преброи на живо колко TinyPICO са продадени. Може да е било възможно да се постигне това директно на ESP8266 или ESP32, но тъй като той анализира множество различни точки от данни на няколко различни елемента, това би било сложно.

В крайна сметка създадох проект на NodeJS и анализирах данните, използвайки библиотека, наречена cheerio, и се получи много добре. Хоствах този проект на облачен сървър, който вече имах, но можете да стартирате този вид проект на пи, ако нямате нещо подобно.

Стъпка 6: Ограничения за използване

Ограничения за използване
Ограничения за използване

Едно нещо, което потенциално би могло да повлияе на всички тези подходи, е удрянето на ограниченията за използване на сайтове. В обикновените API обикновено е доста добре документирано колко искания можете да отправите на минута или на ден и можете да ограничите заявките си за проекти въз основа на това. Когато стържете, не знаете какви са тези граници, така че рискувате да ги ударите и потенциално да бъдете блокирани. Не мога да дам точен съвет относно ограничаването му, така че да останете в добрите им книги, но бих си помислил, че всичко под всяка минута би било твърде често, освен може би случаи като kickstarter, където те сякаш сами отправят искания на всеки няколко секунди.

Стъпка 7: Благодаря за четенето

Надяваме се, че този видеоклип е помогнал, ако се интересувате от анализиране на данни директно от уеб страници на вашия ESP8266 или ESP32. Имате ли други въпроси по темата, които не разгледах? Моля, уведомете ме в коментарите по -долу или се присъединете към мен и куп други производители на моя сървър Discord, където можем да обсъдим тази тема или всяка друга, свързана с производителя, която имате, хората са наистина полезни там, така че това е чудесно място за окачване навън

Бих искал също да изразя огромна благодарност към моите спонсори от Github, които помагат да подкрепят това, което правя, наистина го оценявам. Ако не знаете, Github съвпадат със спонсорството за първата година, така че ако направите спонсорство, те ще го сравнят на 100% през следващите няколко месеца.

Благодаря за четенето!

Препоръчано: