Daftar Isi:

Mengikis Data Dengan ESP8266/ESP32: 7 Langkah
Mengikis Data Dengan ESP8266/ESP32: 7 Langkah

Video: Mengikis Data Dengan ESP8266/ESP32: 7 Langkah

Video: Mengikis Data Dengan ESP8266/ESP32: 7 Langkah
Video: Tutorial IDE Arduino: Mengirim data ESP32 atau ESP8266 ke Firebase dengan mudah 2024, Juli
Anonim
Mengikis Data Dengan ESP8266/ESP32
Mengikis Data Dengan ESP8266/ESP32
Mengikis Data Dengan ESP8266/ESP32
Mengikis Data Dengan ESP8266/ESP32

Pernahkah Anda ingin mendapatkan data untuk proyek Arduino Anda, tetapi tidak ada API publik untuk itu? Atau dalam kasus seperti API Instagram di mana proses penyiapannya sangat tidak nyaman?

Dalam Instruksi ini kita akan melihat 2 opsi berbeda untuk menggores data dari situs web untuk proyek ESP8266 atau ESP32 Anda.

Langkah 1: Lihat Videonya

Image
Image

Saya telah membuat video yang mencakup hal yang sama dengan instruksi ini, jadi jika Anda tertarik, silakan lihat!

Langkah 2: Sebelum Kita Mulai

Sebelum kita mulai
Sebelum kita mulai
Sebelum kita mulai
Sebelum kita mulai

Perlu diketahui bahwa data yang akan saya bicarakan tentang pengikisan adalah data publik dan tidak memerlukan otentikasi apa pun. Jadi katakan misalnya, jumlah pelanggan YouTube saya yang sebenarnya hanya tersedia untuk saya di dalam studio pembuat konten, jadi perangkat harus membuat permintaan yang diautentikasi saat saya memuatnya. Jenis permintaan ini akan berada di luar cakupan video ini. Tes cepat untuk memeriksa apakah itu tercakup adalah mencoba memuat halaman di jendela penyamaran karena itu tidak akan secara otomatis memasukkan Anda ke situs mana pun.

Untuk teknik yang tercakup dalam Instructable ini kita harus menggunakan beberapa alat pengembang yang tersedia di browser. Saya akan mendemonstrasikannya dengan Firefox, tetapi saya tahu pasti Chrome memiliki alat serupa dan saya yakin browser lain juga memilikinya.

Langkah 3: API Non Publik (Spoiler: Instructables Memilikinya!)

Cara pertama yang akan kita lihat adalah menggunakan API non-publik. Ini tidak akan selalu tersedia, tetapi jika ini pasti metode yang harus Anda gunakan. Apa yang saya sebut "API non-publik" pada dasarnya adalah di mana sebuah situs menggunakan API yang tidak diiklankan di situs web mereka di belakang layar untuk mengambil data yang ingin kami dapatkan.

Ada beberapa alasan mengapa ini akan menjadi pilihan yang lebih disukai untuk digunakan.

  1. Keuntungan terbesar adalah bahwa tidak mungkin untuk mengubah sesering halaman web, jika Anda mengikis data langsung dari halaman web HTML, setiap kali mereka membuat perubahan ke situs, parsing Anda mungkin rusak.
  2. Biasanya lebih hemat data. Saat Anda menggores halaman web, Anda pada dasarnya mengunduh seluruh halaman HTML untuk mengekstrak potongan info darinya, API hanya akan mengembalikan titik data sehingga biasanya akan menjadi permintaan yang jauh lebih kecil.
  3. Biasanya lebih mudah untuk diurai. Biasanya API mengembalikan data dalam format JSON yang mudah diurai, ini terutama benar jika Anda mengekstrak beberapa bagian data.

Pertama-tama kita harus mencari tahu apakah halaman web menggunakan pengaturan seperti ini. Petunjuk terbesar adalah jika situs memperbarui nilai secara real-time seperti yang dilakukan di Kickstarter, tetapi meskipun tidak, masih ada harapan bahwa itu mungkin menggunakan pengaturan ini. Instructables menggunakan API non-publik untuk mengambil beberapa data untuk situs mereka meskipun tidak menyegarkan secara real time.

Untuk memeriksa apakah situs menggunakan pengaturan ini, masuk ke mode pengembang browser Anda, saya menemukan cara termudah untuk melakukan ini adalah klik kanan pada halaman dan pilih "inspect element".

Anda kemudian ingin pergi ke tab jaringan, ini akan menampilkan permintaan yang dibuat halaman web di latar belakang, perhatikan bahwa Anda mungkin perlu memuat ulang halaman setelah membuka tab ini karena hanya akan menampilkan permintaan yang dibuat mulai sekarang.

