__main__.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import asyncio
  2. import json
  3. import argparse
  4. import os
  5. import time
  6. import traceback
  7. from bilibili_api import settings
  8. from core.listener import Listener
  9. from core.recorder import Recorder
  10. import aiohttp
  11. import bilibili_api
  12. ROOM_DISPLAY_ID=22647787
  13. def print_json(data):
  14. print(json.dumps(data, sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False))
  15. def startRecoder(_id,outputNameTemplate):
  16. print('监听到房间'+str(_id)+'正在直播,开始录制!')
  17. Recorder(_id).start(outputNameTemplate,True)
  18. if __name__ == '__main__':
  19. parser = argparse.ArgumentParser()
  20. parser.add_argument("ids",type=int,nargs="+")
  21. parser.add_argument("--file-name-template",type=str,default='【${qn_desc}】${name} - ${datetime}')
  22. parser.add_argument("--log",type=bool,default=True)
  23. args = parser.parse_args()
  24. print('启动中...')
  25. proxy = os.getenv("https_proxy") or os.getenv("http_proxy")
  26. if proxy!=None:
  27. settings.proxy = proxy
  28. while True:
  29. try:
  30. listener = Listener()
  31. for _id in args.ids:
  32. print('正在设置对房间'+str(_id)+'的监听...')
  33. try:
  34. listener.add(_id,lambda :startRecoder(_id,args.file_name_template))
  35. except bilibili_api.exceptions.ResponseCodeException as e:
  36. if e.code == 60004:
  37. print('房间'+str(_id)+'不存在!')
  38. elif e.code == 403:
  39. raise e
  40. except bilibili_api.exceptions.NetworkException as e:
  41. print('网络错误:',end='')
  42. print(e)
  43. time.sleep(1)
  44. except aiohttp.client_exceptions.ClientConnectorError as e:
  45. print('网络错误:',end='')
  46. print(e)
  47. time.sleep(1)
  48. except bilibili_api.exceptions.ResponseCodeException as e:
  49. if(e.code == 403):
  50. print('获取直播间信息权限被禁止,将于30分钟后重试...')
  51. time.sleep(1800)
  52. print('正在重新尝试获取直播间信息...')
  53. else:
  54. time.sleep(1)
  55. except Exception as e:
  56. traceback.print_exc()
  57. asyncio.get_event_loop().stop()
  58. time.sleep(60)
  59. else:
  60. print('启动完毕')
  61. asyncio.get_event_loop().run_forever()
  62. # listener = Listener()
  63. # for _id in args.ids:
  64. # print('正在设置对房间'+str(_id)+'的监听...')
  65. # listener.add(_id,lambda :startRecoder(_id,args.file_name_template))
  66. # print('启动完毕')
  67. # asyncio.get_event_loop().run_forever()