Burszuras
Burszuras

Reputation: 63

Python script to translate via google translate

I'm trying to learn python, so I decided to write a script that could translate something using google translate. Till now I wrote this:

import sys
from BeautifulSoup import BeautifulSoup
import urllib2
import urllib

data = {'sl':'en','tl':'it','text':'word'} 
request = urllib2.Request('http://www.translate.google.com', urllib.urlencode(data))

request.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11')
opener = urllib2.build_opener()
feeddata = opener.open(request).read()
#print feeddata
soup = BeautifulSoup(feeddata)
print soup.find('span', id="result_box")
print request.get_method()

And now I'm stuck. I can't see any bugs in it, but it still doesn't work (by that I mean that the script will run, but it wont translate the word).

Does anyone know how to fix it? (Sorry for my poor English)

Upvotes: 6

Views: 17226

Answers (3)

eiTan LaVi
eiTan LaVi

Reputation: 3081

Yes their documentation is not so easy to uncover.

Here's what you do:

  1. In the Google Cloud Platform Console:

    1.1 Go to the Projects page and select or create a new project

    1.2 Enable billing for your project

    1.3 Enable the Cloud Translation API

    1.4 Create a new API key in your project, make sure to restrict usage by IP or other means available there.


  1. In the machine where you want to run the client:

    pip install --upgrade google-api-python-client


  1. Then you can write this to send translation requests and receive responses:

Here's the code:

import json
from apiclient.discovery import build

query='this is a test to translate english to spanish'
target_language = 'es'

service = build('translate','v2',developerKey='INSERT_YOUR_APP_API_KEY_HERE')

collection = service.translations()

request = collection.list(q=query, target=target_language)

response = request.execute()

response_json = json.dumps(response)

ascii_translation = ((response['translations'][0])['translatedText']).encode('utf-8').decode('ascii', 'ignore')

utf_translation = ((response['translations'][0])['translatedText']).encode('utf-8')

print response
print ascii_translation
print utf_translation

Upvotes: 5

Arnaud Aliès
Arnaud Aliès

Reputation: 1092

I made this script if you want to check it: https://github.com/mouuff/Google-Translate-API : )

Upvotes: 10

Thomas Orozco
Thomas Orozco

Reputation: 55207

Google translate is meant to be used with a GET request and not a POST request. However, urrllib2 will automatically submit a POST if you add any data to your request.

The solution is to construct the url with a querystring so you will be submitting a GET.
You'll need to alter the request = urllib2.Request('http://www.translate.google.com', urllib.urlencode(data)) line of your code.

Here goes:

querystring = urllib.urlencode(data)
request = urllib2.Request('http://www.translate.google.com' + '?' + querystring )

And you will get the following output:

<span id="result_box" class="short_text">
    <span title="word" onmouseover="this.style.backgroundColor='#ebeff9'" onmouseout="this.style.backgroundColor='#fff'">
        parola
    </span>
</span>

By the way, you're kinda breaking Google's terms of service; look into them if you're doing more than hacking a little script for training.

Using requests

I strongly advise you to stay away from urllib if possible, and use the excellent requests library, which will allow you to efficiently use HTTP with Python.

Upvotes: 6

Related Questions