Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

sns_endpoint.py 3.8KB

1 miesiąc temu
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from fastapi import APIRouter,Request,HTTPException
  2. from pydantic import BaseModel
  3. from fastapi import APIRouter, Depends
  4. from pydantic import BaseModel, ValidationError
  5. from model.models import AgentConfig,validate_wxid,auth_required_time
  6. import threading
  7. import asyncio
  8. import time
  9. from typing import Dict, Tuple, Any
  10. sns_router = APIRouter(prefix="/api/sns")
  11. class SendTextRequest(BaseModel):
  12. wxid: str
  13. content:str
  14. class SendImagesRequest(BaseModel):
  15. wxid: str
  16. content:str
  17. imageUrls:list
  18. class SendVideoRequest(BaseModel):
  19. wxid: str
  20. content:str
  21. videoUrl:str
  22. videoThumbUrl:str
  23. async def auth_required_time(request: Request,wxid:str):
  24. if not wxid:
  25. return {"code": 400, "message": "wxid 不能为空"}
  26. # 模拟获取登录信息
  27. k, loginfo = await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid)
  28. if not loginfo:
  29. return {"code": 404, "message": f"{wxid} 微信信息不存在"}
  30. login_status = loginfo.get('status', '0')
  31. if login_status != '1':
  32. return {"code": 401, "message": f"{wxid} 已经离线"}
  33. creation_timestamp = int(loginfo.get('create_at', time.time()))
  34. current_timestamp = time.time()
  35. three_days_seconds = 3 * 24 * 60 * 60 # 三天的秒数
  36. diff_flag = (current_timestamp - creation_timestamp) >= three_days_seconds
  37. if not diff_flag:
  38. return {'code': 401, 'message': '用户创建不够三天,不能使用该功能'}
  39. return k, loginfo
  40. @sns_router.post("/sendtext", response_model=None)
  41. async def send_text(request: Request, body: SendTextRequest, ):
  42. wxid = body.wxid
  43. content = body.content
  44. auth = await auth_required_time(request, wxid)
  45. if isinstance(auth, Dict):
  46. return auth
  47. k, loginfo = auth
  48. token_id = loginfo.get('tokenId')
  49. app_id = loginfo.get('appId')
  50. ret, msg, data = await request.app.state.gewe_service.send_text_sns_async(token_id, app_id, content)
  51. if ret != 200:
  52. return {
  53. 'code': ret,
  54. 'message': msg
  55. }
  56. return data
  57. @sns_router.post("/sendimages", response_model=None)
  58. async def send_text(request: Request, body: SendImagesRequest, ):
  59. wxid = body.wxid
  60. content = body.content
  61. image_urls=body.imageUrls
  62. auth = await auth_required_time(request, wxid)
  63. if isinstance(auth, Dict):
  64. return auth
  65. k, loginfo = auth
  66. token_id = loginfo.get('tokenId')
  67. app_id = loginfo.get('appId')
  68. ret, msg, data =await request.app.state.gewe_service.upload_sns_image_async(token_id, app_id, image_urls)
  69. if ret != 200:
  70. return {
  71. 'code': ret,
  72. 'message': msg
  73. }
  74. ret, msg, data = await request.app.state.gewe_service.send_image_sns_async(token_id, app_id, content,data)
  75. if ret != 200:
  76. return {
  77. 'code': ret,
  78. 'message': msg
  79. }
  80. return data
  81. @sns_router.post("/sendvideo", response_model=None)
  82. async def send_video(request: Request, body: SendVideoRequest, ):
  83. wxid = body.wxid
  84. content = body.content
  85. video_url=body.videoUrl
  86. video_thumb_url=body.videoThumbUrl
  87. auth = await auth_required_time(request, wxid)
  88. if isinstance(auth, Dict):
  89. return auth
  90. k, loginfo = auth
  91. token_id = loginfo.get('tokenId')
  92. app_id = loginfo.get('appId')
  93. ret, msg, data = await request.app.state.gewe_service.upload_sns_video_async(token_id, app_id, video_url,video_thumb_url)
  94. if ret != 200:
  95. return {
  96. 'code': ret,
  97. 'message': msg
  98. }
  99. ret, msg, data = await request.app.state.gewe_service.send_video_sns_async(token_id, app_id, content,data)
  100. if ret != 200:
  101. return {
  102. 'code': ret,
  103. 'message': msg
  104. }
  105. return data