JavaScript Script erstellen -> Änderung der abrufenden Domain möglich?

Meteorologe

Ensign
Registriert
Aug. 2006
Beiträge
253
Hallo,

ich bitte zuerst einmal um Verzeihung für den unklaren Titel, den dieses Thema bekommen hat. Leider fiel mir nichts passendes ein. Nun zu meinem Anliegen:

Die Deutsche Bahn und andere Verkehrsunternehmen bieten eine Livemap an, auf der die aktuelle Position der Züge dargestellt werden. Mit der Zeit ist mir aufgefallen, dass sich die Aktualität der Daten anhand des Verkehrsunternehmens unterscheidet.

Leider ist meine Lieblingsseite (Livemap 2) sehr buggy geworden und fast nicht mehr vernünftig nutzbar.

Meine Frage ist nun, ob man die Domain, die in Livemap 1 automatisch abgerufen wird, in die bessere Livemap 2-Domain umändern kann, da beide URL identisch miteinander sind (außer die Domain)?


Konkret:
Livemap 1, welche ich nur als Grundlage verwenden möchte:
http://fahrinfo.vbb.de/bin/help.exe/dn?L=vs_mobilitymap&tpl=fullmap&tabApp=show

Diese holt die Daten von:
http://fahrinfo.vbb.de/bin/query.exe/dny?look_minx=12953019&look_maxx=13862137&look_miny=52410694&look_maxy=52629210&tpl=trains2json2&look_productclass=96&look_json=yes&performLocating=1&look_nv=zugposmode|2|interval|30000|intervalstep|2000|


Livemap 2, die nicht mehr astrein funktioniert
http://emma.hafas.de/bin/help.exe/dn?L=vs_livemap&tpl=fullscreenmap

Diese holt die Daten von:
http://emma.hafas.de/bin/query.exe/dny?look_minx=12953019&look_maxx=13862137&look_miny=52410694&look_maxy=52629210&tpl=trains2json2&look_productclass=96&look_json=yes&performLocating=1&look_nv=zugposmode|2|interval|30000|intervalstep|2000|


Es ist das gleiche Format und auch der gleiche Aufbau.

Kurz zusammen gefasst: Ich möchte gern das Layout von Livemap 1 verwenden, allerdings die Daten aus Livemap 2 holen.


Vielen Dank für die Hilfe.
 
Mh, das sieht mir ja nach einem interessanten Problem aus. Ich hab mir das mal angesehen, etwas gebastelt und dabei folgendes erreicht: Vorher und Nachher.

Wenn das bereits die Lösung zu deinem Problem ist - testen bzw. vergleichen konnte ich das nicht, da die von dir verlinkte "Livemap 2" bei mir gar nicht funktioniert - dann erkläre ich dir gerne, wie man das recht unkompliziert mit einem Chromium-basierten Browser (Chrome, Chromium, Opera, Vivaldi, etc), einer Erweiterung aus dem Google Chrome Store (Requestly) und zwei Minuten an Konfigurationsarbeit hinbiegen kann.
 
Hallo,

zuerst einmal VIELEN DANK (!) für deine Mühe und die Arbeit, die du rein gesteckt hast.

Ich glaube, du hast genau das umgesetzt, was ich mir gewünscht habe.

Requestly war mir bisher unbekannt. Danke für den Tipp. Sieht sehr nützlich aus. Ich habe mich bei diesem "Problem" hauptsächlich um die beiden Quelltexte gekümmert (Elemente von Livemap2 in Livemap1 eingefügt). An eine Erweiterung habe ich nicht nachgedacht, da ich dachte, es müsse direkt im Quelltext etwas geändert werden.

Wenn du mir die Erklärung zukommen lassen könntest bzw. in den Beitrag schreiben könntest, würde mich das total freuen.
 
Zuletzt bearbeitet:
Requestly ist eine Erweiterung, mit der man auf Basis selbst erstellter Regeln alle HTTP-Requests sowie deren Antworten umleiten/ändern oder blockieren kann. Dabei werden auch reguläre Ausdrücke unterstützt. Ich habe diese Lösung deswegen gewählt, weil sie recht unkompliziert zu verwenden ist, vor allem im Verglich zum notwendigen Aufwand der durch die Nutzung eines Userscriptes notwendig würde. Da Requestly auch den Import/Export von Regeln beherrscht, musst du nur den Inhalt des folgenden Code-Blocks in eine Textdatei speichern und die Datei dann über den blauen "Upload Rules" Knopf importieren.

