Πίνακας περιεχομένων:

Απόξεση δεδομένων με ESP8266/ESP32: 7 βήματα
Απόξεση δεδομένων με ESP8266/ESP32: 7 βήματα

Βίντεο: Απόξεση δεδομένων με ESP8266/ESP32: 7 βήματα

Βίντεο: Απόξεση δεδομένων με ESP8266/ESP32: 7 βήματα
Βίντεο: Αποβολές μέχρι την 8η-9η Εβδομάδα| Η Σωστή Προσέγγιση | Dr. Theodosis Arkoulis 2024, Ιούλιος
Anonim
Απόξεση δεδομένων με ESP8266/ESP32
Απόξεση δεδομένων με ESP8266/ESP32
Απόξεση δεδομένων με ESP8266/ESP32
Απόξεση δεδομένων με ESP8266/ESP32

Θέλατε ποτέ να λάβετε δεδομένα για τα έργα σας Arduino, αλλά δεν υπάρχει δημόσιο API για αυτό; Or σε περιπτώσεις όπως το API Instagram όπου η διαδικασία εγκατάστασης για το δεν είναι πολύ βολική;

Σε αυτό το Instructable θα εξετάσουμε 2 διαφορετικές επιλογές για την απόρριψη δεδομένων από έναν ιστότοπο για τα έργα σας ESP8266 ή ESP32.

Βήμα 1: Δείτε το βίντεο

Image
Image

Έχω κάνει ένα βίντεο που καλύπτει το ίδιο πράγμα με αυτό το διδακτικό, οπότε αν σας ενδιαφέρει, ελέγξτε το!

Βήμα 2: Πριν ξεκινήσουμε

Πριν Ξεκινήσουμε
Πριν Ξεκινήσουμε
Πριν Ξεκινήσουμε
Πριν Ξεκινήσουμε

Μόνο που σας ενημερώνω ότι τα δεδομένα για τα οποία θα μιλήσω είναι δεδομένα κοινού και δεν απαιτούν έλεγχο ταυτότητας. Για παράδειγμα, για παράδειγμα, ο ακριβής αριθμός συνδρομητών μου στο YouTube είναι διαθέσιμος μόνο στο στούντιο δημιουργών, οπότε η συσκευή θα πρέπει να υποβάλει ένα αίτημα που πιστοποιήθηκε ως εμένα για να το φορτώσει. Αυτοί οι τύποι αιτημάτων θα είναι εκτός πεδίου εφαρμογής για αυτό το βίντεο. Μια γρήγορη δοκιμή για να ελέγξετε εάν καλύπτεται είναι να προσπαθήσετε να φορτώσετε τη σελίδα σε ένα παράθυρο ανώνυμης περιήγησης, καθώς αυτό δεν θα σας συνδέσει αυτόματα σε κανέναν ιστότοπο.

Για τεχνικές που καλύπτονται σε αυτό το Instructable θα πρέπει να χρησιμοποιήσουμε μερικά από τα εργαλεία προγραμματιστή που είναι διαθέσιμα στα προγράμματα περιήγησης. Θα τα δείξω με τον 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. Η σύντομη έκδοση είναι να βεβαιωθείτε ότι το αίτημα λειτουργεί όπως αναμένεται σε ένα εργαλείο όπως ο Ταχυδρόμος και στη συνέχεια χρησιμοποιήστε αυτό το παράδειγμα έργου για να ελέγξετε ότι λειτουργεί στη συσκευή σας.

Για την ανάλυση των δεδομένων JSON θα συνιστούσα τη χρήση του ArudinoJSON στα περισσότερα σενάρια, αν αυτό είναι κάτι για το οποίο θα θέλατε να διδάξετε, απλώς ενημερώστε με!

Βήμα 4: Άμεση απόξεση δεδομένων

Αφαίρεση δεδομένων απευθείας
Αφαίρεση δεδομένων απευθείας
Αφαίρεση δεδομένων απευθείας
Αφαίρεση δεδομένων απευθείας
Ξύσιμο δεδομένων απευθείας
Ξύσιμο δεδομένων απευθείας

Στη συνέχεια, θα εξετάσουμε την απόξεση των δεδομένων απευθείας από την ιστοσελίδα, αυτό είναι το αίτημα για την πλήρη ιστοσελίδα στη συσκευή και την ανάλυση των δεδομένων που θέλουμε. Ανέφερα ήδη τα πλεονεκτήματα του μη δημόσιου API σε σχέση με αυτήν τη μέθοδο, αλλά μερικές φορές πρέπει!

