جدول المحتويات:

كشط البيانات باستخدام ESP8266 / ESP32: 7 خطوات
كشط البيانات باستخدام ESP8266 / ESP32: 7 خطوات

فيديو: كشط البيانات باستخدام ESP8266 / ESP32: 7 خطوات

فيديو: كشط البيانات باستخدام ESP8266 / ESP32: 7 خطوات
فيديو: Ultrasonic Remote Access Sensors: Inspect Bearings Remotely 2024, شهر نوفمبر
Anonim
كشط البيانات باستخدام ESP8266 / ESP32
كشط البيانات باستخدام ESP8266 / ESP32
كشط البيانات باستخدام ESP8266 / ESP32
كشط البيانات باستخدام ESP8266 / ESP32

هل سبق لك أن رغبت في الحصول على بيانات لمشاريع Arduino الخاصة بك ، ولكن لا توجد واجهة برمجة تطبيقات عامة لها؟ أو في حالات مثل Instagram API حيث لا تكون عملية الإعداد مريحة للغاية؟

في Instructable ، سننظر في خيارين مختلفين لكشط البيانات من موقع ويب لمشاريع ESP8266 أو ESP32.

الخطوة 1: شاهد الفيديو

Image
Image

لقد صنعت مقطع فيديو يغطي نفس الشيء مثل هذا التوجيه ، لذا إذا كنت مهتمًا ، فيرجى التحقق منه!

الخطوة 2: قبل أن نبدأ

قبل أن نبدأ
قبل أن نبدأ
قبل أن نبدأ
قبل أن نبدأ

مجرد تنبيه أن البيانات التي سأتحدث عنها هي بيانات عامة ولا تتطلب أي مصادقة. لنفترض على سبيل المثال ، أن العدد الدقيق لمشتركي YouTube متاح لي فقط داخل استوديو المبدعين ، لذلك سيتعين على الجهاز تقديم طلب تمت المصادقة عليه بصفتي لتحميله. ستكون هذه الأنواع من الطلبات خارج نطاق هذا الفيديو. اختبار سريع للتحقق مما إذا كان سيتم تغطيته هو محاولة تحميل الصفحة في نافذة التصفح المتخفي لأن ذلك لن يسجّل دخولك تلقائيًا إلى أي مواقع.

بالنسبة للتقنيات التي تم تناولها في هذا Instructable ، سيتعين علينا استخدام بعض أدوات المطور المتوفرة في المتصفحات. سأقوم بشرحها باستخدام Firefox ، لكنني أعلم أن Chrome يحتوي على أدوات مماثلة وأنا متأكد من أن المتصفحات الأخرى تمتلكها أيضًا.

الخطوة 3: واجهات برمجة التطبيقات غير العامة (Spoiler: Instructables has one!)

واجهات برمجة التطبيقات غير العامة (المفسد: التعليمات لها واحد!)
واجهات برمجة التطبيقات غير العامة (المفسد: التعليمات لها واحد!)
واجهات برمجة التطبيقات غير العامة (المفسد: التعليمات لها واحد!)
واجهات برمجة التطبيقات غير العامة (المفسد: التعليمات لها واحد!)
واجهات برمجة التطبيقات غير العامة (المفسد: التعليمات لها واحد!)
واجهات برمجة التطبيقات غير العامة (المفسد: التعليمات لها واحد!)

الطريقة الأولى التي سنلقي نظرة عليها هي استخدام واجهة برمجة تطبيقات غير عامة. لن يكون هذا متاحًا دائمًا ، ولكن إذا كان هذا هو بالتأكيد الطريقة التي يجب أن تهدف إلى استخدامها. ما أسميه "واجهة برمجة تطبيقات غير عامة" هو في الأساس حيث يستخدم الموقع واجهة برمجة تطبيقات غير معلن عنها على موقع الويب الخاص به وراء الكواليس لجلب البيانات التي نتطلع إلى الحصول عليها.

