2009-04-24 7 views
0

Ayant tapé du code à partir de msdn, je suis fâché que cela ne fonctionne pas exactement comme je le veux. J'essaie d'utiliser google translate pour, bien, traduire quelques trucs pour moi à la volée. Le problème est que t5he responseFromServer ne contient pas le texte traduit, pas plus que la source quand je le regarde en utilisant un navigateur bien que lorsque je regarde la page elle-même, chien est fièrement affiché.Récupération de données à l'aide de WebRequest

void getTranslation() 
    { 
     WebRequest request = WebRequest.Create("http://translate.google.com/translate_t?hl=en#en|fr|dog"); 
     // Get the response. 
     WebResponse response = request.GetResponse(); 
     // Display the status. 
     Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
     // Get the stream containing content returned by the server. 
     Stream dataStream = response.GetResponseStream(); 
     // Open the stream using a StreamReader for easy access. 
     StreamReader reader = new StreamReader(dataStream); 
     // Read the content. 
     string responseFromServer = reader.ReadToEnd(); 
     int index = 0; 
     while (responseFromServer.Substring(index).Contains("dog")) 
     { 
      index = responseFromServer.IndexOf("dog", index + 1); 
      Console.WriteLine(responseFromServer.Substring(index < 50 ? 0 : index - 50, 100)); 
      Console.WriteLine(" "); 
     } 
    } 

Est-ce que quelqu'un sait ce que je n'arrive pas à comprendre ici? Ou d'un site Web qui renvoie une traduction aussi simple que la demande?

Répondre

3

La raison est que la requête de traduction elle-même est une requête AJAX asynchrone. Si vous affichez la source de la page que vous essayez de récupérer, vous ne trouverez pas le mot chien.

Vous pourriez jeter un oeil à la Google AJAX Language API pour réaliser ce que vous voulez.

+0

@Patrick: Avez-vous réussi à faire fonctionner vos exigences ou avez-vous choisi une autre approche à la fin? –

+0

Je l'utilisais comme un exercice d'apprentissage mais je n'ai pas eu le temps de le suivre à la fin. J'avais l'option de faire en sorte que mes collègues en France traduisent ce dont j'avais besoin manuellement. – Patrick

2

Cela ne fonctionne pas parce que cette application utilise javascript pour poster automatiquement.

Si vous voulez faire cela par l'intermédiaire de screenscraping, vous devrez faire une demande POST à ​​l'URL du formulaire avec les paramètres corrects. Toutefois, il est préférable de n'utiliser que API plutôt que le webscraping.

+0

pour être juste cela fonctionne également avec JS désactivé – annakata

+0

Pas quand vous éteignez JS et nagivate à l'URL, vous devez alors soumettre manuellement le formulaire. Mon mauvais, j'aurais dû être plus explicite dans mon explication – Kirschstein

Questions connexes