воскресенье, 4 марта 2012 г.

Microsoft Translator - сервис беcплатных переводов для разработчиков

Google - компания добра. Но доброго ничего не бывает. Теперь я понимаю суть понятия "однополюсность". Cуществовать мы можем только в равновесии. Должно быть нескосколько полюсов. Вот и компания Microsoft дала возможность использовать их сервис переводов бесплатно, в ограниченных объёмах. В то время, как Google прикрыла такую возможность. Пока они там борются за мономополию, нам падают хоть какие крошки. Спасибо. Документация по использованию сервиса вот.
Кратко расскажу, как пользоваться сервисом переводов от Microsoft, используя их API и Python.
Все данные получяем по средствам REST
протокола(Запрос ответ), как обычно. Алгоритм работы: собираем параметры запроса GET, POST, отправляем на определённый адрес, получаем ответ, разбираем. Прежде всего надо зарегистрироваться, получить openID, cоздать своё приложения. После чего вы можете
получить client_id, client_secret параметры. После того, как вы получили параметры доступа, начнём. Для увеличения безопасности используются временные ключи, токены доступа. Получаем токены доступа.

...
client_id = ''
client_secret = ''
self.auth_url = 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/'
self.scope_url = 'http://api.microsofttranslator.com'
self.grant_type = 'client_credentials'
...
 def get_token(self, grant_type, scope_url, client_id, client_secret, auth_url):
  '''
   Return an access token.
  '''
  try:
   params = {
    'grant_type': grant_type,
    'scope': scope_url,
    'client_id':client_id,
    'client_secret': client_secret
   }
   response = self.post(auth_url, params)
   json_response = json.loads(response)
   return json_response['access_token']
  except Exception, e:
   return None

После того, как мы получили токен доступа, можем использовать сервис.
Токен сервис можно передавать параметром в адресе и в заголовке запроса. Я передаю в заголовке запроса.

Перевод текста.
def translate(self, from_, to, text):
  '''
   Translate text from to languages.
  '''
  return self.get(
   'http://api.microsofttranslator.com/V2/Ajax.svc/Translate', 
   {
    'from': from_,
    'to': to,
    'text': text
   },
   {'Authorization': 'Bearer %s' % self.access_token}
  )  

Получение произношения
def speak(self, text, language):
  '''
   Get a sound for a text.
  '''
  return self.get(
   'http://api.microsofttranslator.com/V2/Http.svc/Speak', 
   {
    'text': text,
    'language': language,
    'format': 'audio/mp3',
    'options': 'MinSize',
   },
   {'Authorization': 'Bearer %s' % self.access_token}
  )

Вот маленькое розъяснение функций оберток.
def _call(self, type_, url, params, updated_headers = None):
  '''
   Call request to a url. GET or POST.
  '''
  headers = dict(self.default_request_headers)
  if updated_headers != None:
   headers = updated_headers
  params_str = urllib.urlencode(params)
  if type_ == 'GET':
   request = urllib2.Request('%s?%s'%(url, params_str))
  else:
   request = urllib2.Request(url, params_str)
  for key, value in headers.items():
   request.add_header(key, value)
  response = urllib2.urlopen(request)
  return response.read()
 
 def get(self, url, params, updated_headers = None):
  '''
   GET request.
  '''
  return self._call('GET', url, params, updated_headers)

Всё. В руки вам документацию для усовершенствования. Приведены участки кода. Будьте осторожны при использовании copy-past!

Комментариев нет:

Отправить комментарий