dify_api.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from logger_config import logger
  2. import requests
  3. class ChatHistoryCollector:
  4. """聊天历史数据收集器"""
  5. def __init__(self, limit=100, timeout=5):
  6. # 聊天历史API的URL和请求头
  7. self.base_url = "https://newaterobot.gtwater.cn/v1/conversations"
  8. self.headers = {
  9. 'Authorization': 'Bearer app-qpPo2VXUAnPxKOIQm4NrytaL',
  10. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36'
  11. }
  12. self.logger = logger
  13. self.limit = limit
  14. self.timeout = timeout
  15. def collect(self, user='admin', sort_by='-updated_at', last_id=None, timeout=30):
  16. """
  17. 收集聊天历史数据
  18. :param timeout: 延时等待事时间
  19. :param user: 用户名,默认为'admin'
  20. :param sort_by: 排序字段,默认为'-updated_at'
  21. :param last_id: 最后一条数据的ID,用于分页,默认为None
  22. :return: 收集到的聊天历史数据
  23. """
  24. params = {'user': user, 'limit': self.limit, 'sort_by': sort_by}
  25. if last_id:
  26. params['last_id'] = last_id
  27. try:
  28. self.logger.info("开始访问聊天历史API")
  29. # 发送带认证头的请求
  30. response = requests.get(self.base_url, headers=self.headers,params=params, timeout=timeout)
  31. if response.status_code == 200:
  32. self.logger.info(f"访问成功,状态码: {response.status_code}")
  33. # 打印响应内容
  34. try:
  35. response_data = response.json()
  36. self.logger.info(f"返回数据: {len(response_data.get('data', []))}条")
  37. # 返回是否存在更多数据,和数据列表
  38. return response_data.get('has_more', False), response_data.get('data', [])
  39. except Exception as e:
  40. self.logger.info(f"返回内容: {response.text}", "捕获异常: ", e)
  41. else:
  42. self.logger.warning(f"访问失败,状态码: {response.status_code}")
  43. except requests.exceptions.RequestException as e:
  44. self.logger.error(f"请求异常: {str(e)}")
  45. except Exception as e:
  46. self.logger.error(f"其他错误: {str(e)}")
  47. if __name__ == '__main__':
  48. # 创建一个聊天历史数据收集器对象
  49. collector = ChatHistoryCollector()
  50. collector.collect()