みなさんこんにちは。 以下で説明するのは、Pythonを使用した初めての(少なくとも私にとって)初めての経験です。 スクリプトを改善/最適化する方法を教えていただければ幸いです。

古代から、私はあなたが彼を養うすべてを翻訳するGoogleを通して翻訳されたbashのスクリプトを持っていました
translate 'test' en ru
Googleが最近学んだように、私は彼に可能な代替案を提供してほしいと思った。 同時に、私はPythonの練習を手配することにしました:)
起こったことは次のとおりです。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"" "This script allow users to translate a string
from one language to another with Google translate" ""
import sys
import re
import urllib
import urllib2
import json
def print_params(data):
"" "print parameters from list" ""
for val in data:
if isinstance(val, basestring):
print "\t " + val
def main():
"" "
Usage:
first arg - string to translate
second arg - source lang
third arg - target lang
Example:
translate.py 'text to translate' en ru
translate.py 'text to translate' ru en
" ""
url = "http://translate.google.com/translate_a/t?%s"
list_of_params = { 'client' : 't' ,
'hl' : 'en' ,
'multires' : '1' , }
#all arguments given
if len(sys.argv) == 4:
list_of_params.update({ 'text' : sys.argv[1],
'sl' : sys.argv[2],
'tl' : sys.argv[3] })
request = urllib2.Request(url % urllib.urlencode(list_of_params),
headers={ 'User-Agent' : 'Mozilla/5.0' , 'Accept-Charset' : 'utf-8' })
res = urllib2.urlopen(request).read()
fixed_json = re.sub(r ',{2,}' , ',' , res).replace( ',]' , ']' )
data = json.loads(fixed_json)
#simple translation
print "%s / %s / %s" % (data[0][0][0], data[0][0][1],
data[0][0][2] or data[0][0][3])
#abbreviation
if not isinstance(data[1], basestring):
print data[1][0][0]
print_params(data[1][0][1])
#interjection
try :
if not isinstance(data[1][1], basestring):
print data[1][1][0]
print_params(data[1][1][1])
except Exception:
print "no interjection"
else :
print main.__doc__
if __name__ == '__main__' :
main()
* This source code was highlighted with Source Code Highlighter .
ダウンロードスクリプトPS建設的なコメントをありがとう。 コードとファイルを更新しました。
フレーズがあなたの調子が似ていたらエラーを出しましたか? #修正済み
PPSあなたの肯定的なフィードバックと建設的な批判に感謝します。
リクエストに応じて、Googleを介してAPI v2を翻訳するスクリプトの別のバージョンを作成しました。 残念ながら、APIは単一の単語の複数の意味を提供しません。 おそらく将来、この機能が追加されるでしょう。
スクリプトの2番目のバージョンを使用するには、
code.google.com /
apis /
console /
?api = translateで APIキーを取得し、スクリプト内のキーで*****を置き換える必要があります。
スクリプト自体は次のとおりです。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"" "This script allow users to translate a string
from one language to another with Google Translate API
You have to insert Your Translate API key
Get your API key from here:
code.google.com/apis/console/?api=translate
Replace
api_key = '**********' with your API key
" ""
import sys
import urllib
import urllib2
import json
def translate(list_of_params):
"" "Translate given text" ""
url = "https://www.googleapis.com/language/translate/v2?%s"
request = urllib2.Request(url % urllib.urlencode(list_of_params),
headers={ 'User-Agent' : 'Mozilla/5.0' , 'Accept-Charset' : 'utf-8' })
res = urllib2.urlopen(request).read()
translated = json.loads(res)
for translations in translated[ 'data' ][ 'translations' ]: print translations[ 'translatedText' ]
def main():
"" "
Usage:
first arg - string to translate
second arg - source lang
third arg - target lang
Example:
translate.py 'text to translate' en ru
translate.py 'text to translate' ru en
translate.py 'auto detect source language' ru
" ""
api_key = '**********'
list_of_params = { 'key' : api_key, }
if len(sys.argv) == 4:
#both langs entered
list_of_params.update({ 'q' : sys.argv[1],
'source' : sys.argv[2],
'target' : sys.argv[3] })
translate(list_of_params)
elif len(sys.argv) == 3:
#auto source language
list_of_params.update({ 'q' : sys.argv[1],
'target' : sys.argv[2] })
translate(list_of_params)
else :
print main.__doc__
if __name__ == '__main__' :
main()
* This source code was highlighted with Source Code Highlighter .
ダウンロードスクリプト