# Java-Frame <-> Yahoo's Babelfish



## sven-ber (21. Okt 2009)

Hallo zusammen,

ich bin ein Informatik-Student und nehmen gerade das Thema Netzwerk-Programmierung durch.

Bei einer Aufgabe fehlt aber jeglicher Ansatz:
Wir sollen ein Java-Programm schreiben, der einen Englischen Text ins Deutsche übersetzt. Dazu soll über die
Netzwerk-Programmierung auf den Online-Service Babelfish von Yahoo zugegriffen werden.

Mein Problem ist nur, dass ich keinerlei Informationen über eine solche Schnittstelle im Internet gefunden habe.

Hat das einer von euch schon mal gemacht?

Beste Grüße

sven-ber


----------



## Marco13 (21. Okt 2009)

sven-ber hat gesagt.:


> Hat das einer von euch schon mal gemacht?



Ja. Gerade eben. Warum auch immer. Eigentlich sollte man sowas wie High-Level Network Programming finden, und sich das dann selbst zusammendengeln können. Aber ... ich wollt's mal probieren... Ob du's verwendest ist deine Sache...


```
// Marco13 for [url]http://www.java-forum.org/netzwerkprogrammierung/90025-java-frame-yahoos-babelfish.html#post569331[/url]

import java.net.*;
import java.io.*;

class BabelfishTranslation
{
    public static void main (String args[]) throws Exception
    {
        System.out.println(translate("Can you that over sentences?"));
    }

    public static String translate(String input) throws Exception
    {
        URL url = new URL("http://babelfish.yahoo.com/translate_txt");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        PrintWriter out = new PrintWriter(connection.getOutputStream());

        String args =
            "ei="+URLEncoder.encode("UTF-8", "UTF-8") + "&" +
            "fr="+URLEncoder.encode("bf-badge", "UTF-8") + "&" +
            "lp="+URLEncoder.encode("en_de", "UTF-8") + "&" +
            "trtext="+URLEncoder.encode(input, "UTF-8");
        out.println(args);
        out.close();

        BufferedReader in = new BufferedReader(
            new InputStreamReader(connection.getInputStream()));

        StringBuilder response = new StringBuilder();
        String line = null;
        while (true)
        {
            line = in.readLine();
            if (line == null)
            {
                break;
            }
            response.append(line).append("\n");
        }
        in.close();

        // Some wierd assumptions about the response format....
        String responseString = response.toString();
        String resultStart = "<div id=\"result\"><div style=\"padding:0.6em;\">";
        String resultEnd = "</div></div>";
        int i0 = responseString.indexOf(resultStart);
        int i1 = responseString.indexOf(resultEnd, i0);
        String translation = responseString.substring(i0+resultStart.length(), i1-1);
        return translation;
    }
}
```


----------



## sven-ber (21. Okt 2009)

dank dir.

denke genau das ist die lösung für das problem.

Kann ich eigentlich jeden Internet-Service auf solche Weise mit Java in Anspruch nehmen? Bzw. welche Programme kann ich kostenlos verwenden?


----------



## tuxedo (26. Okt 2009)

sven-ber hat gesagt.:


> Kann ich eigentlich jeden Internet-Service auf solche Weise mit Java in Anspruch nehmen?



Können schon, ist nur die Frage ob du es darfst. Manche Anbieter haben entsprechende Nutzungsbedingungen die sowas verbieten.



> Bzw. welche Programme kann ich kostenlos verwenden?



Alle die kostenlos angeboten werden und eine automatisierte Abfrage mit einem Programm erlauben, bzw. nicht verbieten. Google hilft.

- Alex


----------