Code:
[
  {
    "creationDate": 1462389287025,
    "description": "",
    "id": "Headers_1462389287025",
    "name": "Fahrinfo VBB Request Headers",
    "pairs": [
      {
        "header": "Referer",
        "source": {
          "key": "Url",
          "operator": "Contains",
          "value": "http://emma.hafas.de/bin/query.exe/dny?"
        },
        "target": "Request",
        "type": "Modify",
        "value": "http://emma.hafas.de/bin/help.exe/dn?L=vs_livemap&tpl=fullscreenmap"
      },
      {
        "header": "Access-Control-Allow-Origin",
        "source": {
          "key": "Url",
          "operator": "Contains",
          "value": "http://emma.hafas.de/bin/query.exe/dny?"
        },
        "target": "Response",
        "type": "Add",
        "value": "http://fahrinfo.vbb.de"
      }
    ],
    "ruleType": "Headers",
    "status": "Active"
  },
  {
    "creationDate": 1462388906765,
    "description": "",
    "id": "Replace_1462388906765",
    "name": "Fahrinfo VBB Umleitung",
    "pairs": [
      {
        "from": "http://fahrinfo.vbb.de/bin/query.exe/dny?",
        "status": "Inactive",
        "to": "http://emma.hafas.de/bin/query.exe/dny?"
      }
    ],
    "ruleType": "Replace",
    "status": "Active"
  }
]

Sollte dies nicht funktionieren habe ich zwei Screenshots gemacht wie die Regeln bei mir aussehen. Es gibt eine Replace Host Regel, welche die Anfrage auf die von dir gewünschte Domain umleitet, und eine Modify Headers Regel, die notwendig ist damit der Server die Anfrage akzeptiert und die Daten anschließend vom Client genutzt werden können.
 
Ein großes Dankeschön. :daumen:
Vor allem die Erklärung, welche Methoden Requestly anwendet, fand ich sehr interessant, da ich über Requestly im Internet nichts spannendes heraus finden konnte.


Der Import hat super funktioniert.

Leider konnte ich die Funktion auf die schnelle nicht ausprobieren bzw. genau analysieren, ob nun genau das angewendet wurde, was Requestly hätte tun sollen (Arbeit ruft leider :grr:).

Genügt nun nur noch der Aufruf der fahrinfo.vbb.de Livemap-Homepage, damit die korrekten Daten vom emma geladen werden? Falls ja, -> Einfacher geht's ja gar nicht mehr. :)

Ich werde mich morgen intensiv mit Requestly beschäftigen und mich auch melden, ob Requestly das richtige tut. :D


P.S. Noch einmal vielen Dank
 
Meteorologe schrieb:
Genügt nun nur noch der Aufruf der fahrinfo.vbb.de Livemap-Homepage, damit die korrekten Daten vom emma geladen werden? Falls ja, -> Einfacher geht's ja gar nicht mehr. :)

Ich werde mich morgen intensiv mit Requestly beschäftigen und mich auch melden, ob Requestly das richtige tut. :D
Die Webseite und der darin laufende JavaScript-Code glaubt, dass die Daten von der Domain fahrinfo.vbb.de abgerufen wurden, dank Requestly kommen sie aber in Wirklichkeit von emma.hafas.de. Wenn ich nicht irgend etwas vergessen habe, dann müsste das so funktionieren, ohne dass man am Inhalt bzw den Skripten der Webseite etwas ändern müsste. Das funktioniert natürlich nur, wenn die unterschiedlichen Datensätze im selben Format vorliegen, sonst wäre es sehr viel komplizierter.
 
Nun zu meiner versprochenen Rückmeldung:

Es funktioniert genau so, wie ich mir es vorgestellt habe :daumen:

Ich hätte eine kleine Zusatzaufgabe, die allerdings nicht wichtig ist. Falls zu umständlich, ist es auch nicht schlimm.

Folgender "Wunsch":
In den Livemaps-URL's taucht der Parameter "&look_productclass=96" auf, je nachdem, welche Züge man aktiviert hat. Da sich die S-Bahnen und ICE's vertauscht haben, ist der Parameter productclass nutzlos. Kann man den Parameter "&look_productclass=" raus löschen (bevorzugt) oder die Productclassnummer ändern?
 
Zuletzt bearbeitet:
Das sollte nicht allzu kompliziert sein. Ich habe es zwar nicht an der Livemap getestet, aber es müsste ausreichen, wenn du die Replace Host Regel um eine zweite Ersetzung erweiterst. Wie das in Requestly funktioniert habe ich dir anhand eines Screenshots in drei Schritten erklärt. Zum Löschen kannst du das zweite Feld auch leer lassen. Falls dies nicht funktioniert, sehe ich es mir morgen noch mal genauer an.
 
:daumen: Hat wieder funktioniert.

Ich werde mich nun intensiv mit Requestly beschäftigen, da anscheinend Requestly einige Features anbietet, die genau zu meinen "Spielereien" passen.

Vielen Dank für deine Hilfe.
 
Hallo,

ich hoffe, ich störe nicht erneut. ;)

Ich habe mich mit den von dir erstellten Regeln in Requestly auseinander gesetzt und einige lustige Zug-Livemaps erstellt.

Die Regel habe ich nun an folgender Map ausprobiert:
http://www.expressbussguiden.se/bin/help.exe/en?L=vs_livemap&tpl=fullscreenmap

Leider erscheint laufend folgendes Dialogfenster (welches man nur mit OK bestätigen kann):
New version of livemap available... site reloads now

Kann man die Regel eventuell auf dieser Homepage nicht anwenden?
 
Leider besitzt Requestly dafür (noch) keine Einstellungsmöglichkeiten, denn alle Regeln werden prinzipiell auf jeden HTTP-Request angewendet.

Es ist zwar möglich, einzelne Domains auf eine Blackliste zu setzen, diese Funktion ist dem normalen Nutzer aber nicht zugänglich, weil man dafür den Code der Erweiterung selbst bearbeiten muss. Gedacht ist das derzeit nämlich nur dafür, dass man die Requestly-Konfiguration auf web.requestly.in nicht versehentlich durch eigene Regeln unbenutzbar macht.

Genauer gesagt geht es dabei um die Datei main.js in den Zeilen 133-135. Nachdem du die Datei gefunden hast, könntest du sie wie folgt anpassen, damit die von dir verlinkte Domain von Requestly unangetastet bleibt. Aber Achtung: mit jedem Update der Erweiterung muss dieser Schritt wiederholt werden. Da Chromium-Browser Erweiterungen automatisch und ohne Hinweis updaten, ist das nicht gerade die beste Lösung.

Code:
RQ.BLACK_LIST_DOMAINS = [
  'requestly.in',
  'expressbussguiden.se'
];

Du kannst im Github-Projekt des Entwicklers ein Ticket öffnen und um Einbindung dieser oder einer ähnlichen Funktionalität bitten.

Alternativ könnte man auch versuchen, die problematische Regel (welche ist das denn?) durch einen regulären Ausdruck zu ersetzen, der auch die gewünschte Domain prüft, um auf Drittseiten keine Probleme zu bereiten.
 
Schade, dass Requestly diese Funktion noch nicht unterstützt. Den Vorschlag, den Entwickler in Github anzuschreiben ist eine hervorragende Idee. Danke für den Link.
 
Nachdem ich mich in letzter Zeit sehr erfolgreich mit Requestly auseinander gesetzt habe (noch einmal vielen Dank für den Tipp), wollte ich einen nächsten Schritt versuchen. Ist die Anwendung der Regelungen auch für Mobilgeräte (iPad, iPhone) möglich? Leider habe ich keine passende App oder ein passendes Feature finden können.
 
Ich hatte zuerst an alternative Browser mit Unterstützung für Erweiterungen gedacht, aber dann ist mir schnell klar geworden, dass dies etwas ist, dessen Unterstützung man vielerorts vergeblich sucht. Von allen gängigen Browser-Apps unterstützt lediglich Firefox vollständig die Installation und Nutzung von Erweiterungen aus dem Mozilla Store, allerdings ist dies der Android-Version vorenthalten. Es gibt andere Browser, wie Dolphin oder Kitt, die grundsätzlich die Installation von Erweiterungen unterstützen, aber jegliche Implementierung der Schnittstellen entspricht entweder nicht der vollständigen Chromium Extension API oder baut darauf gar nicht erst auf. In diesem Zusammenhang ist es wirklich kurios, dass man Chrome-Erweiterungen unter Android zuerst auf dem Firefox-Browser nutzen wird können, da diese Funktionalität für den mobilen Chrome nie wirklich ein Thema war. Aber das schweift vom Thema ab ...