هناك عدة أسباب تجعل هذا الخيار المفضل للاستخدام.

  1. أكبر ميزة هي أنه من غير المحتمل أن يتغير كثيرًا مثل صفحة الويب ، إذا قمت بكشط البيانات مباشرة من صفحة الويب HTML ، في كل مرة يجرون فيها تغييرًا على الموقع ، قد يتعطل التحليل.
  2. عادة ما يكون أكثر كفاءة في استخدام البيانات. عندما تقوم بكشط صفحة ويب ، فأنت تقوم بشكل أساسي بتنزيل صفحة HTML بأكملها لاستخراج أجزاء من المعلومات منها ، وستقوم واجهات برمجة التطبيقات بإرجاع نقاط البيانات فقط ، لذا عادةً ما تكون طلبات أصغر بكثير.
  3. عادة ما يكون التحليل أسهل. عادةً ما تقوم واجهات برمجة التطبيقات بإرجاع البيانات بتنسيق JSON وهو أمر سهل التحليل ، وهذا صحيح بشكل خاص إذا كنت تستخرج أجزاء متعددة من البيانات.

علينا أولاً معرفة ما إذا كانت صفحة الويب تستخدم إعدادًا مثل هذا. أكبر دليل هو ما إذا كان الموقع يقوم بتحديث القيمة في الوقت الفعلي كما يفعل في Kickstarter ، ولكن حتى إذا لم يحدث ذلك ، فلا يزال هناك أمل في أنه قد يستخدم هذا الإعداد. يستخدم Instructables واجهة برمجة تطبيقات غير عامة لجلب بعض البيانات لموقعهم على الرغم من عدم تحديثها في الوقت الفعلي.

للتحقق مما إذا كان الموقع يستخدم هذا الإعداد ، أدخل وضع المطور في متصفحك ، أجد أن أسهل طريقة للقيام بذلك هي النقر بزر الماوس الأيمن على الصفحة وتحديد "فحص العنصر".

ستحتاج بعد ذلك إلى الانتقال إلى علامة تبويب الشبكة ، سيعرض هذا الطلبات التي تقدمها صفحة الويب في الخلفية ، لاحظ أنك قد تحتاج إلى إعادة تحميل الصفحة بعد فتح علامة التبويب هذه لأنها ستعرض الطلبات المقدمة فقط من الآن فصاعدًا.

عادة ما تريد البحث عن تلك من النوع "json". يمكن أن يكون هناك الكثير من الطلبات هنا ، لذلك قد يكون من المفيد الفرز حسب النوع. يمكنك أن ترى أنه من الواضح جدًا في صفحة حملة kickstarter أنها تستخدم هذا الإعداد حيث يمكنك رؤية الطلبات المستمرة التي يتم إجراؤها على نقطة نهاية "stats.json". في صفحة مؤلفي Instructables (على سبيل المثال ، هي "https://www.instructables.com/member/witnessmenow/") ، لا يقدمون طلبات مستمرة ، ولكن يمكنك رؤية طلب مخفي من بين الآخرين لنقطة نهاية "showAuthorStats".

لمعرفة المزيد من المعلومات حول هذا الطلب ، يمكنك النقر فوقه. يجب أن تكون قادرًا على الحصول على جميع المعلومات التي تحتاجها من هنا لتكرار الطلب. ولكن قبل القيام بذلك ، تريد أولاً التحقق مرة أخرى من أنه يحتوي على البيانات التي تريدها. انقر فوق علامة تبويب الاستجابة ومعرفة ما إذا كانت البيانات موجودة.

إذا كان يحتوي على البيانات التي تحتاجها ، فأنت جاهز! يمكنك بعد ذلك استخدام نفس الأساليب التي تمت مناقشتها في الفيديو السابق الخاص بي حول الاتصال بواجهات برمجة التطبيقات. يتمثل الإصدار المختصر من ذلك في التأكد من أن الطلب يعمل كما هو متوقع على أداة مثل Postman أولاً ثم استخدام مثال المشروع هذا لاختبار ما إذا كان يعمل على جهازك.

لتحليل بيانات JSON ، أوصي باستخدام ArudinoJSON في معظم السيناريوهات ، إذا كان هذا شيئًا ترغب في الحصول على تعليمات بشأنه ، فقط أخبرني!

الخطوة 4: كشط البيانات مباشرة

