python 3 으로 google 번역 API 를 만 들 려 는 시도 에 대해 전체 코드 를 첨부 합 니 다 (mac 에서 단 어 를 맞 출 수 있 습 니 다)

12298 단어 python3구 글 번역
self.headers = {
			'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
			'User-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36',								
			'Accept-Encoding':'gzip,deflate,sdch',
			'Accept-Language': 'en-US,en;q=0.8',
					#'gzip, deflate'
			'Cookie':'NID=67=bRqV9sFtJ-v1wDQrkOC7iZ0mML-Gm0BWSVUgIks4LhWudiylU0lkUwWnwULeSGV9-6wyxCk6yAqRjgAQn1HkYe0CCmEY0wcigNbTntzH8s-QyAyf8liRB-8so7QI2pKk; PREF=ID=ad8886b7f790ae48:U=3bb00ae363164775:NW=1:TM=1374477391:LM=1375175072:S=uG3Rup9TMB8FXVcC; _ga=GA1.3.2029404992.1385734473; Hm_lvt_3d143f0a07b6487f65609d8411e5464f=1389003088,1389629463,1389753542,1390020341; Hm_lpvt_3d143f0a07b6487f65609d8411e5464f=1390111873'
			}

우선 제 가 만 든 머리 요청 부분 입 니 다.
그리고 urllib. request. Request (url) 구 조 를 통 해 완성 합 니 다.
그리고 URL 부분 을 구성 합 니 다.
브 라 우 저 에 표 시 된 url 을 직접 사용 하면
word = input(">> Search > ")
google = "http://translate.google.com/#auto/zh-CN/"

ps: cn, com 다 해 봤 어 요.
인 코딩 에 문제 가 없습니다. 정규 표현 식 에서 인 코딩 을 직접 추출 합 니 다.
결 과 를 되 돌려 주 는 웹 페이지 에는 번역 결과 가 없습니다.
하나 밖 에 없 는 < span id = resultbox   > ps:... < / span > 에서 가장 중요 한 번역 결과 가 있 습 니 다.
그래서 일단 버 프 스 위 트 로 가방 을 잡 아 볼 게 요.
발견 하 다.
현재 사용 가능 한 URL 은 Request URL 입 니 다.http://translate.google.cn/translate_a / t? client = t & sl = en & amp; tl = zh - CN & amp; hl = en & amp; sc = 2 & gt; ie = UTF - 8 & amp; oe = UTF - 8 & amp; prev = btn & amp; rom = 1 & gt; ssel = 0 & tsel = 0 & amp; q = 조회 할 단어 가 들 어 있 습 니 다. Request URL:http://translate.google.cn/translate_a / t? client = t & amp; sl = auto & amp; tl = zh - CN & amp; hl = zh - CN & amp; sc = 2 & gt; ie = UTF - 8 & amp; oe = UTF - 8 & amp; uptl = zh - CN & amp; alttl = en & amp; oc = 3 & amp; prev = enter & amp; ssel = 0 & gt; q = 여기에 검색 어 를 넣 는 단어


그리고 결과 의 머리 정보 로 해석 하면 결 과 를 얻 을 수 있다 는 것 을 기억 하 세 요.
Mac 에서 저 는 사 운 드 모듈 을 추 가 했 습 니 다. 사실은 간단 합 니 다. say 명령 으로 하면 됩 니 다.
마지막 전체 코드:
첫 번 째 파일 이름 은 googletr_lib.py 
#!/usr/local/bin/python3

import urllib.request as ur
import re
import sys
import gzip
from functools import reduce
from threading import Event , Thread ,currentThread
from time import asctime ,time
try:
	from sound_tool import Sound 
except ImportError:
	error_string = "your sound moudle is demaged ..check 'sound_tool.py'  "
	print(error_string) #test

try:
	from colorlib import color
except ImportError:
	pass

#Speak_words_list = None  # this argc is for 'sound' thread to use.

event = Event()

class Construc_name :
	"""
		this is for Construct a  keyword which would type into url
	"""
	def __init__(self):
		self.tem_list = None
		self.word = None
		self.url = "http://translate.google.cn/translate_a/t?client=t&sl=auto&tl=zh-CN&hl=en&sc=2&ie=UTF-8&oe=UTF-8&uptl=zh-CN&alttl=en&ssel=0&tsel=0&q="

		self.real_word = ""
		
	def Judge_word(self): 
		################ !!!!!#########################################
		global Speak_words_list # !!!!!!! careful this ,it must !!!  ##
		###############################################################

		if len(sys.argv) >1 :
			self.tem_list = sys.argv[1:]
		else :
			self.word = input("Type : ")						
			self.tem_list = self.word.split()

		Speak_words_list = self.tem_list #caraful this ,it involve global para

		if len(self.tem_list) > 1:
			for word in self.tem_list:
				self.real_word = self.real_word + "%20" +word
		else:
			self.real_word = self.tem_list[0]

		
		if Speak_words_list != None:   #you should care of this ,it involve thread
			#print(currentThread(),Speak_words_list,"1.2")   #test
			event.set()      
	
	def get(self):
		self.Judge_word()
		#print(currentThread(),Speak_words_list,"1.3")  #test
			
		tem = self.url + self.real_word
	#	print(tem) #test
		return tem


class GoogleTranslateLib:
	"""
		create a web request moudle ,this is a import moudle
	"""
	def __init__(self,url):
		self.url = url
		self.request = ur.Request(self.url)
		self.headers = {
			'Host':'translate.google.cn',
			'Refer' : 'http://translate.google.cn/?hl=en',
			'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
			'User-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36',								
			'Accept-Encoding':'gzip,deflate,sdch',
			'Accept-Language': 'en-US,en;q=0.8',
					#'gzip, deflate'
			#'Cookie':'PREF=ID=ad8886b7f790ae48:U=3bb00ae363164775:NW=1:TM=1374477391:LM=1375175072:S=uG3Rup9TMB8FXVcC; _ga=GA1.3.2029404992.1385734473; Hm_lvt_3d143f0a07b6487f65609d8411e5464f=1389753542,1390020341,1390192903,1390288106; Hm_lpvt_3d143f0a07b6487f65609d8411e5464f=1390292284'
			'Cookie':'PREF=ID=ad8886b7f790ae48:U=3bb00ae363164775:NW=1:TM=1374477391:LM=1375175072:S=uG3Rup9TMB8FXVcC; Hm_lvt_3d143f0a07b6487f65609d8411e5464f=1389753542,1390020341,1390192903,1390288106; Hm_lpvt_3d143f0a07b6487f65609d8411e5464f=1390292284; _ga=GA1.3.2029404992.1385734473'
			}

		for key in self.headers.keys():
			self.request.add_header(key,self.headers[key])
		#self.opener = ur.build_opener()
		#process by searched 
		self.info = None
		self.first_result = None
		self.second_result = None
		#self.RESULT = None
		self.if_gzip = False
	def search(self):
		fp = ur.urlopen(self.request)
		self.info =  fp.info()
	#	print(self.info)   #test
		b_part1= fp.read(2)
		b_part2 = fp.read()
		
		self.if_gzip =  self.check_gzip(b_part1)
		b = b_part1 + b_part2
		temp_str = str(b)
	#	print (temp_str) #test
		charset = self.find_charset()
		print ("charset : ",charset)
		#print(dir(fp)) #test
		if (fp == None):
			raise "Can't connecting"
		
		b = self.decompress(b)	

		self.first_result = b.decode(charset)
		#print (self.first_result)
	#	with open("/Users/darkh/Desktop/search.html","w") as newhtml:
	#		newhtml.writelines(self.first_result)
		
	def check_gzip(self,char):

		if char ==b'\x1f\x8b' :
			print("this request head contain : gzip")
			return True
		return False 

	def decompress(self,com_bytes):
		if self.if_gzip == True:
			return gzip.decompress(com_bytes)		
		return com_bytes

	def find_charset(self):
		"""
			this is for finding html's charset
		"""
		Response_info = str(self.info)
		pattern1 = re.compile(r'(charset=.+?
)') result = pattern1.findall(Response_info) """ result = "charset=....
" get charset is result[8:-1] """ #print (result[0][8:-1]) test   #print ("

