תוכן עניינים:

גירוד נתונים עם ESP8266/ESP32: 7 שלבים
גירוד נתונים עם ESP8266/ESP32: 7 שלבים

וִידֵאוֹ: גירוד נתונים עם ESP8266/ESP32: 7 שלבים

וִידֵאוֹ: גירוד נתונים עם ESP8266/ESP32: 7 שלבים
וִידֵאוֹ: How to get 5V from 18650 Lithium Battery Powering Arduino ESP32 ESP8266 or charge your phone 2024, יולי
Anonim
גירוד נתונים עם ESP8266/ESP32
גירוד נתונים עם ESP8266/ESP32
גירוד נתונים עם ESP8266/ESP32
גירוד נתונים עם ESP8266/ESP32

האם אי פעם רצית לקבל נתונים לפרויקטים של Arduino שלך, אבל אין API ציבורי לזה? או במקרים כמו ממשק ה- API של אינסטגרם שבו תהליך ההתקנה של זה אינו נוח במיוחד?

במדריך זה נבחן 2 אפשרויות שונות לגרידת נתונים מאתר אינטרנט עבור פרויקטים שלך ESP8266 או ESP32.

שלב 1: בדוק את הסרטון

Image
Image

הכנתי סרטון שמכסה את אותו דבר כמו ההוראה הזו, אז אם אתה מעוניין, אנא בדוק אותו!

שלב 2: לפני שנתחיל

לפני שאנחנו מתחילים
לפני שאנחנו מתחילים
לפני שאנחנו מתחילים
לפני שאנחנו מתחילים

רק בראש ובראשונה שהנתונים עליהם אדבר על גירוד הם נתונים מול הציבור ואינם דורשים כל אימות. אז תגיד למשל, מספר המנויים המדויק שלי ב- YouTube זמין לי רק בתוך סטודיו ליוצרים, כך שהמכשיר יצטרך לבקש אימות כמוני כדי לטעון אותו. סוגים אלה של בקשות יהיו מחוץ לתחום הסרטון הזה. בדיקה מהירה לבדוק האם הוא יכוסה היא לנסות לטעון את הדף בחלון גלישה בסתר מכיוון שזה לא יכנס אותך אוטומטית לאתרים כלשהם.

עבור טכניקות המכוסות במדריך זה נצטרך להשתמש בכמה מכלי הפיתוח הזמינים בדפדפנים. אני אדגים אותם עם פיירפוקס, אבל אני יודע שבוודאי ל- Chrome יש כלים דומים ואני בטוח שיש להם גם דפדפנים אחרים.

שלב 3: ממשקי API לא ציבוריים (לספוילר: ל- Instructables יש אחד!)

ממשקי API לא ציבוריים (לספוילר: למדריך יש אחד!)
ממשקי API לא ציבוריים (לספוילר: למדריך יש אחד!)
ממשקי API לא ציבוריים (לספוילר: למדריך יש אחד!)
ממשקי API לא ציבוריים (לספוילר: למדריך יש אחד!)

הדרך הראשונה בה נבחן היא שימוש בממשק 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 כאשר אנו מחפשים את ספירת התרומות הנוכחית, אנו יכולים לראות את הספירה בפועל מאוחסנת בנכס ספירת הנתונים של רכיב הספירה, כאן אנו צריכים לגרד את הנתונים.

עליך למצוא מחרוזת חיפוש המובילה אותך לנתונים שלך, הרבה יותר קל להבין זאת לפני קידוד המכשיר. בדוגמה זו, חיפוש אחר "ספירת נתונים \" "מביא אותי עד לנתונים שאנו רוצים, וזה מושלם. אנחנו לא צריכים לדאוג שהוא תואם גם במקומות אחרים בדף, כי הוא יגיע לראשון הראשון. אם אכן היית צריך להכות את השלישי, אתה יכול פשוט לתכנת אותו להתעלם מה -2 הראשונות שפגעת בו.

אם נסתכל על הדוגמה של TeamTrees, כמו קודם דילגנו על כותרות התגובה ועכשיו נסתכל על גוף התגובה (שהוא דף האינטרנט). מה שחוזר מהלקוח הוא זרם נתונים. לא אכפת לנו מכלום עד שאילתת החיפוש שלנו, אז אנחנו עושים לקוח. אם הוא אכן ימצא את שאילתת החיפוש היא תחזור נכון והיא תעביר את הזרם לסוף השאילתה. הדבר הבא הזמין מהזרם יהיה נתונים שאנו מחפשים, אך במקרה זה איננו בטוחים כמה זמן הנתונים יהיו, אך אנו יודעים שזה כל המידע בין המקום הנוכחי שלנו בזרם לבין הפסיק הבא הפוך. אנו יכולים להשיג זאת באמצעות "client.readBytesUntil" שעושה את מה שהוא אומר, הוא קורא את הבייטים למאגר עד שהוא פוגע בשאילתה שצוין. רק וודא שהמאגר שאליו אתה קורא גדול מספיק כדי להכיל את כל הנתונים, אני חושב שאנחנו די בטוחים כאן עם 32!

אם יש לך את כל הנתונים שאתה צריך, אז אתה לא צריך לקרוא יותר נתונים. לא סגרתי את החיבור כאן כי לא נראה שזה גרם לבעיה ב- ESP8266, נראה שגרם לבעיות ב- ESP32, אז הוספתי client.stop (). למען האמת לגמרי, אני לא בטוח מדוע העליתי אותו לראש השיטה, הייתי חושב שיהיה הגיוני יותר לסגור אותו ברגע שיש לך את הנתונים שאתה רוצה.

שלב 5: גירוד נתונים באמצעות שרת חיצוני:

גירוד נתונים באמצעות שרת חיצוני
גירוד נתונים באמצעות שרת חיצוני
גירוד נתונים באמצעות שרת חיצוני
גירוד נתונים באמצעות שרת חיצוני

רק נושא אחד נוסף שאפשר לגעת בו, ישנם כלים הרבה יותר טובים לניתוח בסביבות מחשב רגילות כגון NodeJS מאשר בבקר מיקרו, כך שלפעמים זה עשוי להיות הגיוני ליצור שירות שמביא את הנתונים מדף אינטרנט ומספק פשוט יותר נקודת קצה עבור ESP8266 או ESP32 שלך. אחת הדוגמאות לכך הייתה גירוד הדף CrowdSupply כדי לקבל ספירה חיה של כמה TinyPICO נמכרו. יתכן שאפשר היה להשיג אותו ישירות ב- ESP8266 או ESP32, אך מכיוון שהוא מנתח מספר נקודות נתונים שונות על מספר אלמנטים שונים, כך זה היה מסובך.

בסופו של דבר יצרתי פרויקט NodeJS וניתחתי את הנתונים באמצעות ספרייה בשם cheerio וזה הצליח מאוד. אירחתי את הפרויקט הזה בשרת ענן שכבר היה לי, אבל אתה יכול להריץ פרויקט מסוג זה על פי אם לא היה לך דבר כזה.

שלב 6: גבולות השימוש

גבולות שימוש
גבולות שימוש

דבר אחד שעלול להשפיע על כל הגישות הללו הוא פגיעה במגבלות השימוש באתרים. בממשקי API רגילים בדרך כלל מתועד היטב כמה בקשות אתה יכול להגיש לדקה או ליום ואתה יכול להגביל את בקשות הפרויקטים שלך על סמך זה. כאשר אתה מגרד, אינך יודע מהן הגבולות הללו, כך שאתה מסתכן לפגוע בהן ועלול להיחסם. אני לא יכול לתת עצות מדויקות להגביל את זה, כך שתשאר בספרים הטובים שלהם, אבל הייתי חושב שכל דבר מתחת לכל דקה יהיה לעתים קרובות מדי, מלבד אולי מקרים כמו קיקסטארטר שבהם נראה שהם מבקשים כל כמה שניות בעצמם.

שלב 7: תודה שקראתם

יש לקוות שסרטון זה עזר אם אתה מעוניין לנתח נתונים ישירות מדפי אינטרנט ב- ESP8266 או ESP32 שלך. יש לך שאלות נוספות בנושא שלא דיברתי עליהן? אנא יידע אותי בתגובות למטה, או הצטרף אליי וחבורה של יוצרים אחרים בשרת הדיסקורד שלי, שם נוכל לדון בנושא זה או בכל יצרנים אחרים הקשורים לך, אנשים באמת עוזרים שם כך שזה מקום נהדר לתלות בו הַחוּצָה

אני גם רוצה להודות לאותן נותני החסות שלי ב- Github שעוזרים לתמוך במה שאני עושה, אני באמת מעריך את זה. אם אינך יודע, Github תואם חסויות לשנה הראשונה, כך שאם תעשה חסות הם יתאימו לזה 100% במשך החודשים הקרובים.

תודה שקראתם!

מוּמלָץ: