1

私はGoogle翻訳を使用して、次のURLでテキストを音声に変換して
http://translate.google.com/translate_tts?tl=%s&q=%s
います。パラメータtlには、音声に変換するテキストの言語の言語コードと、変換するqテキストが含まれています。

通常の単語(特殊文字なし)は正しいオーディオファイルを返します。
したがって、私のアプリケーションでは、これが私が行うことです(noノルウェー語の言語コードです)。

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)

これにより、正しいサウンドが返されます。
私はプレーンなウェブアプリを使用しています。

しかし、特殊文字が含まれている単語(vår)がある場合、何かが正しくありません。生成されるURLはですhttp://translate.google.com/translate_tts?tl=no&q=v%C3%A5r。(åはパーセントエンコーディングに正しく変換されます)
ブラウザでそのURLを開くと正しいサウンドが得られますが、urlfetch.fetchを使用して同じURLを読み取ると、返されるサウンドが正しくありません。

ここで何が問題になっていますか?フェッチが何らかの形でURLを変更しているとしか思えません。

4

1 に答える 1

0

どうやら問題はAppEngineの問題ではないようですが、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にFirefoxユーザーエージェント文字列を使用すると、すべてが期待どおりに機能しますが、他のユーザー文字列を使用すると、返されるサウンドが正しくありません。

于 2011-03-11T07:03:40.107 に答える