Mit iOS kenne ich mich recht wenig aus, weil ich noch nie ein iPhone oder iPad besessen habe und meine Nutzungserlebnisse immer nur kurzfristiger Natur waren. Auf Grund des geschlossenen Systems von Apple darf man aber wohl davon ausgehen, dass es keine solche Lösung gibt, die direkt auf dem Gerät läuft. Da es keine Browser mit ausreichend WebExtensions-Kompatibilität gibt, müsste so etwas über eine Dritt-App laufen. Apple ist bei der Freigabe von Apps in ihrem Store sehr vorsichtig, daher kann ich mir kaum vorstellen, dass man dort eine App findet, die als lokaler HTTP-Proxy fungiert und somit den gesamten Netzwerkverkehr des Smartphones/Tablets mitlesen könnte.

Die Sache mit dem Proxy wäre aber der richtige Weg, nur müsste dieser außerhalb des iOS-Gerätes stehen. Wenn du zu Hause bist, könntest du auf einem PC oder Server im lokalen Netzwerk einen HTTP-Proxy einrichten, der dazu fähig ist, Requests zu modifizieren. Derer gibt es bestimmt mehrere, aber wegen dem Fokus auf die Entwicklung wären Fiddler oder Charles prädestiniert dafür. Eine wirklich gute Lösung ist das aber auch nicht, weil dein gesamter Netzwerkverkehr des Apple Gerätes dann über einen PC/Server läuft und unterwegs sowieso nicht funktionieren würde.
 
Vielen Dank für die ausführliche Antwort. Die Idee "Proxy" klingt sehr vernünftig. Ich werde mich mal an diese Methode ran setzen.

Ich habe in meinem Beitrag einen Fehler gemacht :$ -> Ich habe nur iPhone und iPad aufgezählt. Ich besitze noch ein Androidtablet. Kein hochwertiges, aber ein Samsung Galaxy Tablet, welches eventuell weiter helfen könnte.

Die derzeit auf chip.de beworbene Methode mit der Firefox-Erweiterung "Chrome Store Foxified" hat bei mir leider nicht funktioniert, da ich bei Aufruf der Seite weiterhin die Fehlermeldung erhalte, dass die Homepage und die Addons nicht für mein Betriebssystem bestimmt wären. Leider habe ich keine Anleitung gefunden, die sich speziell auf das Thema "Chrome Addons für Firefox Android" beziehen. Kennst du eine Anleitung, wie man Chrome Addoons (zum Beispiel Requestly :D ) in die Firefox Android App hinein zaubert?

Danke für deine Mühe.
 
Meteorologe schrieb:
Ich habe in meinem Beitrag einen Fehler gemacht :$ -> Ich habe nur iPhone und iPad aufgezählt. Ich besitze noch ein Androidtablet. Kein hochwertiges, aber ein Samsung Galaxy Tablet, welches eventuell weiter helfen könnte.
Dann dürfte sich die Sache etwas einfacher gestalten. Es gibt für den Firefox eine ähnliche Erweiterung. Getestet habe ich das nie selbst und wie ich gerade sehe hat der Entwickler aus ideologischen Gründen die Arbeit daran eingestellt. moz-rewrite oder "Rewrite HTTP Headers (JS)", wie die Erweiterung offiziell im Mozilla Store heißt, ist ein Github Projekt, das ich mir mal näher ansehen wollte und nie die Gelegenheit dazu hatte. Die Konfiguration dürfte sich schwieriger und aufwändiger gestalten weil es keine bequeme Oberfläche für den Nutzer gibt, dank der Möglichkeit, JavaScript-Code in den Regeln einzusetzen, ist moz-rewrite aber noch umfangreicher als Requestly.

Meteorologe schrieb:
Die derzeit auf chip.de beworbene Methode mit der Firefox-Erweiterung "Chrome Store Foxified" hat bei mir leider nicht funktioniert, da ich bei Aufruf der Seite weiterhin die Fehlermeldung erhalte, dass die Homepage und die Addons nicht für mein Betriebssystem bestimmt wären. Leider habe ich keine Anleitung gefunden, die sich speziell auf das Thema "Chrome Addons für Firefox Android" beziehen. Kennst du eine Anleitung, wie man Chrome Addoons (zum Beispiel Requestly :D ) in die Firefox Android App hinein zaubert?
Ich weiß nicht ob du den Chip-Artikel nicht aufmerksam genug gelesen hast oder das dort wirklich nicht deutlich hervorgehoben wurde, aber WebExtensions wird es im Firefox erst ab Version 48 geben. Aktuell ist derzeit 46, während die Veröffentlichung der Version 48 für den 2. August geplant ist.