Ένα πράγμα που είναι σημαντικό να σημειωθεί εδώ, εάν είστε εξοικειωμένοι με την ανάπτυξη ιστού, μπορεί να έχετε συνηθίσει να χρησιμοποιείτε τη λειτουργία στοιχείου επιθεώρησης για να μάθετε πληροφορίες σχετικά με ένα συγκεκριμένο στοιχείο και πώς είναι δομημένο. Αυτό πρέπει να αποφευχθεί για αυτήν την προσέγγιση, επειδή οι σύγχρονες ιστοσελίδες συνήθως αλλάζουν δυναμικά χρησιμοποιώντας Javascript, κάτι που δεν θα συμβεί στη συσκευή σας. Ο κωδικός HTML που είναι διαθέσιμος στη συσκευή σας θα είναι μόνο η αρχική ιστοσελίδα που έχει ληφθεί. Ένα καλό παράδειγμα για αυτό είναι η σελίδα TeamTrees, ο τρέχων αριθμός δωρεών ξεκινά ως 0 και φορτώνεται στη σελίδα αργότερα με αυτήν την κίνηση, αλλά σε αντίθεση με τα δύο παραδείγματα που έχουμε δει πριν, δεν φορτώνει τα δεδομένα στο παρασκήνιο, οπότε τα σωστά δεδομένα πρέπει να βρίσκονται κάπου αλλού.

Για να δείτε τον αρχικό κώδικα της ιστοσελίδας, μπορείτε να κάνετε δεξί κλικ στη σελίδα και να επιλέξετε "Προβολή πηγής". Στη συνέχεια, θέλετε να αναζητήσετε τα συγκεκριμένα δεδομένα που θέλετε, οπότε στο παράδειγμα TeamTrees όταν αναζητάμε τον τρέχοντα αριθμό δωρεών, μπορούμε να δούμε ότι ο πραγματικός αριθμός είναι αποθηκευμένος στην ιδιότητα καταμέτρησης δεδομένων του στοιχείου καταμέτρησης, εδώ πρέπει να ξύνω τα δεδομένα από.

Πρέπει να βρείτε μια συμβολοσειρά αναζήτησης που σας οδηγεί στα δεδομένα σας. Είναι πολύ πιο εύκολο να το καταλάβετε πριν κωδικοποιήσετε τη συσκευή. Για αυτό το παράδειγμα, η αναζήτηση για "count-count \" "με φέρνει στα δεδομένα που θέλουμε, τα οποία είναι τέλεια. Δεν χρειάζεται να ανησυχούμε ότι ταιριάζει και σε άλλα σημεία της σελίδας, επειδή θα χτυπήσει πρώτα το πρώτο. Εάν όντως χρειαζόταν να πατήσετε το τρίτο, μπορείτε απλώς να το προγραμματίσετε για να αγνοήσει τα πρώτα 2 που χτυπήσατε.

Αν ρίξουμε μια ματιά στο παράδειγμα TeamTrees, όπως πριν, παραλείψαμε τις κεφαλίδες απάντησης και τώρα κοιτάμε το σώμα της απάντησης (που είναι η ιστοσελίδα). Αυτό που επιστρέφει από τον πελάτη είναι μια ροή δεδομένων. Δεν μας ενδιαφέρει τίποτα μέχρι το ερώτημά μας αναζήτησης, οπότε ασχολούμαστε με έναν πελάτη. Find. Εάν βρει το ερώτημα αναζήτησης, θα επιστρέψει αληθινό και θα μετακινήσει τη ροή στο τέλος του ερωτήματος. Το επόμενο πράγμα που είναι διαθέσιμο από τη ροή θα είναι τα δεδομένα που ψάχνουμε, αλλά σε αυτή την περίπτωση δεν είμαστε βέβαιοι για το πόσο θα είναι τα δεδομένα, αλλά γνωρίζουμε ότι είναι όλες οι πληροφορίες μεταξύ της τρέχουσας θέσης μας στη ροή και του επόμενου ανεστραμμένου κόμματος Το Αυτό μπορούμε να το πετύχουμε χρησιμοποιώντας το "client.readBytesUntil" που κάνει αυτό που λέει, διαβάζει τα byte σε buffer μέχρι να χτυπήσει το καθορισμένο ερώτημα. Απλά βεβαιωθείτε ότι το buffer στο οποίο διαβάζετε είναι αρκετά μεγάλο για να χωρέσει όλα τα δεδομένα, νομίζω ότι είμαστε αρκετά ασφαλείς εδώ με 32!

Εάν διαθέτετε όλα τα δεδομένα που χρειάζεστε, τότε δεν χρειάζεται να διαβάζετε πλέον δεδομένα. Δεν έκλεισα τη σύνδεση εδώ επειδή δεν φαινόταν να προκαλεί πρόβλημα στο ESP8266, φαινόταν να προκαλεί προβλήματα με το ESP32, οπότε πρόσθεσα ένα client.stop (). Για να είμαι απόλυτα ειλικρινής, δεν είμαι σίγουρος γιατί το έθεσα στην κορυφή της μεθόδου, θα πίστευα ότι θα ήταν πιο λογικό να το κλείσετε μόλις έχετε τα δεδομένα που θέλετε.

