فهرست مطالب:
- مرحله 1: ویدیو را بررسی کنید
- مرحله 2: قبل از شروع
- مرحله 3: API های غیر عمومی (Spoiler: Instructables Has One!)
- مرحله 4: تراشیدن مستقیم داده ها
- مرحله 5: حذف داده ها با استفاده از یک سرور خارجی:
- مرحله 6: محدودیت های استفاده
- مرحله 7: ممنون که خواندید
تصویری: تراشیدن داده ها با ESP8266/ESP32: 7 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:53
آیا تا به حال خواسته اید برای پروژه های Arduino خود اطلاعات دریافت کنید ، اما API عمومی برای آن وجود ندارد؟ یا در مواردی مانند API اینستاگرام که فرآیند راه اندازی آن بسیار راحت نیست؟
در این دستورالعمل ما قصد داریم 2 گزینه مختلف را برای حذف داده ها از یک وب سایت برای پروژه های ESP8266 یا ESP32 خود بررسی کنیم.
مرحله 1: ویدیو را بررسی کنید
من یک ویدیو تهیه کرده ام که همان چیزی است که این دستورالعمل را پوشش می دهد ، بنابراین اگر علاقه دارید ، لطفاً آن را بررسی کنید!
مرحله 2: قبل از شروع
فقط باید بدانید که داده هایی که من درباره آنها صحبت خواهم کرد ، داده های عمومی هستند و نیازی به احراز هویت ندارند. بنابراین مثلاً بگویید ، تعداد دقیق مشترکین YouTube من فقط در داخل استودیوی Creator در دسترس من است ، بنابراین دستگاه باید بارگیری آن را به عنوان من درخواست کند. این نوع درخواست ها برای این ویدیو خارج از محدوده خواهد بود. یک تست سریع برای بررسی این که آیا این صفحه پوشش داده می شود این است که سعی کنید صفحه را در یک پنجره ناشناس بارگذاری کنید زیرا به طور خودکار وارد هیچ سایتی نمی شوید.
برای تکنیک های مندرج در این دستورالعمل ، ما باید از برخی از ابزارهای توسعه دهنده که در مرورگرها موجود است استفاده کنیم. من آنها را با Firefox نشان خواهم داد ، اما می دانم که Chrome ابزارهای مشابهی دارد و مطمئن هستم که مرورگرهای دیگر نیز آنها را دارند.
مرحله 3: API های غیر عمومی (Spoiler: Instructables Has One!)
اولین راهی که ما به آن نگاه می کنیم استفاده از یک API غیر عمومی است. این همیشه در دسترس نخواهد بود ، اما اگر چنین باشد قطعاً روشی است که باید از آن استفاده کنید. چیزی که من آن را "API غیر عمومی" می نامم اساساً جایی است که یک سایت در پشت صحنه از یک API تبلیغ نشده در وب سایت خود استفاده می کند تا داده هایی را که ما به دنبال آن هستیم به دست آورد.
چند دلیل وجود دارد که چرا این گزینه ترجیح داده می شود که از آن استفاده کنید.
- بزرگترین مزیت این است که بعید است به اندازه یک صفحه وب تغییر کند ، اگر داده ها را مستقیماً از صفحه وب HTML بردارید ، هر زمان که آنها تغییری در سایت ایجاد می کنند ، ممکن است تجزیه شما خراب شود.
- به طور معمول از نظر داده کارآمدتر است. هنگامی که شما در حال خراش دادن یک صفحه وب هستید ، اساساً کل صفحه HTML را بارگیری می کنید تا بخشی از اطلاعات را از آن استخراج کنید ، API ها فقط نقاط داده را برمی گردانند ، بنابراین معمولاً درخواست های بسیار کوچکتر هستند.
- معمولاً تجزیه و تحلیل آن آسان تر است. به طور معمول API ها داده ها را با فرمت JSON باز می گردانند که تجزیه آنها ساده است ، این امر به ویژه در صورتی که چندین قطعه داده را استخراج کنید ، صادق است.
ابتدا باید دریابیم که آیا صفحه وب از چنین راه اندازی استفاده می کند یا خیر. بزرگترین سرنخ این است که سایت مانند زمان Kickstarter ارزش را در زمان واقعی به روز کند ، اما حتی اگر اینطور نباشد هنوز امیدی وجود دارد که ممکن است از این تنظیمات استفاده کند. Instructables از یک API غیر عمومی برای دریافت برخی از داده ها برای سایت خود استفاده می کند ، حتی اگر در زمان واقعی بازخوانی نشود.
برای بررسی اینکه آیا سایت از این تنظیمات استفاده می کند ، حالت توسعه دهنده مرورگر خود را وارد کنید ، من ساده ترین راه برای انجام این کار این است که روی صفحه راست کلیک کرده و "element element" را انتخاب کنید.
سپس می خواهید به برگه شبکه بروید ، در این صورت درخواست هایی که صفحه وب ایجاد می کند در پس زمینه نمایش داده می شود ، توجه داشته باشید که ممکن است پس از بازکردن این برگه نیاز به بارگیری مجدد صفحه داشته باشید زیرا از این پس فقط درخواست های ارائه شده را نشان می دهد.
شما معمولاً می خواهید به دنبال مواردی با نوع "json" باشید. درخواست های زیادی در اینجا وجود دارد ، بنابراین ممکن است به مرتب سازی بر اساس نوع کمک کند. می توانید مشاهده کنید که در صفحه کمپین kickstarter بسیار واضح است که از این تنظیمات استفاده می کند ، زیرا می توانید درخواست های مداوم از نقطه پایانی "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 \" من را به اطلاعات مورد نظرمان می رساند ، که کامل است. لازم نیست نگران باشیم که در جاهای دیگر صفحه نیز مطابقت دارد ، زیرا ابتدا به بالای صفحه می رسد. اگر شما نیاز به ضربه سوم دارید ، فقط می توانید آن را برنامه ریزی کنید تا 2 مورد اول را نادیده بگیرد.
اگر به مثال TeamTrees نگاهی بیندازیم ، مانند قبل ، سرصفحه های پاسخ را رد کرده ایم و اکنون بدن پاسخ (که صفحه وب است) را بررسی می کنیم. آنچه از مشتری برمی گردد جریان داده است. ما به هیچ وجه در مورد جستجوی خود اهمیتی نمی دهیم ، بنابراین ما مشتری را پیدا می کنیم. پیدا کنید. اگر عبارت جستجو را پیدا کرد ، درست برمی گردد و جریان را به انتهای پرس و جو منتقل می کند. مورد بعدی موجود از جریان داده هایی است که ما به دنبال آن هستیم ، اما در این مورد ما مطمئن نیستیم که داده ها چقدر طول خواهند کشید ، اما می دانیم که این همه اطلاعات بین مکان فعلی ما در جریان و کاما وارونه بعدی است. به ما می توانیم با استفاده از "client.readBytesUntil" که آنچه را که می گوید انجام دهد ، بایت ها را در یک بافر می خواند تا به پرس و جو مشخص شده برسد. فقط مطمئن شوید بافری که می خوانید آنقدر بزرگ باشد که بتواند همه داده ها را در خود نگه دارد ، من فکر می کنم ما اینجا با 32 کاملاً ایمن هستیم!
اگر همه داده های مورد نیاز خود را دارید ، دیگر نیازی به خواندن داده ها ندارید. من اتصال را در اینجا نبستم زیرا به نظر نمی رسید مشکلی در ESP8266 ایجاد کند ، به نظر می رسد که مشکلاتی را در ESP32 ایجاد می کند ، بنابراین یک client.stop () اضافه کردم. صادقانه بگویم ، من مطمئن نیستم که چرا آن را در بالای روش قرار دادم ، فکر می کنم اگر اطلاعات مورد نظر خود را داشته باشید بستن آن منطقی تر خواهد بود.
مرحله 5: حذف داده ها با استفاده از یک سرور خارجی:
فقط یک موضوع دیگر که باید به آن توجه شود ، ابزارهای بسیار بهتری برای تجزیه و تحلیل در محیط های معمولی مبتنی بر رایانه مانند NodeJS نسبت به میکرو کنترلر وجود دارد ، بنابراین گاهی اوقات ممکن است ایجاد سرویسی که داده ها را از صفحه وب دریافت می کند و ساده تر ارائه می دهد منطقی باشد. نقطه پایانی برای ESP8266 یا ESP32 شما. یکی از نمونه های آن خراش دادن صفحه CrowdSupply برای دریافت تعداد زنده تعداد فروش TinyPICO بود. ممکن است دستیابی مستقیم به آن با ESP8266 یا ESP32 امکان پذیر باشد ، اما از آنجا که چندین نقطه مختلف داده را در چندین عنصر مختلف تجزیه می کرد ، بنابراین پیچیده می شد.
من در نهایت یک پروژه NodeJS ایجاد کردم و داده ها را با استفاده از کتابخانه ای به نام cheerio تجزیه کردم و بسیار خوب کار کرد. من این پروژه را روی سرور ابری که قبلاً داشتم میزبانی کردم ، اما اگر چیزی شبیه به آن را ندارید ، می توانید این پروژه را روی pi اجرا کنید.
مرحله 6: محدودیت های استفاده
یکی از مواردی که می تواند به طور بالقوه بر همه این رویکردها تأثیر بگذارد ، برخورد با محدودیت های استفاده از سایت ها است. در API های معمولی معمولاً به خوبی ثبت شده است که می توانید چند درخواست در دقیقه یا در روز انجام دهید و بر این اساس می توانید درخواست های پروژه خود را محدود کنید. هنگام خراش دادن ، نمی دانید این محدودیت ها چیست ، بنابراین با خطر برخورد با آنها و مسدود شدن احتمالی مواجه می شوید. من نمی توانم توصیه دقیقی در مورد محدود کردن آن ارائه دهم تا بتوانید در کتابهای خوب آنها بمانید ، اما من فکر می کنم هر دقیقه کمتر از هر زمان دیگری اتفاق می افتد ، به غیر از مواردی مانند kickstarter که به نظر می رسد آنها هر چند ثانیه خود درخواست می کنند.
مرحله 7: ممنون که خواندید
امیدوارم اگر علاقمند به تجزیه و تحلیل مستقیم داده ها از صفحات وب در ESP8266 یا ESP32 هستید ، این ویدیو کمک کرد. آیا س questionsال دیگری در مورد موضوعی دارید که من به آن پرداخته ام؟ لطفاً در نظرات زیر به من اطلاع دهید ، یا به من و تعدادی از سازندگان دیگر در سرور Discord من بپیوندید ، جایی که می توانیم در مورد این موضوع یا هر سازنده دیگری که در مورد آن صحبت می کنید بحث کنیم ، مردم واقعاً در آنجا مفید هستند ، بنابراین مکانی عالی برای آویزان کردن است بیرون
من همچنین می خواهم از حامیان Github خود که به حمایت از کاری که انجام می دهم کمک کنند ، تشکر کنم ، واقعاً از آن قدردانی می کنم. اگر نمی دانید ، Github برای سال اول حامی مالی می کند ، بنابراین اگر حمایت مالی کنید ، تا چند ماه آینده 100 با آن مطابقت دارد.
ممنون که خواندید!
توصیه شده:
از داده های زنده آردوینو (و ذخیره داده ها در اکسل) نقشه های زیبا بسازید: 3 مرحله
از داده های زنده آردوینو نقشه های زیبا بسازید (و داده ها را در اکسل ذخیره کنید): همه ما دوست داریم با تابع P … lotter خود در Arduino IDE بازی کنیم. با این حال ، در حالی که می تواند برای برنامه های کاربردی اساسی مفید باشد ، داده ها بیشتر پاک می شوند امتیاز اضافه می شود و برای چشم چندان خوشایند نیست. پلاتر Arduino IDE انجام نمی دهد
نحوه انتشار داده های ESP32 با NTP Timestamp در IoT Cloud: 5 مرحله
نحوه انتشار داده های ESP32 با NTP Timestamp به IoT Cloud: در بسیاری از برنامه های کاربردی ، کاربران باید داده های خود را به همراه نشان زمان محلی مقادیر ارسال شده در محموله بار به ابر AskSensors IoT ارسال کنند. قالب زمانبندی زمان UNIX Epoch است: تعداد میلی ثانیه که از ژانویه گذشته است
سیستم جمع آوری داده ها و تجسم داده ها برای دوچرخه مسابقه برقی MotoStudent: 23 مرحله
سیستم جمع آوری داده و تجسم داده برای دوچرخه مسابقه ای برقی MotoStudent: سیستم جمع آوری داده ها مجموعه ای از سخت افزارها و نرم افزارها است که به منظور جمع آوری داده ها از سنسورهای خارجی ، ذخیره و پردازش آن بعداً به کار می روند تا به صورت گرافیکی تجسم و تجزیه و تحلیل شوند. به مهندسان اجازه می دهد تا
UbiDots-اتصال ESP32 و انتشار داده های چند سنسور: 6 مرحله
UbiDots-اتصال ESP32 و انتشار داده های چند سنسور: ESP32 و ESP 8266 SoC بسیار آشنا در زمینه IoT هستند. اینها به نوعی برای پروژه های IoT مفید هستند. ESP 32 دستگاهی با WiFi و BLE یکپارچه است. فقط SSID ، رمز عبور و پیکربندی IP خود را وارد کنید و موارد را در
نحوه دریافت داده ها از پایگاه داده Firebase در NodeMCU: 7 مرحله
نحوه واکشی داده ها از پایگاه داده Firebase در NodeMCU: برای این دستورالعمل ، ما داده ها را از پایگاه داده در Google Firebase واکشی کرده و با استفاده از NodeMCU برای تجزیه و تحلیل بیشتر می آوریم. حساب ایجاد پایگاه داده Firebase. 3) بارگیری