كشط البيانات مباشرة
كشط البيانات مباشرة
كشط البيانات مباشرة
كشط البيانات مباشرة
كشط البيانات مباشرة
كشط البيانات مباشرة

بعد ذلك سننظر في كشط البيانات مباشرة من صفحة الويب ، وهذا يتطلب صفحة الويب الكاملة على الجهاز وتحليل البيانات التي نريدها. لقد ذكرت بالفعل مزايا واجهة برمجة التطبيقات غير العامة التي تتفوق على هذه الطريقة ، ولكن في بعض الأحيان يجب أن تكون!

هناك شيء واحد مهم يجب ملاحظته هنا ، إذا كنت معتادًا على تطوير الويب ، فقد تكون معتادًا على استخدام ميزة عنصر الفحص لمعرفة معلومات حول عنصر معين وكيفية هيكلته. يجب تجنب هذا في هذا النهج ، لأن صفحات الويب الحديثة عادةً ما يتم تغييرها ديناميكيًا باستخدام Javascript ، وهو ما لن يحدث على جهازك. سيكون رمز HTML المتاح على جهازك هو صفحة الويب الأصلية التي يتم تنزيلها فقط. وخير مثال على ذلك هو صفحة TeamTrees ، حيث يبدأ عدد التبرعات الحالي كـ 0 ويتم تحميله في الصفحة لاحقًا باستخدام هذه الرسوم المتحركة ، ولكن على عكس المثالين اللذين رأيناهما من قبل ، لا يتم تحميل البيانات في الخلفية ، لذلك يجب أن تكون البيانات الصحيحة في مكان آخر.

لعرض رمز صفحة الويب الأصلي ، يمكنك النقر بزر الماوس الأيمن على الصفحة وتحديد "عرض المصدر". تريد بعد ذلك البحث عن البيانات المعينة التي تريدها ، لذلك في مثال TeamTrees عندما نبحث عن عدد التبرعات الحالي ، يمكننا أن نرى أن العدد الفعلي مخزن في خاصية حساب البيانات لعنصر الجرد ، وهذا هو المكان الذي نحتاج إليه كشط البيانات من.

تحتاج إلى العثور على سلسلة بحث تقودك إلى بياناتك ، فمن الأسهل بكثير معرفة ذلك قبل الترميز للجهاز. في هذا المثال ، البحث عن "data-count \" يقودني مباشرة إلى البيانات التي نريدها ، وهذا مثالي. لا داعي للقلق من أنه يتطابق أيضًا في أماكن أخرى بالصفحة ، لأنه سيصل إلى أعلى الصفحة أولاً. إذا كنت بحاجة إلى الوصول إلى الرقم الثالث ، فيمكنك فقط برمجته لتجاهل أول 2 تضغط عليه.

إذا ألقينا نظرة على مثال TeamTrees ، مثل قبل أن نتخطى رؤوس الاستجابة وننظر الآن في نص الاستجابة (وهي صفحة الويب). ما يعود من العميل هو دفق من البيانات. نحن لا نهتم بأي شيء يتعلق باستعلام البحث ، لذلك نحن نهتم بالبحث عن client.find. إذا عثر على استعلام البحث ، فسيعود صحيحًا وسينقل الدفق إلى نهاية الاستعلام. الشيء التالي المتاح من الدفق سيكون البيانات التي نبحث عنها ، ولكن في هذه الحالة نحن غير متأكدين من المدة التي ستستغرقها البيانات ، لكننا نعلم أنها جميع المعلومات بين مكاننا الحالي في الدفق والفاصلة المقلوبة التالية. يمكننا تحقيق ذلك باستخدام "client.readBytesUntil" الذي يقوم بما يقوله ، فإنه يقرأ البايت في مخزن مؤقت حتى يصل إلى الاستعلام المحدد. فقط تأكد من أن المخزن المؤقت الذي تقرأ فيه كبير بما يكفي لاحتواء جميع البيانات ، وأعتقد أننا هنا بأمان مع 32!

