关于提取json值并且翻译的疑问
Code:
import json
from youDaoApi.translate_api import translate
def jsonText():
with open('/Users/scrooge/Desktop/json翻译/english#en.json', 'r') as f:
readText = f.read()
return readText
def convert(var):
if isinstance(var, dict):
return {key: convert(value) for key, value in var.items()}
elif isinstance(var, list):
return [convert(item) for item in var]
elif isinstance(var, tuple):
return (convert(item) for item in var)
elif isinstance(var, str):
return translate(word=var)
else:
return var
var = json.loads(jsonText())
print(type(var))
new_var = convert(var)
with open('ss.json', 'wt') as f:
json.dump(new_var, f, ensure_ascii=False)
官方提供的translate.py
# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import hashlib
from imp import reload
import json
import time
reload(sys)
YOUDAO_URL = 'https://openapi.youdao.com/api'
APP_KEY = '**********'
APP_SECRET = ''**********''
def encrypt(signStr):
hash_algorithm = hashlib.sha256()
hash_algorithm.update(signStr.encode('utf-8'))
return hash_algorithm.hexdigest()
def truncate(q):
if q is None:
return None
size = len(q)
return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]
def do_request(data):
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
return requests.post(YOUDAO_URL, data=data, headers=headers)
def translate(word):
q = word
data = {}
data['from'] = 'en'
data['to'] = 'zh-CHS'
data['signType'] = 'v3'
curtime = str(int(time.time()))
data['curtime'] = curtime
salt = str(uuid.uuid1())
signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
sign = encrypt(signStr)
data['appKey'] = APP_KEY
data['q'] = q
data['salt'] = salt
data['sign'] = sign
data['vocabId'] = "您的用户词表ID"
response = do_request(data)
contentType = response.headers['Content-Type']
if contentType == "audio/mp3":
millis = int(round(time.time() * 1000))
filePath = "合成的音频存储路径" + str(millis) + ".mp3"
fo = open(filePath, 'wb')
fo.write(response.content)
fo.close()
else:
# print(response.content.decode('utf-8'))
var = response.content.decode('utf-8')
var = json.loads(var)
# print(type(var))
word = []
for i in var['web']:
# print(i['value'][0])
# print(type(i['value'][0])) word.append(i['value'][0])
print(
str(word[0])
)
return str(word[0])
Error:
补充:
- 调用的翻译api返回的值为 str 类型。
- 运行代码出错感觉是快速请求有道翻译而导致ip被封,随后又注册了官方的api进行调用还是报错。
- 因为水平有限读懂代码中定义的 convert() 函数有点吃力而难根据报错进行debug。
推荐文章: