gc – ein Kommandozeilen-Interface für (Teile von) Google calculator

Kürzlich stellte ich fest, daß die Suchvorschläge von Google, die in der Suchleiste von Internet Explorer oder Firefox erscheinen, den Google calculator mit benutzen:

Das Ergebnis einer Berechnung durch Googles Suchvorschläge

Also habe ich Fiddler angeworfen, um zu schauen, wo die Anfragen für solche Vorschläge hingehen und fand folgende URL (für die Anfrage 1+1):

http://sugges­tqueries.google­.com/complete/se­arch?output=fi­refox&client=I­E8&hl=en&qu=1%2B1

Die Antwort auf diese Anfrage war ein wenig JSON:

[„1+1“,
 [„= 2“,
  „1+1 канал“,
  „1+1 0“,„1+1 tv“,
  „1+1 internet“,
  „1+1 hosting“,
  „1+1.ua“,
  „1+1 ukraine“,
  „1+1.com“,
  „1+1 webmail“,
  „1+1 2 proof“
  ]
 ]

Ich habe das hier mal ein wenig aufgehübscht, eigentlich kommt es in einer langen Zeile. Wie man sehen kann, sind das im Wesentlichen zwei geschachtelte Arrays. Das erste Element des äußeren ist die Suchanfrage und das innere enthält die Vorschläge. Wenn die Vorschläge ein Ergebnis einer Berechnung durch Google Calculator enthalten, dann ist dies der erste Vorschlag, der zurückkommt.

Das wissend habe ich ein kleines Programm zusammengehackt, was seine Argumente an Google schickt und den ersten Vorschlag ausgibt (was hoffentlich ein Rechenergebnis is­t):

X:\>gc 1+1
= 2

X:\>gc the speed of light in dozen fathoms per quarter fortnight
= 4.13099844e12 (dozen fathoms) per (quarter fortnight)

X:\>gc mass of earth in lbs
= 1.31708565e25 pounds

X:\>gc 7 liters / 1 kilometer=
= 7.0e-6 m2

Am liebsten mag ich die Möglichkeit zur Einheitenkonver­tierung. Leider funktioniert nicht alles. An Naturkonstanten (Lichtgeschwin­digkeit, Elementarladung, …) und sonstige hübsche Zahlen (e, π, …) kommt man leider nicht direkt heran. Bei Naturkonstanten schafft man es manchmal mit einer expliziten Konvertierung in deren Einheit (c in kilometers per second), aber das wäre noch ein Punkt, wo man verbessern könnte.

Das Programm wurde in C# 2.0 geschrieben und benutzt LitJSON zum Parsen von JSON. Es läuft auch auf Mono, ich habe dort allerdings noch nicht versucht, es zu kompilieren. Aber da alles .NET 2.0 ist, sollte das eigentlich problemlos funktionieren.

Das Programm sowie der Quelltext hängen an.

UPDATE (2008–10–26 00:34): Ich habe Quelltext und ausführbare Datei wie folgt aktualisiert:

  1. Die Ausgabe erfolgt nun in Unicode (endlich weiß ich, wie das geht)
  2. Falls kein Rechenergebnis vorliegt (also das erste Ergebnis kein = am Anfang hat), werden alle Resultate zurückgeliefert. Das dient hauptsächlich der Nutzung der Suchvorschläge, wie sie vorgesehen waren, aber es hat einige spaßige Seiten:
X:\>gc mankind is
mankind is obsolete
mankind is obsolete lyrics
mankind is obsolete myspace
mankind is doomed
Das Google-rakel:
X:\>gc the future will be
the future will be better tomorrow
AnhangGröße
Ausführbare Datei20.45 KiB
Quelltext23.55 KiB