Google Translate über Java ansprechen?

  • Themenstarter Themenstarter Mc Noise
  • Beginndatum Beginndatum
M

Mc Noise

Gast
HI Leute,

Ich würde gerne Google Translate über Java ansprechen, das heißt ich möchte einen String übergeben können und die Übersetzung dann als Rückgabewert bekommen. Ganz wichtig ist, das ich keine externen APIs verwenden möchte, was heißt, dass ich alles alleine schreiben muss/will 😀

Leider habe ich keine Ahnung wie man da ran gehen könnte, und das Kapitel über Netzwerkprogrammierung beim Galileo OpenBook hat mich auch nciht weitergebracht.

Ich hoffe ihr könnt mir irgendwie helfen. Danke!
 
Du willst Google Translate über Java nutzen aber ohne externe API ? ???:L
Naja, mit der API wäre das sicherlich alles etwas einfacher, aber ganz ohne wäre eine Idee evtl .so etwas:

Java:
		String german = "hallo%20welt"; //suchstring leerzeichen durch %20 ersetzen!
		Scanner sc = new Scanner(new URL("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=de|en&q="+ german).openStream()); //de|en = deutsch --> englisch
		String tmp = sc.nextLine(); //hier kommt ein json string zurück

in tmp würde jetzt ein JSON String stehen. Auch hier wäre es vom Vorteil eine JSON-Lib zu nutzen, aber wenn du da auch ganz ohne Lib auskommen willst, musste den String halt selbst irgendwie auseinander nehmen, evtl. mit Regex!
Oder ganz häßlich mit substring so ^^:
Java:
		String english = tmp.substring(tmp.indexOf("translatedText\":\"")+17, tmp.indexOf("\"responseDetails")-4);
		System.out.println(english);

😀

Gibts einen Grund wieso du die google translate api nicht nutzen willst?
 
Ich habe keine Ahnung, ob es nicht sowas wie GoogleTranslateAPI gibt, aber im notfall, kannst du einfach eine http Anfrage schicken und die Seite dann parsen, z.B.:

Code:
http://translate.google.com/?sl=en&tl=de&text=Just%20a%20simple%20test

Die Übersetzung steht dann innerhalb eines span's mit der id "result_box"
 
Zuletzt bearbeitet:
Danke euch erstmal, genau so habe ich mir das vorgestellt 😀

@XHelp: Kannst du das vll. nochmal genauer beschreiben, mit Html Zeugs und Webseiten bin ich leider nicht sehr bewandert 😀
 
@eRaaaa: Ich möchte keine weiteren APIs verwenden, um weitere Abhängigkeiten zu sparen. Ich möchte einfach nicht für alles noch ein Paket mitliefern 😀 Außerdem ist der Lerninhalt dann größer.

Ich habs jetzt so gemacht:

Java:
/***************************************************************************
 *   Copyright (C) 2010 by MJ <mj_dv@web.de>                               *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

package translate;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Scanner;

public class GoogleTranslate {

    public static String translate(Language from, Language to, String toTranslate) throws MalformedURLException, IOException {
        toTranslate = URLEncoder.encode(toTranslate, "utf-8");
        String str = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=" +
                from  + "|" + to + "&q="+ toTranslate;
        Scanner sc = new Scanner(new URL(str).openStream());
        str = sc.nextLine();
        
        return parseJSONString(str);
    }

    private static String parseJSONString(String str) {

        //check response status
        int index = str.indexOf("\"responseStatus\": ");
        index += "\"responseStatus\": ".length();

        String tmp = str.substring(index, str.length()-1);
        int status = new Integer(tmp);

        //TODO throw exception if status != 200
        if(status == 200) {
            index = str.indexOf("translatedText\":\"");
            index += "translatedText\":\"".length();

            tmp = str.substring(index, str.indexOf("\"}", index));
            return tmp;
        }
        return str;
    }

}

Ist das okay so?
 
Joa also es funktioniert, also habe ich eigentlich nichts daran auszusetzen, aber du meintest ja das mit substring hässlich ist, also wollte ich nochmal nachfragen 😀
 
Joa also es funktioniert, also habe ich eigentlich nichts daran auszusetzen, aber du meintest ja das mit substring hässlich ist, also wollte ich nochmal nachfragen 😀

Ich glaube, dass der Ansatz häßlich ist ;-)

Eine API ist eine wohldefinierte Schnittstelle. Die Einbindung ist einfach. Dein Ansatz ist ein Wartungshorror.
Ich finde, der Lerneffekt ist größer, wenn man sich eine Aufgabe richtig löst. Mit Hacks hat man nichts gelernt.
 
Ja gibt es, aber wie gesagt möchte ich nicht!

Außerdem macht die API es nicht viel anders. Vielleicht kannst du nochmal genauer erklären was du so schlecht an diesem Ansatz findest. Besonders das mit der Wartungshölle versteh ich nicht ganz^^
 
*offtopic*

Ich finde, der Lerneffekt ist größer, wenn man sich eine Aufgabe richtig löst. Mit Hacks hat man nichts gelernt.

Das kann man so oder so sehen. Am Lernziel ist man u.U. schneller wenn man erst gar keinen Hack versucht, sondern es, wie du schon sagst, gleich richtig macht.

Setzt man aber erstmal auf den Hack wird man früher oder später feststellen dass das eine doofe Entscheidung war und es dann richtig machen. Ergo: Auch hier das Lernziel erreicht.

Ich bin oft letzteren Weg gegangen. Und ich habs überlebt und auch daraus gelernt. Von daher sind
wohl beide Wege nicht sooo verkehrt 🙂

*/offtopic*
 
*offtopic*



Das kann man so oder so sehen. Am Lernziel ist man u.U. schneller wenn man erst gar keinen Hack versucht, sondern es, wie du schon sagst, gleich richtig macht.

Setzt man aber erstmal auf den Hack wird man früher oder später feststellen dass das eine doofe Entscheidung war und es dann richtig machen. Ergo: Auch hier das Lernziel erreicht.

Ich bin oft letzteren Weg gegangen. Und ich habs überlebt und auch daraus gelernt. Von daher sind
wohl beide Wege nicht sooo verkehrt 🙂

*/offtopic*

Aus Erfahrung kann ich dazu nur zwei Bemerkungen anbringen, die nicht von mir stammen ...

1.) Wenn etwas erst mal läuft, dann wird es nicht mehr geändert. (oder nichts lebt länger als ein produktiver Prototpy)
2.) Wenn du jetzt keine Zeit hast es richtig zu machen, wann dann?
 
Aus Erfahrung kann ich dazu nur zwei Bemerkungen anbringen, die nicht von mir stammen ...

1.) Wenn etwas erst mal läuft, dann wird es nicht mehr geändert. (oder nichts lebt länger als ein produktiver Prototpy)
2.) Wenn du jetzt keine Zeit hast es richtig zu machen, wann dann?

Aus dem professionellen Umfeld heraus geb ich dir natürlich recht. Kunden eine "quick'n'dirty" Lösung zu verkaufen ist keine gute Idee. Diese Prototypen dann noch nach Jahren pflegen ist nicht mehr lustig,
Aber zur Hochschulzeit war das zumindest bei mir anders. Die "richtige" Lösung war meist mit einiger Einarbeitungszeit verbunden. Und wenn man noch am Anfang des Wissens steht, dann sieht man vieles anders und geht der vermeintlich einfacheren Weg. Und da stellt man früher (während der Entwicklungsphase) oder später (wenn es eigentlich schon zu spät ist) fest, dass es anders doch besser gewesen wäre und hat somit seine Lektion gelernt 🙂
 

Zurück
Oben