Anda biasanya ingin mencari yang bertipe "json". Mungkin ada banyak permintaan di sini, jadi mungkin membantu untuk mengurutkan berdasarkan jenis. Anda dapat melihatnya sangat jelas di halaman kampanye kickstarter bahwa ia menggunakan pengaturan ini karena Anda dapat melihat permintaan konstan dibuat ke titik akhir "stats.json". Pada halaman penulis Instructables (mis. milik saya adalah "https://www.instructables.com/member/witnessmenow/"), mereka tidak membuat permintaan konstan, tetapi Anda dapat melihat permintaan tersembunyi di antara yang lain ke titik akhir "showAuthorStats".

Untuk mengetahui informasi lebih lanjut tentang permintaan ini, Anda dapat mengkliknya. Anda harus bisa mendapatkan semua informasi yang Anda butuhkan dari sini untuk mereplikasi permintaan. Tetapi sebelum Anda melakukannya, Anda ingin memeriksa ulang terlebih dahulu apakah ia memiliki data yang Anda inginkan. Klik, pada tab respons dan lihat apakah datanya ada di sana.

Jika memang berisi data yang Anda butuhkan, Anda sudah siap! Anda kemudian dapat menggunakan pendekatan yang sama yang dibahas dalam video saya sebelumnya tentang menghubungkan ke API. Versi singkatnya adalah untuk memastikan permintaan berfungsi seperti yang diharapkan pada alat seperti Postman terlebih dahulu dan kemudian gunakan proyek contoh ini untuk menguji apakah itu berfungsi di perangkat Anda.

Untuk mem-parsing data JSON, saya akan merekomendasikan menggunakan ArudinoJSON di sebagian besar skenario, jika ini adalah sesuatu yang Anda ingin instruksikan, beri tahu saya!

Langkah 4: Mengikis Data Secara Langsung

Mengikis Data Secara Langsung
Mengikis Data Secara Langsung
Mengikis Data Secara Langsung
Mengikis Data Secara Langsung
Mengikis Data Secara Langsung
Mengikis Data Secara Langsung

Selanjutnya kita akan melihat scraping data langsung dari halaman web, ini meminta halaman web lengkap pada perangkat dan mem-parsing data yang kita inginkan. Saya sudah menyebutkan kelebihan yang dimiliki API non-publik dibandingkan metode ini, tetapi terkadang kebutuhan harus!

Satu hal yang penting untuk diperhatikan di sini, jika Anda terbiasa dengan pengembangan web, Anda mungkin terbiasa menggunakan fitur inspect element untuk mengetahui informasi tentang elemen tertentu dan bagaimana strukturnya. Ini harus dihindari untuk pendekatan ini, karena halaman web modern biasanya berubah secara dinamis menggunakan Javascript, yang tidak akan terjadi pada perangkat Anda. Kode HTML yang tersedia di perangkat Anda hanya akan menjadi halaman web asli yang diunduh. Contoh yang baik dari ini adalah halaman TeamTrees, jumlah donasi saat ini dimulai dari 0 dan kemudian dimuat ke halaman dengan animasi ini, tetapi tidak seperti dua contoh yang telah kita lihat sebelumnya, ini tidak memuat data di latar belakang, jadi data yang benar harus berada di tempat lain.

Untuk melihat kode halaman web asli, Anda dapat mengklik kanan halaman tersebut dan memilih “View Source”. Anda kemudian ingin mencari data tertentu yang Anda inginkan, jadi dalam contoh TeamTrees ketika kami mencari jumlah donasi saat ini, kami dapat melihat jumlah sebenarnya disimpan dalam properti data-count dari elemen count, di sinilah kita perlu mengikis data dari.

Anda perlu menemukan string pencarian yang mengarahkan Anda ke data Anda, Jauh lebih mudah untuk mengetahui hal ini sebelum mengkodekan perangkat. Untuk contoh ini, mencari "data-count\"" membawa saya langsung ke data yang kami inginkan, yang sempurna. Kami tidak perlu khawatir bahwa itu juga cocok di tempat lain di halaman, karena itu akan mencapai yang teratas terlebih dahulu. Jika Anda memang perlu menekan yang ke-3, Anda bisa memprogramnya untuk mengabaikan 2 yang pertama yang Anda tekan.

Jika kita melihat contoh TeamTrees, seperti sebelumnya kita telah melewati header respons dan sekarang melihat isi respons (yang merupakan halaman web). Apa yang datang kembali dari klien adalah aliran data. Kami tidak peduli tentang apa pun hingga permintaan pencarian kami, jadi kami melakukan client.find. Jika memang menemukan kueri pencarian, itu akan mengembalikan true dan itu akan memindahkan aliran ke akhir kueri. Hal berikutnya yang tersedia dari aliran adalah data yang kami cari, tetapi dalam kasus ini kami tidak yakin berapa lama datanya, tetapi kami tahu itu semua informasi antara tempat kami saat ini di aliran dan koma terbalik berikutnya. Kita dapat mencapai ini dengan menggunakan "client.readBytesUntil" yang melakukan apa yang dikatakannya, ia membaca byte ke dalam buffer hingga mencapai kueri yang ditentukan. Pastikan buffer yang Anda baca cukup besar untuk menampung semua data, saya pikir kami cukup aman di sini dengan 32!

Jika Anda memiliki semua data yang Anda butuhkan, maka Anda tidak perlu membaca data lagi. Saya tidak menutup koneksi di sini karena sepertinya tidak menyebabkan masalah pada ESP8266, tampaknya menyebabkan masalah dengan ESP32, jadi saya menambahkan client.stop(). Sejujurnya, saya tidak yakin mengapa saya meletakkannya di atas metode ini, saya pikir akan lebih masuk akal untuk menutupnya setelah Anda memiliki data yang Anda inginkan.

Langkah 5: Mengikis Data Menggunakan Server Eksternal:

Mengikis Data Menggunakan Server Eksternal
Mengikis Data Menggunakan Server Eksternal
Mengikis Data Menggunakan Server Eksternal
Mengikis Data Menggunakan Server Eksternal

Hanya satu topik lain untuk disentuh, ada alat yang jauh lebih baik untuk menguraikan pada lingkungan berbasis komputer biasa seperti NodeJS daripada pada pengontrol mikro, jadi terkadang masuk akal untuk membuat layanan yang mengambil data dari halaman web dan menyediakan layanan yang lebih sederhana. titik akhir untuk ESP8266 atau ESP32 Anda. Salah satu contohnya adalah menggores halaman CrowdSupply untuk mendapatkan penghitungan langsung berapa banyak TinyPICO yang terjual. Mungkin saja untuk mencapainya secara langsung pada ESP8266 atau ESP32, tetapi karena mem-parsing beberapa titik data yang berbeda pada beberapa elemen yang berbeda, jadi itu akan menjadi rumit.

Saya akhirnya membuat proyek NodeJS dan menguraikan data menggunakan perpustakaan bernama cheerio dan itu berhasil dengan sangat baik. Saya meng-host proyek ini di server cloud yang sudah saya miliki, tetapi Anda dapat menjalankan proyek semacam ini di pi jika Anda tidak memiliki pengaturan seperti itu.

Langkah 6: Batas Penggunaan

Batas Penggunaan
Batas Penggunaan

Satu hal yang berpotensi memengaruhi semua pendekatan ini adalah mencapai batas penggunaan situs. Dalam API biasa, biasanya didokumentasikan dengan cukup baik berapa banyak permintaan yang dapat Anda buat per menit atau per hari dan Anda dapat membatasi permintaan proyek Anda berdasarkan ini. Saat Anda menggores, Anda tidak tahu batasan ini sehingga Anda berisiko terkena dan berpotensi diblokir. Saya tidak bisa memberikan saran yang tepat untuk membatasinya sehingga Anda tetap berada di buku bagus mereka, tetapi saya akan berpikir apa pun di bawah setiap menit akan terlalu sering, selain mungkin kasus seperti kickstarter di mana mereka tampaknya membuat permintaan setiap beberapa detik sendiri.

Langkah 7: Terima kasih telah Membaca

Semoga video ini membantu jika Anda tertarik untuk mengurai data langsung dari halaman web di ESP8266 atau ESP32 Anda. Apakah Anda memiliki pertanyaan lain tentang topik yang tidak saya bahas? Tolong beri tahu saya di komentar di bawah, atau bergabunglah dengan saya dan banyak pembuat lain di server Discord saya, di mana kita dapat mendiskusikan topik ini atau pembuat terkait lainnya yang Anda miliki, orang-orang sangat membantu di sana jadi ini adalah tempat yang bagus untuk hang keluar

Saya juga ingin mengucapkan terima kasih yang sebesar-besarnya kepada Sponsor Github saya yang membantu mendukung apa yang saya lakukan, saya sangat menghargainya. Jika Anda tidak tahu, Github mencocokkan sponsor untuk tahun pertama, jadi jika Anda membuat sponsor, mereka akan mencocokkannya 100% untuk beberapa bulan ke depan.

Terima kasih sudah membaca!

Direkomendasikan: