| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- from db_pool.mysqlhelper import MySqLHelper
- import flask
- import requests
- import json
- import opencc
- db = MySqLHelper()
- app = flask.Flask(__name__, static_folder='static',
- static_url_path='/bili_translate_api/static/')
- converter = opencc.OpenCC('tw2sp.json')
- @app.route('/bili_translate_api/get/<eid>')
- def get_translate(eid):
- if not eid:
- return flask.jsonify({"code": -1, "msg": "未输入参数"})
- data = db.selectone(
- "select subtitle from subtitle where ep_id=%s", eid)
- if not data: # 在数据库找不到保存的字幕
- # 尝试检索字幕
- r = requests.get(
- 'https://api.bilibili.com/pgc/view/web/season?ep_id=%s' % eid)
- r_data = json.loads(r.text)
- if r_data['code'] != 0:
- return flask.jsonify({"code": -1, "msg": "搜索不到字幕"})
- found = 0
- aid = 0
- cid = 0
- sid = str(r_data['result']['season_id'])
- for i in r_data['result']['episodes']:
- if str(i['id']) == str(eid):
- found = 1
- aid = str(i['aid'])
- cid = str(i['cid'])
- break
- if not found:
- return flask.jsonify({"code": -1, "msg": "搜索不到字幕"})
- r = requests.get(
- 'https://api.bilibili.com/x/player/v2?aid=%s&cid=%s&ep_id=%s&season_id=%s' % (aid, cid, eid, sid))
- r_data = json.loads(r.text)
- if r_data['code'] != 0:
- return flask.jsonify({"code": -1, "msg": "搜索不到字幕"})
- zht_exist = 0
- zht_url = None
- for i in r_data['data']['subtitle']['subtitles']:
- if i['lan'] == 'zh-Hant':
- zht_exist = 1
- zht_url = "https:"+i['subtitle_url']
- if not zht_exist:
- return flask.jsonify({"code": -1, "msg": "搜索不到字幕"})
- r = requests.get(zht_url) # 请求繁体字幕
- r_data = json.loads(r.text)
- if not r_data['body']:
- return flask.jsonify({"code": -1, "msg": "搜索不到字幕"})
- for i in r_data['body']:
- i['content'] = converter.convert(i['content'])
- db.insertone("insert into subtitle values (%s, %s)",
- (eid, json.dumps(r_data['body']))) # 写入数据库缓存
- return flask.jsonify({"code": 200, "data": r_data['body']})
- else:
- d = json.loads(str(data[0], encoding='utf8'))
- return flask.jsonify({"code": 200, "data": d})
- if __name__ == "__main__":
- app.run('127.0.0.1', 8001)
|