mock_platform.py 4.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from __future__ import annotations
  2. from typing import Any
  3. from content_agent.integrations.douyin import RAW_AUTHOR_ID_KEY, RAW_CONTENT_ID_KEY
  4. class MockPlatformClient:
  5. """Deterministic platform client used before real Douyin access exists."""
  6. def search(self, query: dict[str, Any]) -> list[dict[str, Any]]:
  7. search_query_id = query["search_query_id"]
  8. if search_query_id == "q_001":
  9. return [
  10. {
  11. "content_discovery_id": "content_001",
  12. "search_query_id": search_query_id,
  13. "platform": "douyin",
  14. "platform_content_id": "7390000000000000000",
  15. "platform_content_format": "video",
  16. "description": "对比分析类人物故事观察",
  17. "platform_author_id": "MS4wLjABAAAA001",
  18. "author_display_name": "人物故事观察",
  19. "statistics": {"digg_count": 9000, "comment_count": 800, "share_count": 700},
  20. "tags": ["#人物故事"],
  21. "score": 72,
  22. "age_50_plus_level": "medium",
  23. "risk_level": "low",
  24. "availability": "available",
  25. "portrait_available": True,
  26. "pattern_recall": "matched",
  27. "category_or_element_binding": "matched",
  28. "discovery_relation": "mock_pattern_matched",
  29. "discovery_start_source": "pattern_itemset",
  30. "previous_discovery_step": "search_query_direct",
  31. "content_metadata_source": "mock_platform_search",
  32. "platform_raw_payload": {
  33. RAW_CONTENT_ID_KEY: "7390000000000000000",
  34. "author": {RAW_AUTHOR_ID_KEY: "MS4wLjABAAAA001"},
  35. },
  36. },
  37. {
  38. "content_discovery_id": "content_099",
  39. "search_query_id": search_query_id,
  40. "platform": "douyin",
  41. "platform_content_id": "7390000000000000099",
  42. "platform_content_format": "video",
  43. "description": "缺少画像的低可信发现内容",
  44. "platform_author_id": "MS4wLjABAAAA099",
  45. "author_display_name": "未知作者",
  46. "statistics": {"digg_count": 12, "comment_count": 0, "share_count": 1},
  47. "tags": [],
  48. "score": None,
  49. "age_50_plus_level": "missing",
  50. "risk_level": "unknown",
  51. "portrait_available": False,
  52. "pattern_recall": "matched",
  53. "category_or_element_binding": "matched",
  54. "discovery_relation": "mock_pattern_matched",
  55. "discovery_start_source": "pattern_itemset",
  56. "previous_discovery_step": "search_query_direct",
  57. "content_metadata_source": "mock_platform_search",
  58. "platform_raw_payload": {
  59. RAW_CONTENT_ID_KEY: "7390000000000000099",
  60. "author": {RAW_AUTHOR_ID_KEY: "MS4wLjABAAAA099"},
  61. },
  62. },
  63. ]
  64. return [
  65. {
  66. "content_discovery_id": "content_002",
  67. "search_query_id": search_query_id,
  68. "platform": "douyin",
  69. "platform_content_id": "7390000000000000001",
  70. "platform_content_format": "video",
  71. "description": "同主题延展发现内容",
  72. "platform_author_id": "MS4wLjABAAAA002",
  73. "author_display_name": "主题观察",
  74. "statistics": {"digg_count": 3000, "comment_count": 20, "share_count": 70},
  75. "tags": ["#基层治理"],
  76. "score": 55,
  77. "age_50_plus_level": "medium",
  78. "risk_level": "low",
  79. "availability": "available",
  80. "portrait_available": True,
  81. "pattern_recall": "matched",
  82. "category_or_element_binding": "matched",
  83. "discovery_relation": "mock_pattern_matched",
  84. "discovery_start_source": "pattern_itemset",
  85. "previous_discovery_step": "search_query_direct",
  86. "content_metadata_source": "mock_platform_search",
  87. "platform_raw_payload": {
  88. RAW_CONTENT_ID_KEY: "7390000000000000001",
  89. "author": {RAW_AUTHOR_ID_KEY: "MS4wLjABAAAA002"},
  90. },
  91. }
  92. ]