wenn einem Programmierer beim Abruf von pass.telekom.de langweilig wird …

Auf pass.telekom.de kann man abfragen, wieviel von seinem Monats-Übertragungsvolumen bei Telekom/Mobilfunk bereits verbraucht ist.

Ein Programmierer macht das allerdings in einer Kommandozeile (bzw. in einer “Shell”) wie folgt:

$ curl http://pass.telekom.de

Nun, die Server-Software checkt aber, welcher Browser gerade als Client fungiert, und wenn curl sich nicht “verkleidet”, dann meutert “der Server”, also “verkleiden” wir uns als ein gebräuchlicher Browser:

$ curl --user-agent 'Mozilla/5.0' http://pass.telekom.de

Heraus kommt ein Schwall von HTML, das nicht für den menschlichen Betrachter aufbereitet ist. Und eigentlich interessiert den Programmierer doch eh genau sein Verbrauch. Und weil sauberes HTML auch XML ist, kann er einen hübschen XPath-Ausdruck anwenden, um an seinen gewünschten Wert zu kommen:

$ xml sel -t -v '//div[@class = "barTextBelow color_default"]/span'

Nun, er schickt den Output der Web-Seiten-Abfrage (“curl …”) in diese xml-Utility – er nennt das in seinem Denglisch “Pipen”:

$ curl --user-agent 'Mozilla/5.0' http://pass.telekom.de |
  xml sel -t -v '//div[@class = "barTextBelow color_default"]/span'

Bei mir kam da gerade “905,68 MB” heraus.

Die o.a. xml-Utility heißt übrigens “XMLStarlet Toolkit: Command line utilities for XML“.

Tja, wie Daniel hier beisteuerte, kann man auch diese URL abfragen, und bekommt dann JSON:

“jq .” macht einen Pretty-Print auf das JSON:

$ jq . pass.telekom-de--status.json 
{
 "nextUpdate": 300,
 "subscriptions": ["speedon","tns"],
 "title": "SpeedOn",
 "passName": "Your Telekom data plan",
 "passStage": 1,
 "validityPeriod": 2,
 "initialVolume": 2147483648,
 "initialVolumeStr": "2 GB",
 "usedVolume": 761470212,
 "usedPercentage": 36,
 "usedVolumeStr": "726.19 MB",
 "usedAt": 1462968935000,
 "remainingSeconds": 1751820,
 "remainingTimeStr": "20 days 6 hours",
 "downSpeed": 150000,
 "downSpeedStr": "150 Mbit/s",
 "upSpeed": 10000,
 "upSpeedStr": "10 Mbit/s"
}

Aber man kann auch genau den Key “usedVolumeStr” abfragen:

$ jq .usedVolumeStr pass.telekom-de--status.json 
"726.19 MB"

Und so geht es in einem Rutsch:

$ curl --user-agent 'Mozilla/5.0' http://pass.telekom.de/api/service/generic/v1/status | jq .usedVolumeStr
"726.19 MB"

Und jq gibt es hier:

2 comments

    1. echt stark!
      über so etwas muss man immer erstmal stolpern!
      und wie extrahiert man GENAU DEN EINEN WERT aus JSON?
      na???
      -> “jq”
      und das kanntest du auch schon? 😉

This site uses Akismet to reduce spam. Learn how your comment data is processed.