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/') 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)