2011-03-09 3 views
1

그들에 특수 문자와 URL을 문제 : 매개 변수 tl 언어의 언어 코드를 포함
http://translate.google.com/translate_tts?tl=%s&q=%s
당신이 변환하고자하는 텍스트가 q에 포함되어 있습니다.구글 앱 엔진 URL을 가져올 수 - 나는 구글이 URL과 음성으로 텍스트의 일부를 변환 번역 사용하고

일반 단어 (특수 문자 제외)는 올바른 오디오 파일을 반환합니다.

url = "http://translate.google.com/translate_tts?tl=%s&q=%s" % ('no', urllib.quote('kjendis')) 
#url = http://translate.google.com/translate_tts?tl=no&q=kjendis 
self.response.headers["Content-Type"] = "audio/mpeg" 
self.response.out.write(urlfetch.fetch(url).content) 

이 올바른 소리를 반환
그래서 내 응용 프로그램에서이 (no 노르웨이의 언어 코드) 내가 할 것입니다.
일반 webapp btw를 사용하고 있습니다.

하지만 특수 문자가 포함 된 단어 (vår)는 옳지 않습니다. 생성 된 URL은 http://translate.google.com/translate_tts?tl=no&q=v%C3%A5r입니다. (å 올바르게 인코딩 %로 변환됩니다)
브라우저에서 해당 URL을 열 때 올바른 소리가 나지 만 urlfetch.fetch를 사용하여 동일한 URL을 읽으면 반환 된 소리가 올바르지 않습니다.

여기에 무슨 문제가 있습니까? 가져 오기가 어떻게 든 URL을 변경한다고 가정 할 수 있습니다.

+1

'quote' 함수는 무엇입니까? 가져온 URL (예 : 자신의 앱)을 볼 수있는 일부 앱에 인코딩 된 문자열을 urlfetch하려고 했습니까? –

+0

urllib.quote를 사용하고 있습니다. 나는 당신이 물었던 것과 그 결과가 같았습니다. URL이 변경되지 않는 것 같습니다 :/ 오류가 발생하여 문제가 무엇인지 알았습니다. 사용자 에이전트를 Firefox로 변경 한 후 예상대로 모든 작업이 수행되었습니다. 코드 샘플 http://ideone.com/qvTbb UrlOpener의 버전 특성을 변경하고 결과가 어떻게 변경되는지 들어보십시오. 또한 내 Appengine App으로 테스트했는데 실제로 문제가되는 것입니다 ... 어째서 이런 일이 일어나는 지 아십니까? 나는 좀 궁금해. –

+1

잘 모르겠지만 일부 브라우저는 유니 코드를 잘못 인코딩한다고 가정 할 수 있습니다. 따라서 API는이를 기반으로 차별화됩니다. –

답변

0

명백하게 문제는 App Engine 문제는 아니지만 Google 번역 URL이 다른 사용자 에이전트를 처리하는 방식과 관련이 있습니다.

예 :

#!/usr/bin/env python 
#coding=utf-8 

import urllib 

class MyOpener(urllib.FancyURLopener): 
    version = "App/1.7" #doesn't work 
    version = "Mozilla/4.0 (MSIE 6.0; Windows NT 5.0)2011-03-10 15:38:34" #works 

def textToSpeech(text, languageCode='en'): 
    url = "http://translate.google.com/translate_tts?tl=%s&q=%s" % (languageCode, urllib.quote(text)) 
    myopener = MyOpener() 
    return myopener.open(url, 'rb').read() 

open('urllib.mp3', 'wb').write(textToSpeech('vår', 'no')) 

MyOpener 모든 것이 예상대로 작동을위한 파이어 폭스 사용자 에이전트 문자열을 사용하지만, 소리가 돌려 다른 사용자 문자열을 사용할 때하는 것은 올바르지 않습니다.