mcommon
Anmeldungsdatum: 3. Februar 2014
Beiträge: 76
Wohnort: Mönchengladbach
|
Hallo! Ich bastele an einem Skript, der soll im Tray ein (Un)wetter Status anzeigen. Dabei beziehe ich die Daten von der Seite von DWD: http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html Ich lade die Tabelle mit und parse dann mit sed und anderen Kommandozeilentools. Es klappt schon eigentlich gut, bis auf eine Kleinigkeit. Für Applet benutze ich YAD: yad und zwar die Anleitung unter dem Punkt "Menüdialog". Applet bindet sich in Tray ein und wenn ich Mauszeiger draufschiebe wird die gewünschte Information angezeigt. Das Problem ist, dass angezeigter Text teilweise verschoben ist und fließendes Lesen verhindert wird. Dabei wenn ich den Text aus YAD-Menüdialog "zurückparse", der Text sieht ordentlich aus. Die Frage ist also, wie ich den Text ordentlich formatieren soll, damit er im YAD Menüdialog richtig angezeigt wird.
- Bilder
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5459
|
YAD verwendet offensichtlich keine Monospace Schriftart, also eine Schriftart, bei der alle Zeichen die gleiche Breite haben. Probier mal yad --fontname="Monospace 14" .
|
mcommon
(Themenstarter)
Anmeldungsdatum: 3. Februar 2014
Beiträge: 76
Wohnort: Mönchengladbach
|
Mit Schrift(um)definition hat es nicht geholfen. Für nähere Infos vllt. dieser Paste: YAD skript.
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5459
|
Anscheinend gibt's da Probleme damit: https://sourceforge.net/p/yad-dialog/tickets/252/ https://sourceforge.net/p/yad-dialog/tickets/251/ Probier mal die zwei Variaten:
Oder fuer den Text:
| <span color="red" font="Courier 20" > text</span>
|
|
mcommon
(Themenstarter)
Anmeldungsdatum: 3. Februar 2014
Beiträge: 76
Wohnort: Mönchengladbach
|
@sebix! Die erste Option hat nichts gebracht. Die zweite Option ist wahrscheinlich Dialog-Option und nicht für Formatieren Tooltips geeignet.
|
mcommon
(Themenstarter)
Anmeldungsdatum: 3. Februar 2014
Beiträge: 76
Wohnort: Mönchengladbach
|
Wahrscheinlich geht es mit dem zweiten Tipp. Ich muß es noch ein bisschen mit Syntaxis zu kämpfen.. Edit: es geht mit Tipp 2 von @sebix:
| echo tooltip:'<span font="Ubuntu Mono 13">Ihr Text</span\>' >&3
|
Dabei sollte man beachten, Anführungszeichen bei echo weglassen. Mit Schriftgröße "13" wird die Formatierung gerade noch nicht verzerrt. Danke!
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
So etwas ähnliches habe ich mir vorzeiten mal für den aktuellen Benzinpreis, mit zenity gebaut. Die Formatierung habe ich dabei mit eingefügten TABs zurecht gerückt (die ich statt der statt der Blank-Serien eingebaut habe). Das müsste eigentlich auch mit Yad gehen ... Zum "ernten" der Daten scheint mir übrigens ein Textbrowser nicht optimal, weil dabei die Kennzeichnung der HTML-Tags flöten geht. Das zerreißt die Tabellenspalten ziemlich, obwohl sie in der HTML- Tabelle hübsch zusammen stehen: | <h2>Mönchengladbach</h2>
<table><colgroup><col class="firstColumn"</col><col class="colorColumn"></col><col class="colorColumn"></col><col class="colorColumn"></col>
<thead><tr><th>Schlagzeile</th><th>Gültig von</th><th>Gültig bis</th><th>Beschreibung</th></tr></thead>
<tr><td>Amtliche WARNUNG vor DAUERREGEN</td><td>So, 26. Jun, 20:00 Uhr</td><td>Mo, 27. Jun, 12:00 Uhr</td><td>Es tritt Dauerregen auf. Dabei werden Niederschlagsmengen zwischen 25 l/m² und 35 l/m² erwartet.</td></tr>
</table>
|
Da erscheint mir ein Tag-basierter Parser viel sinnvoller. (sowas wie hxselect oder xidel oder sowas) Edit: Mit xidel kannst Du den passenden Tabellenausschnitt z.B. für Mönchengladbach auswählen mit
| xidel http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html --printed-node-format=html -e "//table[following::h2[contains(.,'Mönchengladbach')]]"
|
und wenn Du nur die Warntexte haben willst, kannst Du auch die direkt aus den HTML- Knoten herausfiltern: track@track:~$ xidel -q http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//table[following::h2[contains(.,'Mönchengladbach')]]//td"
Amtliche WARNUNG vor DAUERREGEN
So, 26. Jun, 18:00 Uhr
Mo, 27. Jun, 09:00 Uhr
Es tritt Dauerregen auf. Dabei werden Niederschlagsmengen bis 30 l/m² erwartet. Damit wird auch das Filtern ganz einfach: track@track:~$ xidel -q http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//table[following::h2[contains(.,'Mönchengladbach')]]//td" \
| sed 's/^$/- keine Warnungen -/; 1s/^/Mönchengladbach:\t/; 2{s/^/\t\t\t/; N; s/\n/ - /}'
Mönchengladbach: Amtliche WARNUNG vor DAUERREGEN
So, 26. Jun, 18:00 Uhr - Mo, 27. Jun, 09:00 Uhr
Es tritt Dauerregen auf. Dabei werden Niederschlagsmengen bis 30 l/m² erwartet.
LG, track
|
mcommon
(Themenstarter)
Anmeldungsdatum: 3. Februar 2014
Beiträge: 76
Wohnort: Mönchengladbach
|
@track! Ich wundere mich, wie dein Vorschlag super passt! Vielen Dank!
|
mcommon
(Themenstarter)
Anmeldungsdatum: 3. Februar 2014
Beiträge: 76
Wohnort: Mönchengladbach
|
Ich bin einbisschen verzweifelt.. Wenn jetzt ein solches Befehl ausrufe:
| xidel -s http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//table[following::h2[contains(.,'Stadt Leverkusen')]]//td"
|
gibt xidel ca. 100 Einträge für Stadt Leverkusen, alles wiederholt. Auch habe ich Probleme, wenn ich "Mönchengladbach" eintrage (oder "Stadt Mönchengladbach"). Whrscheinlich gibt es da Probleme mit Umlauten.
|
mcommon
(Themenstarter)
Anmeldungsdatum: 3. Februar 2014
Beiträge: 76
Wohnort: Mönchengladbach
|
Was xidel betrifft ist es vllt. wegen Mißkonfiguration dieser Webseite, die ich abfrage. Darum bin ich auf wget ausgewichen und mache die Zusammenstellung mit sed und php. links2 macht auch ewig download von dieser Webseite.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
mcommon schrieb: ... gibt xidel ca. 100 Einträge für Stadt Leverkusen, alles wiederholt.
Nee, stimmt nicht. Es sind alle möglichen Warnungen, die auf der Seite stehen. Ich hatte den XPath- Ausdruck nur mit der heißen Nadel gestrickt, das war der Fehler ! ... also jetzt noch einmal, und diesmal sauber: 😉 (heute Nacht gibt's grad kein M'gladbach, da nehmen wir die "mündung". – hat auch 'nen Umlaut drin) 1) Wir müssen nach der Überschrift suchen: track@track:~$ xidel -q http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html --printed-node-format=html -e "//h2[contains(.,'münd')]"
<h2>Elbe-/Wesermündung</h2>
2) Dann brauchen wir davon den Nachfolgeknoten, und zwar einen beliebigen, aber davon nur den ersten [1]: track@track:~$ xidel -q http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html --printed-node-format=html -e "//h2[contains(.,'münd')]/following::*[1]"
<table><colgroup><col class="firstColumn" </col=""><col class="colorColumn"><col class="colorColumn"><col class="colorColumn"></colgroup><thead><tr><th>Schlagzeile</th><th>Gültig von</th><th>Gültig bis</th><th>Beschreibung</th></tr></thead><tbody><tr><td>Amtliche Warnung des Seewetterdienstes Hamburg vor WIND</td><td>Fr, 01. Jul, 22:06 Uhr</td><td></td><td>Südwest bis West 5 bis 6, dabei Böen von 7 Beaufort.</td></tr></tbody></table> Wenn wir hier die [1] weglassen, schmeißt er uns den Schirm voll, mit allen (!) Knoten, die danach kommen. 3) Wir wollen ja nicht den ganzen Knoten, mit allem drin, sondern nur die einzelnen Tabellenspalten darunter. Die wählen wir aus, egal wo sie in dem Teilbäumchen stehen: (→ das ist das //td) track@track:~$ xidel -q http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html --printed-node-format=html -e "//h2[contains(.,'münd')]/following::*[1]//td"
<td>Amtliche Warnung des Seewetterdienstes Hamburg vor WIND</td>
<td>Fr, 01. Jul, 22:06 Uhr</td>
<td></td>
<td>Südwest bis West 5 bis 6, dabei Böen von 7 Beaufort.</td> Du siehst, dass die 3. Spalte leer ist: das "gültig bis" fehlt hier zufällig. 4) Wenn wir das XPath-Bäumchen in Nr. 1 angucken, sehen wir den Pfad: <table>...<tbody><tr><td> und genau so können wir ihn natürlich auch ansprechen: track@track:~$ xidel -q http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html --printed-node-format=html -e "//h2[contains(.,'münd')]/following::table[1]/tbody/tr/td"
<td>Amtliche Warnung des Seewetterdienstes Hamburg vor WIND</td>
<td>Fr, 01. Jul, 22:06 Uhr</td>
<td></td>
<td>Südwest bis West 5 bis 6, dabei Böen von 7 Beaufort.</td>
5) und schließlich lassen wir die Knotendarstellung weg, dann gibt xidel nur den reinen Text aus: track@track:~$ xidel -q http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//h2[contains(.,'münd')]/following::*[1]//td"
Amtliche Warnung des Seewetterdienstes Hamburg vor WIND
Fr, 01. Jul, 22:06 Uhr
Südwest bis West 5 bis 6, dabei Böen von 7 Beaufort. Hier habe ich aus Bequemlichkeit wieder die Kurzform von 3) benutzt. Das mal so ein bisschen als Erklärbär ... Eine ausführlichere Erklärung gibt's hier im Xpath-Tutorium. LG, track
p.s.: - wenn wir den Text in der Überschrift exakt kennen, können wir den auch einfach direkt vergleichen:
track@track:~$ xidel -q http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//h2[.='Elbe-/Wesermündung']/following::*[1]//td"
Amtliche Warnung des Seewetterdienstes Hamburg vor WIND
Fr, 01. Jul, 22:06 Uhr
Südwest bis West 5 bis 6, dabei Böen von 7 Beaufort.
|
mcommon
(Themenstarter)
Anmeldungsdatum: 3. Februar 2014
Beiträge: 76
Wohnort: Mönchengladbach
|
Ich benutze aktuelle Version von xidel (Juni 2016). Du benutzt anscheinend die ältere Version. Das sehe ich an Benutzung -q-Option. Die ist schon veraltet, neu ist -s(silent). Wahrscheinlich darum haben wir verschiedene Ergebnisse. Bei mir funktioniert xidel mit Umlauten nicht. Er findet nicht den Pattern (probier mal). Zweitens gibt es Probleme mit der Webseite. Die funktioniert (wahrscheinlich) nicht sehr gut. Nicht alle Programme kooperieren gut mit dieser Webseite. Z.B. gab es Probleme mit xidel (mehrere Treffer aufeinander, nicht immer reproduzierbar). Links2 hängt z.B. beim Download von dieser Webseite manchmal auf. Darum bin ich zur Lösung mit wget gekommen, funktioniert gut. Ich starte wget mit Optionen:
Deine Erläuterungen finde ich sehr interessant, vielen Dank! Ich bin aber (noch) nicht so fortgeschritten, um alles zu verstehen, muß mich noch weiterbilden.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Tatsächlich habe ich die Version 0.8.4 in Gebrauch, das stimmt. Jetzt habe ich mir natürlich gleich mal die aktuelle V. 0.9.4 gezogen und ausprobiert. Tatsächlich kommt er mit Umlauten nicht direkt klar, sondern man muss sie ihm in HTML-Entitäten/Codierung reichen ... 😕 Oder man nimmt contains() und lässt den Umlaut weg. Dann geht es damit aber auch: track@track:~$ xidel -q http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//h2[.='Elbe-/Wesermündung']/following::*[1]//td"
Amtliche Warnung des Seewetterdienstes Hamburg vor WIND
Sa, 02. Jul, 12:58 Uhr
West bis Südwest 5 bis 6, dabei Böen von 7 Beaufort, zeitweise Gewitter.
track@track:~$ xidel_0.9.4 -s http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//h2[.='Elbe-/Wesermündung']/following::*[1]//td"
Amtliche Warnung des Seewetterdienstes Hamburg vor WIND
Sa, 02. Jul, 12:58 Uhr
West bis Südwest 5 bis 6, dabei Böen von 7 Beaufort, zeitweise Gewitter.
track@track:~$ xidel_0.9.4 -s http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//h2[contains(.,'Elbe-/Weserm')]/following::*[1]//td"
Amtliche Warnung des Seewetterdienstes Hamburg vor WIND
Sa, 02. Jul, 12:58 Uhr
West bis Südwest 5 bis 6, dabei Böen von 7 Beaufort, zeitweise Gewitter. Es ist also keine Frage des XPath-Ausdrucks. Auch bei mir lädt die Seite mitunter etwas langsam, von daher ist wget als "Sauggerät" sicherlich eine gute Idee. Du kannst das direkt in eine Pipe füttern, mit xidel filtern, und gleich auch noch hxunent dahinter. Dann hast Du auch wieder richtige Umlaute: track@track:~$ wget -q -t 4 -T 15 -O - http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html | xidel_0.9.4 -s - -e "//h2[contains(.,'Elbe-/Weserm')]/following::*[1]//td" | hxunent
Amtliche Warnung des Seewetterdienstes Hamburg vor WIND
Sa, 02. Jul, 12:58 Uhr
West bis Südwest 5 bis 6, dabei Böen von 7 Beaufort, zeitweise Gewitter. Oder Du gehst den pragmatischen Weg, und ziehst Dir die alte xidel - Version, die aber richtig funktioniert ... 😉 LG, track p.s.: ich habe gleich mal eine Bugmeldung an Benito geschickt. Dann weiß er wenigstens Bescheid.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Inzwischen hat Benito geantwortet, und er hat einen guten Tip: ... da habe ich wohl einen Seiteneffekt nicht beachtet. Ich wollte nur unnötige Zeichensatzumwandlungen abschalten Aber jetzt braucht man die --output-encoding utf8 Option
Das heißt, mit dieser Option kann man das alte Verhalten wiederherstellen: xidel_0.9.4 -s --output-encoding utf8 http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//h2[contains(.,'Wesermündung')]/following::*[1]//td" (im Moment gibt's grad keine Warnungen, aber ich habe letzte Nacht getestet: es geht) Ok, ich find's blöd, wenn sich solche Optionen von einer Version zur nächsten ändern. Aber da sind wir in Sachen Stabilität in der *nix- Welt sicherlich verwöhnt ... LG, track
Edit: jetzt noch einmal getestet, unter dem Aspekt der Kompatibilität: (Wieder mal der Treppenwitz der Geschichte: die "starken Gewitter", die laut DWD jetzt im Augenblick gerade bei uns toben, sind nirgends zu sehen, Republikweit nicht. - 😀 😀 )
track@track:~$ xidel --output-encoding utf8 http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//h2[contains(.,'Börde')]/following::*[1]//td" 2> /dev/null
Amtliche WARNUNG vor STARKEM GEWITTER
Di, 05. Jul, 12:13 Uhr
Di, 05. Jul, 13:30 Uhr
Von Westen ziehen Gewitter auf. Dabei gibt es Sturmböen mit Geschwindigkeiten um 75 km/h (21m/s, 41kn, Bft 9) sowie Starkregen mit Niederschlagsmengen um 15 l/m² pro Stunde.
track@track:~$ xidel_0.9.4 --output-encoding utf8 http://www.dwd.de/DE/wetter/warnungen/warntabelle_node.html -e "//h2[contains(.,'Börde')]/following::*[1]//td" 2> /dev/null
Amtliche WARNUNG vor STARKEM GEWITTER
Di, 05. Jul, 12:13 Uhr
Di, 05. Jul, 13:30 Uhr
Von Westen ziehen Gewitter auf. Dabei gibt es Sturmböen mit Geschwindigkeiten um 75 km/h (21m/s, 41kn, Bft 9) sowie Starkregen mit Niederschlagsmengen um 15 l/m² pro Stunde. Das Blöde an solchen "giftigen" Optionen (-q vs. -s) ist, dass sie einem das Skript sprengen, wenn zufällig das "falsche" xidel installiert ist. Aber mit dem Würgaround nach /dev/null bekommt man es in den Griff. Dann ist auch xidel versionsstabil, sonst leider nicht.
|