index.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from db_pool.mysqlhelper import MySqLHelper
  2. import flask
  3. import requests
  4. import json
  5. import opencc
  6. db = MySqLHelper()
  7. app = flask.Flask(__name__, static_folder='static',
  8. static_url_path='/bili_translate_api/static/')
  9. converter = opencc.OpenCC('tw2sp.json')
  10. @app.route('/bili_translate_api/get/<eid>')
  11. def get_translate(eid):
  12. if not eid:
  13. return flask.jsonify({"code": -1, "msg": "未输入参数"})
  14. data = db.selectone(
  15. "select subtitle from subtitle where ep_id=%s", eid)
  16. if not data: # 在数据库找不到保存的字幕
  17. # 尝试检索字幕
  18. r = requests.get(
  19. 'https://api.bilibili.com/pgc/view/web/season?ep_id=%s' % eid)
  20. r_data = json.loads(r.text)
  21. if r_data['code'] != 0:
  22. return flask.jsonify({"code": -1, "msg": "搜索不到字幕"})
  23. found = 0
  24. aid = 0
  25. cid = 0
  26. sid = str(r_data['result']['season_id'])
  27. for i in r_data['result']['episodes']:
  28. if str(i['id']) == str(eid):
  29. found = 1
  30. aid = str(i['aid'])
  31. cid = str(i['cid'])
  32. break
  33. if not found:
  34. return flask.jsonify({"code": -1, "msg": "搜索不到字幕"})
  35. r = requests.get(
  36. 'https://api.bilibili.com/x/player/v2?aid=%s&cid=%s&ep_id=%s&season_id=%s' % (aid, cid, eid, sid))
  37. r_data = json.loads(r.text)
  38. if r_data['code'] != 0:
  39. return flask.jsonify({"code": -1, "msg": "搜索不到字幕"})
  40. zht_exist = 0
  41. zht_url = None
  42. for i in r_data['data']['subtitle']['subtitles']:
  43. if i['lan'] == 'zh-Hant':
  44. zht_exist = 1
  45. zht_url = "https:"+i['subtitle_url']
  46. if not zht_exist:
  47. return flask.jsonify({"code": -1, "msg": "搜索不到字幕"})
  48. r = requests.get(zht_url) # 请求繁体字幕
  49. r_data = json.loads(r.text)
  50. if not r_data['body']:
  51. return flask.jsonify({"code": -1, "msg": "搜索不到字幕"})
  52. for i in r_data['body']:
  53. i['content'] = converter.convert(i['content'])
  54. db.insertone("insert into subtitle values (%s, %s)",
  55. (eid, json.dumps(r_data['body']))) # 写入数据库缓存
  56. return flask.jsonify({"code": 200, "data": r_data['body']})
  57. else:
  58. d = json.loads(str(data[0], encoding='utf8'))
  59. return flask.jsonify({"code": 200, "data": d})
  60. if __name__ == "__main__":
  61. app.run('127.0.0.1', 8001)