Konser dan acara KudaGo di cermin Anda

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 saya

Permintaan 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 python
kudagoGetData: function () { //call python script for collecting events from KudaGo api self = this; var options = { pythonPath: this.config.pythonPath, scriptPath: './modules/MMM-KudaGo', mode: 'json', args: [ "--location", this.config.location, "--days", this.config.days, "--categories", this.config.categories, "--tags", this.config.tags, ] }; pyshell.PythonShell.run('KudaGo.py', options, function (err) { if (err) throw err; }); } 


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
 readData: function () { //read a file with events fs.readFile("./modules/MMM-KudaGo/kudago/events.json", "utf8", (err, data) => { if (err) throw err; this.sendSocketNotification("DATA", data); }); } 


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
gambar

Tangkapan layar cermin
gambar

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!

Source: https://habr.com/ru/post/id473344/


All Articles