Konzerte und Events KudaGo in deinem Spiegel

Ich erzähle Ihnen, wie ich es ermöglicht habe, Informationen von der öffentlichen KudaGo- API auf Ihrem Spiegel zu empfangen und anzuzeigen. Dabei geht es natürlich nicht um einen einfachen, sondern um einen „intelligenten“ Spiegel.

Was ist ein intelligenter Spiegel?


Höchstwahrscheinlich haben viele von der modularen Plattform MagicMirror² gehört , mit der Sie eine Anwendung auf Raspberry Pi bereitstellen können, die einen Spiegel für eine Eingangshalle oder ein Badezimmer in Ihren persönlichen Assistenten verwandeln kann. Sie können dies oder das mit dem sogenannten "Zweiwege" -Spiegel, dem Monitor, den geraden Armen und dem oben genannten Mikrocomputer implementieren.

Magie in MagicMirror ist nur im Namen. Wenn ich es richtig verstanden habe, wurde dies alles auf Electron entwickelt , was bedeutet, dass Node.js. in die Angelegenheit involviert ist. Die "Anwendung" erstellt eine HTML-Seite, die beim Start in einem Browserfenster geöffnet wird. Dort werden bereits sogenannte Module angezeigt, die beide vorinstalliert (Uhr, Kalender, aktuelles Wetter, Wettervorhersage, Newsfeed) und von der Community entwickelt wurden . Und es gibt genug interessante (sowohl nützliche als auch hartnäckige ungewöhnliche), zum Beispiel hier nur einige von mehr als hundert Modulen:

Nützlich



Lust



Hintergrund


Wie ich meinen Spiegel gesammelt habe, werde ich nicht im Detail malen. Wenn sich jemand dafür interessiert , können Sie hier lesen . Wenn Sie Ihre eigenen erstellen möchten, gibt eine einfache Google-Suche Dutzende von Beispielen \ Anleitungen \ Handbüchern zurück. Ich möchte zeigen, wie man ein Modul für einen solchen Spiegel herstellt.

Ich bin ein großer Fan von verschiedenen Konzerten und Veranstaltungen in St. Petersburg. Aber manchmal kommt es vor, dass ich (selbst unter Berücksichtigung der Fülle an kontextbezogener Werbung, Spam und Postern) fast ein oder zwei Tage vor ihnen etwas über einige Ereignisse erfahre. Deshalb habe ich immer nach einer Möglichkeit gesucht, den Informationsfluss über sie optimal zu filtern. Anwendungen auf einem Smartphone mit ähnlichen Funktionen verweilten nicht lange (genauer gesagt, ich habe sie vergessen). Alle Poster benötigten Zeit und ständigen Ablauf der Quest „Wähle 10 Filter und rate, welcher richtig ist“. Social-Media-Feeds wurden im Allgemeinen zu Werbe-Spam. Und dann kam die Idee auf die Idee, einen „Parser“ zu implementieren, der regelmäßig Informationen nach eigenen Kriterien auswählt und irgendwo anzeigt.

Entwicklung Ihres Moduls


Wenn jemand das Ergebnis sofort sehen oder das Modul auf einem „Spiegel“ installieren möchte, finden Sie hier den Link zum Repository . Es gibt auch Installationsanweisungen.

Als Informationsquelle erwies sich der Kudago- Service als am besten geeignet. Keine Registrierung erforderlich. Vernünftige Methoden. Prägnante Daten in der Antwort. Es ist keine seltsame Berichterstattung, es umfasst nicht nur "City Curb" und "Non-Rubber", sondern auch 9 große russische Städte.

Unser entwickeltes Modul sollte im Ordner modules / modulename gespeichert werden. Um ein einfaches Modul (wie meins) zu erstellen, müssen wir zwei Dateien in diesem Ordner erstellen:

  • modulename / modulename.js ist das Skript des Hauptmoduls.
  • modulename / node_helper.js ist der "optionale Helfer", der vom Skript geladen wird. Der Helfer und das Modul-Skript können über ein integriertes Socket-System miteinander kommunizieren.

Nachdem ich an einem Leitfaden des MagicMirror-Entwicklers herumgebastelt und mir die Lösungen anderer angesehen hatte, habe ich ein Skript hochgeladen, um mithilfe von XMLHttpRequest Einträge von der Kudago-API abzurufen. Und stieß auf das Problem domänenübergreifender Abfragen. Ich bin überhaupt kein Javascript-Experte (und nicht einmal ein Entwickler). Alles, was ich verstanden habe, war, eine Anfrage "Ausführen eines Skripts in einem Browser" zu senden und eine Antwort von kudago zu erhalten. Es wird mir nicht gelingen. Hier ist, was mir learn.javascript erklärt hat

Domainübergreifende Anfragen unterliegen einer speziellen Sicherheitskontrolle, mit der verhindert werden soll, dass böse Hacker das Internet erobern.

Im Ernst. Die Entwickler des Standards stellten alle Hindernisse zur Verfügung, damit der „böse Hacker“ mit dem neuen Standard nichts grundlegend anderes tun konnte als zuvor und so einen Server mit dem alten Standard „kaputt machen“ konnte und nichts grundlegend Neues erwarten.

Nun, nicht wirklich das, was ich wollte. Ich hatte keine Lust, Javascript-Probleme zu verstehen. Immerhin war der vertraute und vorhersehbare Python zur Hand. Ich werde nur Informationen aus der Anforderungsbibliothek erhalten und das Ergebnis in json schreiben. Es bleibt nur die Frage zu lösen, wie Python-Code aus js ausgeführt werden kann.

Es stellt sich heraus, dass node_helper.js für mich nützlich ist! Beim Starten unseres Moduls können Sie die Funktionen von Python-Shell nutzen . Geben Sie einfach den Pfad zum Python-Interpreter, den Pfad zum Skript, die Argumente und deren Werte an. In dieser Form hat Kudago mir freundlicherweise eine erfolgreiche Antwort zurückgegeben.

Python-Skriptaufrufcode
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; }); } 


Darüber hinaus kann nur node_helper.js Informationen aus der json-Datei (standardmäßig befindet sich die Datei auf dem Pfad kudago / events.json ) mit den von kudago heruntergeladenen Daten lesen. Wir implementieren darin das gleiche Lesen aus der Datei.

Code zum Lesen von Informationen aus einer Datei
 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); }); } 


Wie ich bereits geschrieben habe, kommunizieren in MagicMirror alle Module über das Socket-System. Damit unser Python-Skript beim Start ausgeführt werden kann, fügen Sie den entsprechenden Code zu node_helper.js hinzu

Code zum Starten des Moduls beim Start
 socketNotificationReceived: function (notification, payload) { if (notification === "START") { this.config = payload; this.kudagoGetData(); setInterval(() => { this.kudagoGetData(); }, this.config.updateInterval); } } 


Alle Parameter, die aus this.config abgerufen werden, sind entweder die vordefinierten Variablen in der Hauptmoduldatei oder die in config.js - der allgemeinen Konfigurationsdatei für alle MagicMirror-Module - angegebenen.

Beispielkonfiguration für das erstellte Modul
 { module: 'MMM-KudaGo', disabled: false, position: 'bottom_bar', config: { location: "spb", categories: "concert", tags: "  --,", days: 7 } } 


Nun, in der Hauptdatei unseres MMM-KudaGo.js- Moduls gibt es Standardparameter, Funktionen zum Behandeln von Ereignisdaten (aus einer JSON-Datei), Zeichen zum Zeichnen einer Platte (von denen wahrscheinlich diejenigen, die wissen, Blut aus den Augen bluten, aber ich bin im Tank, die Hauptsache für mich ist gearbeitet). Aufgrund der Tatsache, dass ich mit der API in Python-Dateien gearbeitet habe, sind .js-Dateien nicht mit Code überladen (im Gegensatz zu den meisten anderen Modulen), verschachtelt (oder wie heißen sie hier?), Funktionen, Schleifen und anderen Nudeln.

Ergebnis


Screenshot des Moduls selbst
Bild

Screenshot spiegeln
Bild

Es stellte sich heraus, eine Suche nach einer oder mehreren Kategorien von Ereignissen zu implementieren, nach Tags zu suchen, nach einem bestimmten Intervall von Tagen zu suchen und in festgelegten Intervallen zu aktualisieren (eine detailliertere Liste von Kategorien und Tags finden Sie in der Readme-Datei ). Und zeigen Sie alles auf dem Bildschirm an und geben Sie den Ort, den Namen, das Datum und den Preis in lesbarer Form an, ohne Zeit für eine unabhängige Suche zu verschwenden.

Natürlich müssen Sie mehrmals genau beobachten, was das Applet dort zurückgibt, um zu verstehen, welche Tags Sie einfügen müssen, damit keine Konzerte oder Theateraufführungen angezeigt werden, sondern beispielsweise Yoga-Kurse oder kostenlose Festivals in Ihrer Stadt. Aber persönlich sind meine Bedürfnisse voll befriedigt!

Ich hoffe, Sie haben auch ein Modul erstellt, das für die Community nützlich ist und das Sie auf einer speziellen Seite des Projekts mit anderen teilen. Übrigens, wenn Sie gute Ideen haben oder etwas brauchen, dann schreiben Sie in die Kommentare. Vielleicht jemanden zum Creative drängen!

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


All Articles