إذا كانت لديك كل البيانات التي تحتاجها ، فلن تحتاج إلى قراءة المزيد من البيانات. لم أغلق الاتصال هنا لأنه لا يبدو أنه يسبب مشكلة في ESP8266 ، يبدو أنه تسبب في حدوث مشكلات مع ESP32 ، لذلك أضفت client.stop (). لأكون صادقًا تمامًا ، لست متأكدًا من سبب وضعها في مقدمة الطريقة ، أعتقد أنه سيكون من المنطقي إغلاقها بمجرد حصولك على البيانات التي تريدها.

الخطوة 5: كشط البيانات باستخدام خادم خارجي:

كشط البيانات باستخدام خادم خارجي
كشط البيانات باستخدام خادم خارجي
كشط البيانات باستخدام خادم خارجي
كشط البيانات باستخدام خادم خارجي

هناك موضوع واحد آخر يجب التطرق إليه ، هناك أدوات أفضل بكثير للتحليل في البيئات العادية القائمة على الكمبيوتر مثل NodeJS مقارنة بوحدة التحكم الدقيقة ، لذلك قد يكون من المنطقي في بعض الأحيان إنشاء خدمة تجلب البيانات من صفحة ويب وتوفر طريقة أبسط نقطة نهاية لـ ESP8266 أو ESP32. أحد الأمثلة على ذلك هو إلغاء صفحة CrowdSupply للحصول على إحصاء مباشر لعدد TinyPICO التي تم بيعها. ربما كان من الممكن تحقيق ذلك مباشرة على ESP8266 أو ESP32 ، ولكن نظرًا لأنه كان يحلل عدة نقاط بيانات مختلفة على عدة عناصر مختلفة ، لذلك كان من الممكن أن يكون معقدًا.

انتهى بي الأمر بإنشاء مشروع NodeJS وقمت بتحليل البيانات باستخدام مكتبة تسمى cheerio وعملت بشكل جيد للغاية. لقد استضفت هذا المشروع على خادم سحابي كان لدي بالفعل ، ولكن يمكنك تشغيل هذا النوع من المشروع على pi إذا لم يكن لديك شيء مثل هذا الإعداد.

الخطوة 6: حدود الاستخدام

حدود الاستخدام
حدود الاستخدام

الشيء الوحيد الذي يمكن أن يؤثر على كل هذه الأساليب هو الوصول إلى حدود استخدام المواقع. في واجهات برمجة التطبيقات العادية ، عادةً ما يكون موثقًا جيدًا عدد الطلبات التي يمكنك إجراؤها في الدقيقة أو يوميًا ويمكنك تقييد طلبات مشاريعك بناءً على ذلك. عندما تقوم بالقشط ، فأنت لا تعرف ما هي هذه الحدود ، لذا فإنك تخاطر بضربها وربما يتم حظرها. لا يمكنني تقديم أي نصيحة دقيقة حول الحد من ذلك ، لذا عليك البقاء في كتبهم الجيدة ، لكنني أعتقد أن أي شيء أقل من كل دقيقة سيكون كثيرًا جدًا ، بخلاف ربما حالات مثل كيك ستارتر حيث يبدو أنهم يقدمون طلبات كل بضع ثوانٍ بأنفسهم.

الخطوة 7: شكرا للقراءة

نأمل أن يكون هذا الفيديو مفيدًا إذا كنت مهتمًا بتحليل البيانات مباشرة من صفحات الويب على ESP8266 أو ESP32. هل لديك أي أسئلة أخرى حول الموضوع لم أتناولها؟ يرجى إعلامي في التعليقات أدناه ، أو الانضمام إلي ومجموعة من الصانعين الآخرين على خادم Discord الخاص بي ، حيث يمكننا مناقشة هذا الموضوع أو أي صانع آخر مرتبط لديك ، فالناس مفيدون حقًا هناك ، لذا فهو مكان رائع للتعليق خارج

أود أيضًا أن أتقدم بالشكر الجزيل لرعاة Github الذين ساعدوا في دعم ما أقوم به ، وأنا أقدر ذلك حقًا. إذا كنت لا تعرف ، فإن Github تقوم بمطابقة عروض الرعاية للسنة الأولى ، لذلك إذا قدمت رعاية ، فستتوافق معها بنسبة 100٪ للأشهر القليلة القادمة.

شكرا للقراءة!

موصى به: