Мазмұны:

ESP8266/ESP32 көмегімен деректерді жою: 7 қадам
ESP8266/ESP32 көмегімен деректерді жою: 7 қадам

Бейне: ESP8266/ESP32 көмегімен деректерді жою: 7 қадам

Бейне: ESP8266/ESP32 көмегімен деректерді жою: 7 қадам
Бейне: 12V Bluetooth Relay to control AC or DC load using mobile Phone 2024, Шілде
Anonim
ESP8266/ESP32 көмегімен деректерді жою
ESP8266/ESP32 көмегімен деректерді жою
ESP8266/ESP32 көмегімен деректерді жою
ESP8266/ESP32 көмегімен деректерді жою

Сіз Arduino жобалары туралы деректерді алғыңыз келді ме, бірақ бұл үшін жалпыға ортақ API жоқ па? Немесе Instagram API сияқты жағдайларда, орнату процесі өте ыңғайлы емес пе?

Бұл нұсқаулықта біз сіздің ESP8266 немесе ESP32 жобаларыңыз үшін веб -сайттан деректерді алудың 2 түрлі нұсқасын қарастырамыз.

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» түріндегідерді іздегіңіз келеді. Бұл жерде сұраныстар көп болуы мүмкін, сондықтан олардың түрлері бойынша сұрыптауға көмектесуі мүмкін. Kickstarter науқан бетінде бұл қондырманы қолданатыны анық көрінеді, өйткені сіз «stats.json» соңғы нүктесіне тұрақты сұраныстар енгізілгенін көре аласыз. Instructables авторларының бетінде (мысалы, менікі «https://www.instructables.com/member/witnessmenow/»), олар үнемі сұраныс жасамайды, бірақ сіз басқалардың арасында «showAuthorStats» соңғы нүктесіне сұраныс жасырылғанын көре аласыз.

Бұл сұрау туралы қосымша ақпарат алу үшін оны басуға болады. Сұранысты қайталау үшін сізге қажет барлық ақпаратты осы жерден алу керек. Бірақ мұны жасамас бұрын, сізде қажетті деректер бар екенін екі рет тексергіңіз келеді. Жауаптар қойындысын нұқыңыз және деректердің бар -жоғын біліңіз.

Егер ол сізге қажетті деректерді қамтыса, бәрі дайын! Содан кейін API -ге қосылу туралы менің алдыңғы бейнеде талқыланған әдістерді қолдануға болады. Оның қысқа нұсқасы - бұл сұрау алдымен Пошташы сияқты құралда күтілгендей жұмыс істейтініне көз жеткізу, содан кейін бұл мысалды сіздің құрылғыңызда жұмыс істейтінін тексеру үшін қолданыңыз.

JSON деректерін талдау үшін мен көптеген сценарийлерде ArudinoJSON қолдануды ұсынар едім, егер бұл сізге үйреткіңіз келетін нәрсе болса, маған хабарлаңыз!

4 -қадам: Деректерді тікелей жою

Деректерді тікелей жою
Деректерді тікелей жою
Деректерді тікелей жою
Деректерді тікелей жою
Деректерді тікелей жою
Деректерді тікелей жою

Содан кейін біз деректерді тікелей веб -беттен алып тастауды қарастырамыз, бұл құрылғыдағы толық веб -бетті сұрайды және біз қалаған деректерді талдайды. Мен бұқаралық емес API-дің бұл әдіске қатысты артықшылықтарын айттым, бірақ кейде қажет!

Бұл жерде атап өту керек бір нәрсе, егер сіз веб -әзірлеумен таныс болсаңыз, сіз белгілі бір элемент туралы және оның құрылымы туралы ақпаратты білу үшін inspect element мүмкіндігін қолдана аласыз. Бұл тәсіл үшін бұған жол бермеу керек, себебі қазіргі веб -беттер әдетте JavaScript көмегімен динамикалық түрде өзгертіледі, бұл сіздің құрылғыңызда болмайды. Құрылғыда қол жетімді HTML коды тек жүктелген түпнұсқа веб -бет болады. Бұған жақсы мысал - TeamTrees беті, ағымдағы қайырымдылық саны 0 -ден басталады және осы анимациямен кейінірек бетке жүктеледі, бірақ біз бұрын көрген екі мысалдан айырмашылығы, ол деректерді фонда жүктемейді, сондықтан дұрыс деректер басқа жерде болуы керек.

Түпнұсқалық веб -кодты қарау үшін бетті тінтуірдің оң жақ түймесімен нұқып, «Дереккөзді қарау» тармағын таңдауға болады. Содан кейін сіз өзіңіз қалаған нақты деректерді іздегіңіз келеді, сондықтан TeamTrees мысалында біз ағымдағы қайырымдылық санын іздегенде, біз нақты санаудың санау элементінің деректер санау қасиетінде сақталғанын көре аламыз, дәл осы жерде бізге қажет деректерді алып тастаңыз.

Деректеріңізге апаратын іздеу жолын табу керек, құрылғыны кодтамас бұрын оны анықтау оңайырақ. Бұл мысал үшін «деректерді санау» »іздеу мені қажетті деректерге жеткізеді, бұл өте жақсы. Ол беттің басқа жерлерінде де сәйкес келеді деп алаңдамаудың қажеті жоқ, себебі ол бірінші орынға шығады. Егер сізге 3 -ші соққы қажет болса, сіз оны соққан алғашқы 2 -ді елемеуге бағдарламалауға болады.

Егер біз TeamTrees мысалын қарастыратын болсақ, бұрынғыдай біз жауап тақырыптарын өткізіп жіберіп, енді жауаптың негізгі бөлігін қарастырамыз (бұл веб -бет). Клиенттен қайтатыны - бұл деректер ағыны. Біз іздеу сұранысына дейін ештеңеге мән бермейміз, сондықтан біз client.find жасаймыз. Егер ол іздеу сұрауын тапса, ол ақиқат болады және ол ағынды сұраудың соңына жылжытады. Ағыннан қол жетімді келесі нәрсе біз іздейтін деректер болады, бірақ бұл жағдайда біз деректердің қанша уақыт болатынына сенімді емеспіз, бірақ біз бұл ағымдағы ағымдағы орын мен келесі инверттелген үтір арасындағы барлық ақпарат екенін білеміз.. Біз бұған «client.readBytesUntil» көмегімен қол жеткізе аламыз, ол айтқандарын орындайды, ол байтты көрсетілген сұрауға жеткенше буферге оқиды. Сіз оқитын буфер барлық деректерді сақтай алатындай үлкен екеніне көз жеткізіңіз, менің ойымша, біз 32 -де осында қауіпсізбіз!

Егер сізде барлық қажетті деректер болса, сізге енді деректерді оқудың қажеті жоқ. Мен мұнда байланысты жаппадым, себебі бұл ESP8266 -де проблема туғызбаған сияқты, бұл ESP32 -де проблемалар туғызды, сондықтан мен client.stop () қостым. Шынымды айтсам, мен оны неге әдістің жоғарғы жағына қойғанымды білмеймін, қажет деректер болғаннан кейін оны жабудың мағынасы бар деп ойлаймын.

5 -қадам: Сыртқы сервер көмегімен деректерді жою:

Сыртқы сервер көмегімен деректерді жою
Сыртқы сервер көмегімен деректерді жою
Сыртқы сервер көмегімен деректерді жою
Сыртқы сервер көмегімен деректерді жою

Тағы бір тақырып, NodeJS сияқты қарапайым компьютерлік ортада микроконтроллерге қарағанда талдауға арналған әлдеқайда жақсы құралдар бар, сондықтан кейде деректерді веб -беттен алатын және қарапайым ұсынатын қызметті жасаудың мағынасы болуы мүмкін. ESP8266 немесе ESP32 үшін соңғы нүкте. Мұның бір мысалы, қанша TinyPICO сатылғанын тірі санау үшін CrowdSupply бетін сызып тастау болды. Мүмкін, оған тікелей ESP8266 немесе ESP32 арқылы қол жеткізуге болады, бірақ ол әр түрлі элементтер бойынша әр түрлі деректер нүктелерін талдайтындықтан, бұл қиын болар еді.

Мен NodeJS жобасын құруды аяқтадым және cheerio деп аталатын кітапхананың көмегімен деректерді талдадым және ол өте жақсы жұмыс істеді. Мен бұл жобаны бұрыннан бар бұлтты серверде орналастырдым, бірақ егер сізде мұндай қондырғы болмаса, сіз мұндай жобаны pi -де іске қоса аласыз.

6 -қадам: Қолдану шектеулері

Қолдану шектеулері
Қолдану шектеулері

Бұл тәсілдердің барлығына әсер етуі мүмкін бір нәрсе - сайттарды пайдалану шектеулеріне жету. Кәдімгі API -де әдетте минутына немесе тәулігіне қанша сұраныс жасауға болатындығы жақсы құжатталған және осының негізінде жобалық сұрауларды шектеуге болады. Сіз қырқып жатқанда, сіз бұл шектеулердің не екенін білмейсіз, сондықтан сіз оларды соғу қаупі бар және бұғатталуыңыз мүмкін. Мен оны шектеу туралы нақты кеңес бере алмаймын, сондықтан сіз олардың жақсы кітаптарында қаласыз, бірақ менің ойымша, әр минут сайын кез келген нәрсе тым жиі болады деп ойлаймын, тек бірнеше секунд сайын өздері сұрау салатын сияқты.

7 -қадам: Оқығаныңызға рахмет

Егер сіз ақпаратты ESP8266 немесе ESP32 веб -беттерінен тікелей талдағыңыз келсе, бұл бейне көмектесті деп үміттенемін. Мен қарамаған тақырып бойынша басқа сұрақтарыңыз бар ма? Маған төмендегі түсініктемелерде хабарлаңыз, немесе маған және менің Discord серверіндегі басқа да көптеген өндірушілерге қосылыңыз, онда біз осы тақырыпты немесе сізде бар кез келген басқа өндірушіні талқылай аламыз, адамдар бұл жерде өте пайдалы, сондықтан бұл асу үшін тамаша орын шығу

Мен Github демеушілеріне үлкен алғыс айтқым келеді, олар менің ісімді қолдауға көмектеседі, мен оны шынымен бағалаймын. Егер сіз білмесеңіз, Github бірінші жылы демеушілікке сәйкес келеді, сондықтан егер сіз демеушілік жасасаңыз, олар келесі бірнеше айға 100% сәйкес келеді.

Оқығаныңыз үшін рахмет!

Ұсынылған: