Saya akan memberi tahu Anda tentang bagaimana saya memungkinkan untuk menerima dan menampilkan informasi dari API
KudaGo publik di cermin Anda. Tentu saja, ini bukan tentang cermin yang sederhana, tetapi tentang cermin "pintar".
Apa itu cermin pintar?
Kemungkinan besar, banyak orang telah mendengar tentang platform modular
MagicMirror² , yang memungkinkan Anda untuk menyebarkan aplikasi pada Raspberry Pi yang dapat mengubah cermin untuk ruang masuk atau kamar mandi menjadi asisten pribadi Anda. Anda dapat menerapkan
ini atau
ini menggunakan apa yang disebut cermin "dua arah", monitor, lengan lurus, dan komputer mikro yang disebutkan di atas.
Magic in MagicMirror hanya dalam nama. Jika saya mengerti dengan benar, semua ini dikembangkan di
Electron , yang berarti bahwa Node.js. terlibat dalam masalah ini. "Aplikasi" menciptakan halaman html yang, ketika diluncurkan, terbuka di jendela browser, dan apa yang disebut modul sudah ditampilkan di sana, keduanya sudah diinstal sebelumnya (Jam, Kalender, Cuaca Saat Ini, Prakiraan Cuaca, Umpan Berita.), Dan
dikembangkan oleh komunitas . Dan ada yang cukup menarik (baik yang berguna dan
keras kepala yang tidak biasa), misalnya, berikut ini hanya beberapa dari lebih dari seratus modul:
Berguna
Mewah
Latar belakang
Tentang bagaimana saya mengumpulkan cermin, saya tidak akan melukis secara detail. Jika seseorang tertarik maka
Anda dapat membaca di sini . Jika Anda ingin membuat sendiri, maka pencarian Google sederhana akan menghasilkan puluhan contoh \ panduan \ manual. Saya ingin menunjukkan cara membuat modul untuk cermin semacam itu.
Saya penggemar berat menghadiri berbagai konser dan acara St. Petersburg. Tetapi kadang-kadang terjadi bahwa (bahkan dengan mempertimbangkan banyaknya iklan kontekstual, spam dan poster) saya belajar tentang beberapa peristiwa hampir satu atau dua hari sebelum mereka. Karena itu, saya selalu mencari cara untuk menyaring aliran informasi tentang mereka secara optimal. Aplikasi pada smartphone dengan fungsi yang sama tidak bertahan lama (lebih tepatnya, saya lupa tentang mereka). Semua poster memerlukan waktu dan perjalanan yang konstan dari pencarian "pilih 10 filter, dan tebak yang mana yang benar". Umpan media sosial umumnya berubah menjadi spam iklan. Dan kemudian muncul ide untuk mengimplementasikan "parser" yang secara berkala akan memilih informasi pada kriteria sendiri dan menampilkannya di suatu tempat.
Pengembangan modul Anda
Jika seseorang segera ingin melihat hasilnya, atau memasang modul pada "mirror", maka di sini ada
tautan ke repositori . Ada juga instruksi pemasangan.
Sebagai sumber informasi, layanan
kudago ternyata yang paling memadai. Tidak diperlukan pendaftaran. Metode waras. Data ringkas dalam jawaban. Ini bukan liputan yang aneh, termasuk, tidak hanya "trotoar kota" dan "non-karet", tetapi juga 9 kota besar Rusia sebagai tambahan.
Modul yang dikembangkan kami harus disimpan dalam
folder modules / modulename . Untuk membuat modul sederhana (seperti milik saya) kita perlu membuat dua file di folder ini:
- modulename / modulename.js adalah skrip dari modul utama.
- modulename / node_helper.js adalah "pembantu opsional" yang akan dimuat oleh skrip. Helper dan skrip modul dapat berkomunikasi satu sama lain menggunakan sistem soket terintegrasi.
Setelah bermain-main dengan
panduan dari pengembang MagicMirror , serta melihat solusi orang lain, saya mengunggah skrip untuk mendapatkan entri dari API kudago menggunakan XMLHttpRequest. Dan mengalami masalah permintaan lintas-domain. Saya bukan ahli javascript sama sekali (dan bahkan bukan pengembang). Yang saya mengerti adalah mengirim permintaan "mengeksekusi skrip di browser" dan mendapatkan respons dari kudago, saya tidak bisa berhasil. Inilah yang
belajar. Naskah menjelaskan kepada
sayaPermintaan lintas domain menjalani kontrol keamanan khusus, yang tujuannya adalah untuk mencegah peretas jahat menaklukkan Internet.
Serius. Pengembang standar telah memberikan semua hambatan sehingga "peretas jahat" tidak bisa, dengan menggunakan standar baru, melakukan sesuatu yang secara fundamental berbeda dari apa yang bisa ia lakukan sebelumnya dan, dengan demikian, "memecah" beberapa server yang menjalankan standar lama dan tidak mengharapkan sesuatu yang pada dasarnya baru.
Yah, tidak benar-benar apa yang saya inginkan. Saya tidak punya keinginan untuk memahami masalah javascript. Lagi pula, yang ada di tangan adalah Python yang akrab dan dapat diprediksi. Saya hanya akan mendapatkan informasi dari perpustakaan
permintaan , menulis hasilnya di json. Tetap hanya untuk memecahkan pertanyaan tentang bagaimana membuat kode Python dari js mengeksekusi.
Ternyata node_helper.js bermanfaat bagi saya! Saat memulai modul kami, Anda dapat menggunakan kemampuan
python-shell . Cukup tentukan path ke interpreter Python, path ke skrip, argumen dan nilainya. Dalam bentuk ini, kudago dengan ramah mengembalikan jawaban yang sukses kepada saya.
Kode panggilan skrip pythonkudagoGetData: function () {
Selain itu, hanya node_helper.js yang dapat membaca informasi dari file json (secara default, file tersebut akan terletak di jalur
kudago / events.json ) dengan data yang diunduh dari kudago. Kami menerapkan di dalamnya pembacaan yang sama dari file.
Kode untuk membaca informasi dari file Seperti yang sudah saya tulis, di MagicMirror semua modul berkomunikasi melalui sistem soket, jadi agar skrip Python kami dijalankan saat startup, tambahkan kode yang sesuai ke node_helper.js
Kode untuk memulai modul saat startup socketNotificationReceived: function (notification, payload) { if (notification === "START") { this.config = payload; this.kudagoGetData(); setInterval(() => { this.kudagoGetData(); }, this.config.updateInterval); } }
Semua parameter yang diperoleh dari
this.config adalah variabel yang telah ditentukan sebelumnya dalam file modul utama, atau yang ditentukan dalam config.js - file konfigurasi umum untuk semua modul MagicMirror.
Contoh konfigurasi untuk modul yang dibuat { module: 'MMM-KudaGo', disabled: false, position: 'bottom_bar', config: { location: "spb", categories: "concert", tags: " --,", days: 7 } }
Nah, di file utama modul
MMM-KudaGo.js kami ada parameter default, fungsi untuk menangani data acara (diambil dari file json), tanda-tanda untuk menggambar piring (dari mana orang yang tahu akan mengeluarkan darah dari mata saya, tapi saya di dalam tangki, hal utama bagi saya adalah berhasil). Karena kenyataan bahwa saya mengambil pekerjaan dengan API dalam file python, file .js tidak kelebihan beban dengan kode (tidak seperti kebanyakan modul lainnya), bersarang (atau apa namanya di sini?) Fungsi, loop dan mie lainnya.
Hasil
Tangkapan layar modul itu sendiri Ternyata untuk melaksanakan pencarian untuk satu atau lebih kategori peristiwa, pencarian dengan tag, mencari interval hari tertentu, dengan memperbarui pada interval yang ditentukan (Untuk daftar kategori dan tag yang lebih rinci, lihat
readme ). Dan tampilkan semuanya di layar, yang menunjukkan tempat, nama, tanggal dan harga, dalam bentuk yang dapat dibaca, dan tanpa membuang waktu untuk pencarian independen.
Tentu saja, Anda perlu hati-hati menonton beberapa kali applet kembali ke sana untuk memahami tag apa yang perlu Anda pasang sehingga tidak menunjukkan konser atau pertunjukan teater, tetapi misalnya kursus yoga atau festival gratis di kota Anda. Tetapi secara pribadi, kebutuhan saya sepenuhnya terpenuhi!
Saya harap Anda juga membuat dan membuat modul yang berguna untuk komunitas, yang Anda bagikan dengan orang lain di halaman khusus proyek. Ngomong-ngomong, jika Anda punya ide bagus, atau butuh sesuatu, maka tulis di komentar. Mungkin mendorong seseorang ke kreatif!