") return result[0][8:-1] def format_result(self): """ this is for finding html's serching-result """ self.search() #print(self.first_result) #test if self.first_result != None: # pattern2 = re.compile(r'(<span class=.+?</span>)') # pattern3 = re.compile(r'(<span id=result_box .+?</div>)') #this is for finding the best result  ex: [[["Linux ","Linux","Linux de",""]] #pattern_best_result = re.compile(r'(\[\[\[.+?\])') #temp_best_result = pattern_best_result.findall(html_text)[0] #pattern_best_result_res = re.compile(r'\".*?\"') ####best_result_list[result,pre-search,how to read ,None] #best_result_list = pattern_best_result_res.findall(temp_best_result) #detail = html_text[len(temp_best_result):] res_html = self.first_result t1 =  self.first_result.replace(",[","
\t") t2 = t1.replace('"
\t"','"\t===>\t"') t3 = t2.replace('[','') t4 = t3.replace('],,','
\t\t') t5 = t4.replace('""','
') self.second_result = t5.replace(']','') #print (self.second_result) return self.second_result def get(self): RESULT = self.format_result() #print(RESULT)    #test if self.second_result != None: return RESULT #with open("/Users/darkh/Desktop/search2.html","w") as newhtml: # newhtml.writelines(self.first_result) class Speaker: """ this class will deal a [words...] to string ,then pass string to Sound class  """ def __init__(self,words_list): self.words_list = words_list def makeText(self): Text = None if len(self.words_list) == 1: Text = self.words_list[0] else: Text = reduce((lambda x ,y : x + " " + y),self.words_list) if Text != None: return Text def say(self): words = None words = self.makeText() try : speaker = Sound(words) #print(asctime(),"2",time())  #test speaker.say() #print(asctime(),"2.2",time())  #test except NameError: pass class load_Sound_thread(Thread): """ this class is to package a sound to a new thread  """ def __init__(self): Thread.__init__(self) self.text_list = None global Speak_words_list def run(self): if Speak_words_list == None:  #print ("wait") #test event.wait()  # wait global 'Speak_words_list' get a value  # global  'Speak_words_list'  have got a value ,this thread start again self.text_list = Speak_words_list sound_thread = Speaker(self.text_list) sound_thread.say() if __name__ == "__main__": print() # word = input(">> Search > ") # google = "http://translate.google.cn/translate_a/t?client=t&sl=auto&tl=zh-CN&hl=zh-CN&sc=2&ie=UTF-8&oe=UTF-8&uptl=zh-CN&alttl=en&oc=2&otf=2&ssel=3&tsel=0&q=" try: Speak_words_list = None  # this argc is for 'sound' thread to use. speaker_th1 = load_Sound_thread()  #this is another thread #print(currentThread(),Speak_words_list,"0")  #test speaker_th1.start() #thread 1 start !!!!!!  except   NameError : pass except ImportError: print("you lose sound moudle") #print(currentThread(),Speak_words_list,"1") #test google = Construc_name() #print(currentThread(),Speak_words_list,"2.1")  #test real = google.get() #print (real)  test  #print(currentThread(),Speak_words_list,"2") #test   a = GoogleTranslateLib(real) res = a.get() try: b = color('blue') print (b.get_color(res)) except NameError: print("No colorlib") #print(asctime(),"1",time())  #test print() print(res) #print(asctime(),"1.1",time())  #test """ """

두 번 째 파일 은 사 운 드 파일 의 moudle 입 니 다.
sound 로 명명tool.py
이것 괜찮아요?   mac 시스템 은 이것 을 사용 할 수 있 습 니 다.
from os import system
#from threading import Thread
#from time import asctime
class Sound:
	def __init__(self,text):
		self.words = text
	def say(self):
		command = "say "+self.words
		system(command)

####################### follow  is for test ###########
"""

class b(Sound):
	def __init__(self,text):
		Sound.__init__(self,text)
		print("ok  this second inherce")
		self.text = text
	def i_print(self):
		print("start reading a words")
		Sound.start(self)
if __name__ == "__main__":
	text  = input(">> ")
	th1 = b(text)
	th1.i_print()
	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)

	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)
	print(asctime(),text)
"""

좋은 웹페이지 즐겨찾기