Mozilla betreibt im Prinzip vier Kanäle für ihren Browser; da gibt es zum einen die stabile Version, dann eine Beta, dann Aurora und abschließend noch die Nightlies (von Mozilla Central genannt), bei denen es sich um täglich kompilierte Versionen des aktuellen Codes handelt. Dabei gibt es keine wesentlichen Unterschiede für einzelne Betriebssysteme, im Fall von Android ist jedoch zu beachten, dass im Google Play Store lediglich die stabile Version 46 und die Beta Version 47 verfügbar sind. Andere Versionen muss man manuell suchen und per sideloading installieren. Ich will nicht zu tief greifen, aber es gibt Unterschiede sowohl zwischen dem im Android-Gerät verbauten Chip (x86/Intel oder ARM) als auch zwischen der verwendeten Android-Version im Fall von ARM-Chips (API 9 entspricht >= Android 2.3; API 15 entspricht >= Android 4.0.3). Beim Download aus dem Play Store wird diese Auswahl für dich automatisch getroffen und du lädst/installierst automatisch die richtige .apk Datei.

Wenn du dir diese Mühe sparen möchtest, kannst du aber auch ein paar Tage warten, denn am 7. Juni wird die nächste Firefox Version erscheinen und dann sollte die Beta im Shop in Version 48 verfügbar sein, die Requestly unterstützt. Davon gehe ich jedenfalls stark aus, denn in den Changelogs zu Aurora 48.0a2 für Android steht "WebExtensions support for Extensions".
 
Ich habe ein kleines Umsetzungsproblem bei Requestly:

Ich möchte eine abrufende URL verändern. Ich bin erstaunlich weit gekommen, nur folgendes Problem besteht nun:

Ein Teil der URL ist:"&z=10&x=536&y=331"
Ich möchte sie zu folgender umändern: "/10/536/331.png"

ich bin so weit gekommen, dass ich folgende TeilURL erhalte: "/10/536/331"

Das Problem ist, dass hinter der 331 ein".png" fehlt. Das komplizierte ist nun, dass die hintere Zahl nicht immer die 331 ist, sondern eine zufällige Zahl im dreistelligen Bereich.
Wie kann man dieses Problem beheben? Ist es überhaupt möglich, bei einer unklaren Ausgabe, Requestly zu sagen, dass er bei diesem Teil der URL ein png hinten dran stellen soll?

Natürlich kann ich jede dreistellige Zahl mit .png versehen, nur
1. wäre ich wohl Tage beschäftigt und 2. würde die ganze Seite kaputt gehen, da ich mir vorstellen kann, dass irgendwo eine weitere Seite abgerufen wird, die eine dreistellige Zahl in der URL besitzt, hinter der ich kein .png benötige.


Vielen Dank für deine Mühe.
 
Zuletzt bearbeitet:
Guten Tag,

ich bin leider erst jetzt auf diesen Beitrag gestoßen und hoffe, dass hier noch mit gelesen wird.

Leider bietet unsere regionale Auskunftsseite noch keine Live-Karte an.

Ist es möglich über Requestly die Daten von "http://www.insa.de/bin/query.exe/dn" zu nutzen?
Meine bisherigen Versuche blieben erfolglos und die VBB-Karte leer.

Vielen Dank
 
Hallo
nachdem das vor ein paar Jahren mit der Chrome Erweiterung "Requestly" so hervorragend funktioniert hat, es die hinterlegten Seiten aber nicht mehr gibt, habe ich mich auf die Suche nach einer Alternative gemacht und eine gefunden.
http://bvg-apps.hafas.de/bin/help.exe/dn?L=vs_livefahrplan&tpl=livefahrplan

Ich habe in den Requestly Regeln nichts geändert, außer die URL fahrinfo.vbb.de in bvg-apps.hafas.de abgeändert

Ich erhalte folgende Ausgabe vom Dev-Tool in Chrome (siehe Bild).
Ist das "Cors Error" interessant, oder kann dies ignoriert werden und es müsste eigentlich klappen?
Als Info beim Cors Error steht: "Provisional headers are show"
Denn ich erhalte leider keine Ausgabe, sondern nur unten rechts auf der Seite die Dauerinfo "...aktualisieren"

Habt ihr eine Idee, wie man das Problem beheben könnte? Oder liegt es an der Homepage, die eine Umleitung nicht akzeptiert?
 

Anhänge

  • Bildschirmfoto 2022-09-15 um 11.52.51.png
    Bildschirmfoto 2022-09-15 um 11.52.51.png
    120 KB · Aufrufe: 116
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben