14.082013

Google APIs: GET Falle

Heute mal einen Hinweis, für die Verwendung von Google APIs. Ich habe vor kurzem die Google Translate API implementiert, bei der man Texte automatisch in eine von über 50 Sprachen übersetzen kann. Dies kostet dabei nur 0,00002 $ pro zu übersetzendem Zeichen. Ich bin leider in einen blöden Fehler gelaufen, den ich in diesem Blog Eintrag erklären möchte, damit euch sowas nicht auch passiert.

Die API ist als REST Schnittstelle implementiert, die man mit GET oder mit POST anfragen kann. Der Aufruf mittels GET ist sehr simpel:

https://www.googleapis.com/language/translate/v2?{parameters}

Google API 414

Als Parameter gibt man zum einen seinen API-Key an (Parameter key), die Ausgangssprache (Parameter source), die gewünschte Zielsprache (Parameter target) und beliebig viele Parameter q. Die Texte die in den q-Parametern stehen werden dann übersetzt zurückgeliefert. Das funktioniert solange ganz ausgezeichnet, bis man sehr lange Texte übersetzen möchte, wie ich schmerzlich erfahren musste. Wird die URL über 2000 Zeichen lang, streikt die Google API mit dem GET Aufruf und es wird ein Fehler zurückgegeben (siehe Abbildung).

Die Lösung ist nicht besonders schwierig, aber in der Developer Dokumentation von Google ein wenig versteckt. Zumindest habe ich sie zunächst übersehen: Möchte man mehr als 2000 Zeichen übersetzen muss man von GET auf POST umsteigen. In der Doku steht dazu:

Note: You can also use POST to invoke the API if you want to send more data in a single request. The q parameter in the POST body must be less than 5K characters. To use POST, you must use the X-HTTP-Method-Override header to tell the Translate API to treat the request as a GET (use X-HTTP-Method-Override: GET).

Bei 5000 Zeichen ist dann aber wirklich Schluss. Längere Texte kann die Google Translate API derzeit nicht übersetzen.

Ich hoffe, mit diesem Blog Eintrag den ein oder anderen davor bewahrt zu haben, in diesen ärgerlichen Fehler zu laufen.