Βήμα 5: Απόξεση δεδομένων χρησιμοποιώντας έναν εξωτερικό διακομιστή:

Απόξεση δεδομένων χρησιμοποιώντας εξωτερικό διακομιστή
Απόξεση δεδομένων χρησιμοποιώντας εξωτερικό διακομιστή
Απόξεση δεδομένων χρησιμοποιώντας εξωτερικό διακομιστή
Απόξεση δεδομένων χρησιμοποιώντας εξωτερικό διακομιστή

Μόνο ένα άλλο θέμα για να θίξουμε, υπάρχουν πολύ καλύτερα εργαλεία για την ανάλυση σε κανονικά περιβάλλοντα που βασίζονται σε υπολογιστή, όπως το NodeJS, παρά σε έναν μικροελεγκτή, οπότε μερικές φορές μπορεί να έχει νόημα να δημιουργηθεί μια υπηρεσία που θα λαμβάνει τα δεδομένα από μια ιστοσελίδα και παρέχει μια απλούστερη τελικό σημείο για το ESP8266 ή το ESP32. Ένα παράδειγμα αυτού ήταν η απόξεση της σελίδας CrowdSupply για να δείτε ζωντανά τον αριθμό των TinyPICO πουλήθηκαν. Μπορεί να ήταν δυνατό να επιτευχθεί απευθείας σε ένα ESP8266 ή ESP32, αλλά καθώς ανέλυε πολλά διαφορετικά σημεία δεδομένων σε πολλά διαφορετικά στοιχεία, έτσι θα ήταν περίπλοκο.

Κατέληξα να δημιουργήσω ένα έργο NodeJS και ανέλυσα τα δεδομένα χρησιμοποιώντας μια βιβλιοθήκη που ονομάζεται cheerio και λειτούργησε πολύ καλά. Φιλοξένησα αυτό το έργο σε διακομιστή cloud που είχα ήδη, αλλά θα μπορούσατε να εκτελέσετε αυτό το είδος έργου σε pi αν δεν είχατε κάτι τέτοιο.

Βήμα 6: Όρια χρήσης

Όρια χρήσης
Όρια χρήσης

Ένα πράγμα που θα μπορούσε ενδεχομένως να επηρεάσει όλες αυτές τις προσεγγίσεις είναι να χτυπήσει τα όρια χρήσης ιστότοπων. Σε τακτικά API, είναι συνήθως αρκετά καλά τεκμηριωμένο πόσα αιτήματα μπορείτε να κάνετε ανά λεπτό ή ανά ημέρα και μπορείτε να περιορίσετε τα αιτήματα έργων σας με βάση αυτό. Όταν κάνετε απόξεση, δεν ξέρετε ποια είναι αυτά τα όρια, οπότε κινδυνεύετε να τα χτυπήσετε και ενδεχομένως να μπλοκαριστείτε. Δεν μπορώ να δώσω καμία ακριβή συμβουλή για τον περιορισμό του, ώστε να παραμείνετε στα καλά βιβλία τους, αλλά θα πίστευα ότι οτιδήποτε κάτω από κάθε λεπτό θα ήταν πολύ συχνά, εκτός από περιπτώσεις όπως το kickstarter όπου φαίνεται να κάνουν αιτήματα κάθε λίγα δευτερόλεπτα οι ίδιοι.

Βήμα 7: Ευχαριστώ για την ανάγνωση

Ας ελπίσουμε ότι αυτό το βίντεο βοήθησε εάν ενδιαφέρεστε να αναλύσετε δεδομένα απευθείας από ιστοσελίδες στο ESP8266 ή στο ESP32. Έχετε άλλες ερωτήσεις σχετικά με το θέμα που δεν κάλυψα; Παρακαλώ ενημερώστε με στα παρακάτω σχόλια ή ελάτε μαζί μου και μια ομάδα άλλων δημιουργών στον διακομιστή μου Discord, όπου μπορούμε να συζητήσουμε αυτό το θέμα ή οποιοδήποτε άλλο σχετικό με τους κατασκευαστές που έχετε, οι άνθρωποι είναι πραγματικά εξυπηρετικοί εκεί, οπότε είναι ένα εξαιρετικό μέρος για να κολλήσετε έξω

Θα ήθελα επίσης να ευχαριστήσω πολύ τους Χορηγούς Github που με βοηθούν να υποστηρίξω αυτό που κάνω, το εκτιμώ πραγματικά. Εάν δεν γνωρίζετε, η Github ταιριάζει με χορηγίες για το πρώτο έτος, οπότε αν κάνετε χορηγία θα ταιριάξουν 100% για τους επόμενους μήνες.

Ευχαριστώ για την ανάγνωση!

Συνιστάται: