Wie ich meinen Yandex.Transport mit Fahrplänen und Bussen gemacht habe



Gepostet von Mikhail Aksenov, .NET-Entwickler, DataArt


Wie alles begann


Im Herbst 2014 gab es gute Nachrichten, dass Yandex.Transport in Woronesch gestartet wurde, was die Bewegung von Bussen und Oberleitungsbussen zeigt. Es war sehr cool, direkt an der Bushaltestelle einen Fahrplan zu öffnen und herauszufinden, dass Ihr Bus in 5 Minuten funktioniert.

Aber nach ein paar Monaten verlief alles nach einem völlig vorhersehbaren Szenario. Da der gesamte Transport in Woronesch vom Wagen zum Kleinbus in bar erfolgt, ist jeder Fahrer daran interessiert, so viele Passagiere wie möglich zu transportieren. Infolgedessen organisieren sie Rennen untereinander.

Die Fahrer nutzten den neuen Service, um einander auf der Karte zu folgen und die Konkurrenten auf der Straße zu überholen und zu schneiden. Einige begannen, ihre Einnahmen zu senken, sie begannen sich bei den Eigentümern der Strecken zu beschweren, und sie gingen zu Leuten, die Geräte mit GLONASS und GPS verkauften und Daten über die Bewegungen von Autos an Yandex schickten. Auf Wunsch der Flottenbesitzer hörten sie auf, Informationen zu senden, und die Busse verschwanden sofort von der Karte. Jetzt gibt es ein bisschen mehr davon, aber das ist immer noch viel weniger als in der Realität.



Für diejenigen, die zu faul sind, um weiterzulesen, schlage ich einen Videobericht zu diesem Thema vor:

Im Übrigen werde ich das Projekt in Form eines Textes beschreiben.

Woher bekommen Sie die Daten?


Gleichzeitig gibt es in Woronesch einen Ort, an dem alle Daten gesammelt werden - das Zentrum für die Organisation des Straßenverkehrs (DPC). Sie haben eine große und umfangreiche Webanwendung auf ihrer Website mit nicht nachhaltigem JavaScript und anderen Artefakten, während alles darin POST-Anforderungen enthält und nichts zwischengespeichert wird. Über diese Website selbst können Sie ganz einfach einen Dienst einrichten, der Daten über die Bewegung von Bussen sammelt.

Es gab eine Option, mit der Sie auf der Karte stöbern und herausfinden können, wann der Bus kommt und was er sein wird. Vorausgesetzt, Sie kommen ungefähr zum Stillstand (± 50 Meter). Im Menü konnten Sie eine Liste von Routen öffnen und genau sehen, wohin die Busse fahren, aber es gab ein Problem - sie fuhren seltsam. Entlang der Koltsovskaya, einer Straße in der Mitte, in der Sie nicht besonders schnell fahren können, fuhr der Bus beispielsweise mit einer Geschwindigkeit von etwa 200 km / h vorwärts und rückwärts.


Warum Python?


Ich habe Python gewählt, weil es cool ist, die Batterien gebündelt sind und so weiter. Und 3.6, weil es Formatierungen für String-Literale gibt, tippen, das ist alles. Schauen wir uns an, was ich im Grunde genommen verwendet habe:

  • Viele beklagten sich darüber, dass es sehr schwierig sei, den genauen Namen eines Stopps mit allen möglichen Satzzeichen zu fahren. Dann erkannte ich die Möglichkeit der Fuzzy-Suche und erstellte den ersten Unit-Test dafür.
  • Das gesamte System wird auf Heroku gehostet. Es ist kostenlos, da ich keine Datenbank habe. Ich hoffe, dass ich mit der Datenbank des Rechenzentrums zurechtkomme. Ich stimmte der Verwendung mit dem Center zu, als mir klar wurde, dass die Daten, die ich über die Weboberfläche sammle, nicht ausreichen.
  • Das Hosting erfolgt über den Tornado-Webserver. Ich denke, es ist jedem bekannt, der in Python auf Webanfragen gestoßen ist.
  • Ich brauchte das Pytz-Paket, weil sich der Heroku-Server in einer anderen Zeitzone befindet und die Daten ohne Angabe einer Zeitzone zu mir kommen. Deshalb habe ich mich selbst um die Lokalisierung gekümmert.
  • Um den Bot zu erstellen, habe ich die empfohlene Python-Telegramm-Bot- Bibliothek verwendet. Die Dokumentation hier ist völlig ausreichend, und im Allgemeinen erfüllt die Bibliothek die Mindestanforderungen an tragfähige Produkte. Anfänglich war das gesamte Projekt ein Telegramm-Bot, der als Antwort auf das Senden Ihres Standorts einen Busfahrplan sendete.
  • Firebird, eine ehemalige Interbase, ist eine Open-Source-Datenbank, mit der viele von Ihnen gearbeitet haben. Natürlich ist es nicht so cool wie das gleiche PostgreSQL, aber für eine sehr große Anzahl von Abfragen reicht es aus. In unserem Fall wird nicht mehr benötigt.
  • Cachetools ist ein sehr einfaches Modul, mit dem Sie Berechnungen zwischenspeichern können. Hier geht es natürlich nicht um das Zwischenspeichern oder Zwischenspeichern von Webseiten, sondern um Fälle, in denen Sie sich für lange Abfragen ein Memo merken müssen. Nehmen Sie es einfach, fügen Sie den entsprechenden Dekorateur hinzu - und alles funktioniert. Der Cache hat verschiedene Optionen, ich verwende die TTL-Version, die Daten für die angegebene Zeit speichert, da ich weiß, dass die Daten nicht öfter als in bestimmten Intervallen (in meinem Fall - 30 Sekunden) aktualisiert werden.


Bot-Funktionalität


  • / Name der nächsten Bushaltestelle - voraussichtliche Ankunftszeit;
  • / letzte durch Leerzeichen getrennte Routennummern - letzte Haltestellen;
  • Standort senden - die erwartete Ankunftszeit für die nächsten drei Haltestellen;
  • Freier Eintritt - Routennummern und Entfernung zu Bussen (beim Senden des Standorts).


Ich habe versucht, die Befehle vollständig genug zu beschreiben, damit die Leute nicht fragen, wie sie verwendet werden sollen. Grundsätzlich gibt es zwei grundlegende Befehle: nextbus, wenn Sie den Namen der Haltestelle schreiben und den Standort senden.

Site-Funktionalität


Ich habe die Website so minimalistisch wie möglich gestaltet. Von den Bibliotheken von Drittanbietern habe ich nur zwei verwendet, um das Abrufen und Versprechen zu unterstützen, da ältere Versionen der vorinstallierten Browser in Telefonen nicht ohne sie auskommen können. Wenn Sie diese Methoden nicht unterstützen, erhalten Sie ziemlich viele Rückrufnudeln für die Anforderungen selbst. Mit Fetch sieht alles eleganter aus.



Eigentlich besteht die Funktion hier aus 4 Punkten:

  1. Ankunft Sie können nur die Haltestelle beobachten. Wenn Sie auf die Schaltfläche klicken (es könnte sich übrigens lohnen, mehr zu tun - ich werde darüber nachdenken!), Senden Sie Ihren Standort, das System sucht nach den drei Haltestellen in Ihrer Nähe und zeigt Informationen dazu an. Sie können den Namen der Haltestelle eingeben und Informationen dazu abrufen. Da Sie kaum alle 20-30 Busse benötigen, die an der Bushaltestelle ankommen können, können Sie sie nach Route filtern.
  2. Busse Die zweite Seite enthält Informationen zu Bussen. Dies ist auf eine andere Geschichte zurückzuführen, die mich zu diesem Projekt geführt hat. Eines schönen Tages vergaß ich den Hut im Bus, rief den Kontrollraum an und erklärte, wo es passiert war. Der Dispatcher schlug vor, dass ich meinen Bus in der Mitte nehme, wo er zurückkehren und sich am Terminal umdrehen werde. Ich erinnerte mich, dass ich ein Login und ein Passwort vom Center for Traffic Management-System habe, aber es stellte sich heraus, dass ich den Standort des benötigten Autos über die Weboberfläche immer noch nicht verfolgen kann. Ich gab den Hut zurück, aber mit großen Schwierigkeiten.
    Ich dachte, einen Bus zu finden könnte viel einfacher sein. Ich habe die Routennummer geschrieben und das System zeigt Ihnen die Autos auf der Linie, ihren aktuellen Standort und die Zeit, zu der sie vorbeifuhren. Und selbst wenn Sie die Routennummer kennen, aber die Busnummer kennen (dies passiert auch), können Sie sie trotzdem finden.
  3. Karte. Karte auf der Website ohne Animation. Hier können Sie Busse aus der Liste auswählen oder Nummern manuell eingeben, Sie können sie filtern. Auf der Karte können bis zu 600 Busse angezeigt werden, obwohl es nach 20 schwierig wird, etwas in der Mitte zu finden, einfach weil die Routen alle hier konzentriert sind. Daher ist es besser, die Suche auf strengere Parameter zu beschränken.
  4. Über das Projekt. Jetzt hat das Projekt eine Website, es gibt einen Telegramm-Bot, Gruppen in sozialen Netzwerken.


***.
Glücklicherweise ist Python eine Sprache mit sofort einsatzbereiten Batterien. Für einfache Dinge müssen Sie nicht einmal etwas herunterladen. Lesen Sie einfach die Dokumentation sorgfältig durch.

Natürlich können solche Dienstleistungen auch für andere Städte erbracht werden, in einigen funktionieren sie bereits. Viel hängt vom lokalen Rechenzentrum ab, an einigen Orten, zum Beispiel in St. Petersburg, gibt es sogar eine API für Entwickler. Aber das Wichtigste sind die Stadtbewohner, die ihre Stadt zum Besseren verändern wollen.

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


All Articles