@tikomni/skills 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/.skill-package-allowlist.txt +1 -3
  2. package/README.md +41 -49
  3. package/README.zh-CN.md +43 -51
  4. package/bin/tikomni-skills.js +2 -2
  5. package/env.example +37 -56
  6. package/package.json +7 -5
  7. package/skills/social-media-crawl/SKILL.md +53 -0
  8. package/skills/social-media-crawl/agents/openai.yaml +5 -0
  9. package/skills/social-media-crawl/references/contracts/output-envelope.md +22 -0
  10. package/skills/social-media-crawl/references/contracts/work-fact-card-fields.md +48 -0
  11. package/skills/social-media-crawl/references/guides/generic-mcp-objects.md +30 -0
  12. package/skills/social-media-crawl/references/mcp-usage-contract.md +30 -0
  13. package/skills/social-media-crawl/references/pipelines/douyin-creator-home.md +7 -0
  14. package/skills/social-media-crawl/references/pipelines/douyin-single-work.md +7 -0
  15. package/skills/social-media-crawl/references/pipelines/xiaohongshu-creator-home.md +7 -0
  16. package/skills/social-media-crawl/references/pipelines/xiaohongshu-single-work.md +7 -0
  17. package/skills/social-media-crawl/references/schemas/creator-profile.schema.json +33 -0
  18. package/skills/social-media-crawl/references/schemas/output-envelope.schema.json +41 -0
  19. package/skills/social-media-crawl/references/schemas/work-collection.schema.json +29 -0
  20. package/skills/social-media-crawl/references/schemas/work-fact-card.schema.json +67 -0
  21. package/skills/social-media-crawl/references/service-guides/u2-u3-mandatory-fallback.md +21 -0
  22. package/skills/social-media-crawl/scripts/__init__.py +2 -0
  23. package/skills/social-media-crawl/scripts/core/__init__.py +2 -0
  24. package/skills/{single-work-analysis/scripts/pipeline/asr → social-media-crawl/scripts/core}/asr_pipeline.py +98 -2
  25. package/skills/social-media-crawl/scripts/core/completeness.py +83 -0
  26. package/skills/{single-work-analysis → social-media-crawl}/scripts/core/config_loader.py +106 -141
  27. package/skills/social-media-crawl/scripts/core/mcp_dispatch.py +145 -0
  28. package/skills/social-media-crawl/scripts/core/object_detection.py +63 -0
  29. package/skills/{single-work-analysis/scripts/pipeline/asr → social-media-crawl/scripts/core}/poll_u2_task.py +3 -1
  30. package/skills/{creator-analysis → social-media-crawl}/scripts/core/progress_report.py +32 -0
  31. package/skills/social-media-crawl/scripts/core/storage_router.py +160 -0
  32. package/skills/social-media-crawl/scripts/core/u3_fallback.py +328 -0
  33. package/skills/social-media-crawl/scripts/pipelines/__init__.py +2 -0
  34. package/skills/social-media-crawl/scripts/pipelines/douyin_creator_home_helpers.py +35 -0
  35. package/skills/social-media-crawl/scripts/pipelines/douyin_platform_adapter.py +7 -0
  36. package/skills/{creator-analysis/scripts/author_home/asr → social-media-crawl/scripts/pipelines}/home_asr.py +1 -1
  37. package/skills/{creator-analysis/scripts/author_home/adapters → social-media-crawl/scripts/pipelines}/platform_adapters.py +8 -2
  38. package/skills/social-media-crawl/scripts/pipelines/run_douyin_creator_home.py +237 -0
  39. package/skills/{single-work-analysis/scripts/platform/douyin/run_douyin_single_video.py → social-media-crawl/scripts/pipelines/run_douyin_single_work.py} +58 -149
  40. package/skills/social-media-crawl/scripts/pipelines/run_xiaohongshu_creator_home.py +237 -0
  41. package/skills/{single-work-analysis/scripts/platform/xiaohongshu/run_xiaohongshu_extract.py → social-media-crawl/scripts/pipelines/run_xiaohongshu_single_work.py} +30 -119
  42. package/skills/{creator-analysis/scripts/author_home → social-media-crawl/scripts/pipelines}/schema.py +1 -1
  43. package/skills/social-media-crawl/scripts/pipelines/xiaohongshu_creator_home_helpers.py +35 -0
  44. package/skills/social-media-crawl/scripts/pipelines/xiaohongshu_platform_adapter.py +7 -0
  45. package/skills/social-media-crawl/scripts/writers/__init__.py +1 -0
  46. package/skills/social-media-crawl/scripts/writers/write_work_fact_card.py +391 -0
  47. package/skills/creator-analysis/SKILL.md +0 -95
  48. package/skills/creator-analysis/agents/openai.yaml +0 -4
  49. package/skills/creator-analysis/env.example +0 -36
  50. package/skills/creator-analysis/references/api-capability-index.md +0 -92
  51. package/skills/creator-analysis/references/api-contracts/asr-api.md +0 -130
  52. package/skills/creator-analysis/references/api-contracts/bilibili-app-api.md +0 -776
  53. package/skills/creator-analysis/references/api-contracts/bilibili-web-api.md +0 -2017
  54. package/skills/creator-analysis/references/api-contracts/demo-api.md +0 -717
  55. package/skills/creator-analysis/references/api-contracts/douyin-app-v3-api.md +0 -3594
  56. package/skills/creator-analysis/references/api-contracts/douyin-billboard-api.md +0 -2274
  57. package/skills/creator-analysis/references/api-contracts/douyin-creator-api.md +0 -1575
  58. package/skills/creator-analysis/references/api-contracts/douyin-creator-v2-api.md +0 -3254
  59. package/skills/creator-analysis/references/api-contracts/douyin-search-api.md +0 -4118
  60. package/skills/creator-analysis/references/api-contracts/douyin-web-api.md +0 -5544
  61. package/skills/creator-analysis/references/api-contracts/douyin-xingtu-api.md +0 -1916
  62. package/skills/creator-analysis/references/api-contracts/douyin-xingtu-v2-api.md +0 -1540
  63. package/skills/creator-analysis/references/api-contracts/health-check.md +0 -69
  64. package/skills/creator-analysis/references/api-contracts/hybrid-parsing.md +0 -78
  65. package/skills/creator-analysis/references/api-contracts/instagram-v1-api.md +0 -2256
  66. package/skills/creator-analysis/references/api-contracts/instagram-v2-api.md +0 -2011
  67. package/skills/creator-analysis/references/api-contracts/instagram-v3-api.md +0 -2630
  68. package/skills/creator-analysis/references/api-contracts/ios-shortcut.md +0 -44
  69. package/skills/creator-analysis/references/api-contracts/kuaishou-app-api.md +0 -1518
  70. package/skills/creator-analysis/references/api-contracts/kuaishou-web-api.md +0 -1242
  71. package/skills/creator-analysis/references/api-contracts/lemon8-app-api.md +0 -1088
  72. package/skills/creator-analysis/references/api-contracts/linkedin-web-api.md +0 -1949
  73. package/skills/creator-analysis/references/api-contracts/media-ingest-api.md +0 -126
  74. package/skills/creator-analysis/references/api-contracts/pipixia-app-api.md +0 -1142
  75. package/skills/creator-analysis/references/api-contracts/reddit-app-api.md +0 -2025
  76. package/skills/creator-analysis/references/api-contracts/sora2-api.md +0 -2266
  77. package/skills/creator-analysis/references/api-contracts/temp-mail-api.md +0 -208
  78. package/skills/creator-analysis/references/api-contracts/threads-web-api.md +0 -897
  79. package/skills/creator-analysis/references/api-contracts/tikhub-downloader-api.md +0 -134
  80. package/skills/creator-analysis/references/api-contracts/tikhub-user-api.md +0 -494
  81. package/skills/creator-analysis/references/api-contracts/tiktok-ads-api.md +0 -5947
  82. package/skills/creator-analysis/references/api-contracts/tiktok-analytics-api.md +0 -968
  83. package/skills/creator-analysis/references/api-contracts/tiktok-app-v3-api.md +0 -5735
  84. package/skills/creator-analysis/references/api-contracts/tiktok-creator-api.md +0 -1951
  85. package/skills/creator-analysis/references/api-contracts/tiktok-interaction-api.md +0 -742
  86. package/skills/creator-analysis/references/api-contracts/tiktok-shop-web-api.md +0 -1890
  87. package/skills/creator-analysis/references/api-contracts/tiktok-web-api.md +0 -4448
  88. package/skills/creator-analysis/references/api-contracts/toutiao-app-api.md +0 -342
  89. package/skills/creator-analysis/references/api-contracts/toutiao-web-api.md +0 -143
  90. package/skills/creator-analysis/references/api-contracts/twitter-web-api.md +0 -989
  91. package/skills/creator-analysis/references/api-contracts/wechat-channels-api.md +0 -809
  92. package/skills/creator-analysis/references/api-contracts/wechat-media-platform-web-api.md +0 -677
  93. package/skills/creator-analysis/references/api-contracts/weibo-app-api.md +0 -1547
  94. package/skills/creator-analysis/references/api-contracts/weibo-web-api.md +0 -798
  95. package/skills/creator-analysis/references/api-contracts/weibo-web-v2-api.md +0 -2459
  96. package/skills/creator-analysis/references/api-contracts/xiaohongshu-app-api.md +0 -1291
  97. package/skills/creator-analysis/references/api-contracts/xiaohongshu-app-v2-api.md +0 -1683
  98. package/skills/creator-analysis/references/api-contracts/xiaohongshu-web-api.md +0 -1324
  99. package/skills/creator-analysis/references/api-contracts/xiaohongshu-web-v2-api.md +0 -1209
  100. package/skills/creator-analysis/references/api-contracts/xigua-app-v2-api.md +0 -489
  101. package/skills/creator-analysis/references/api-contracts/youtube-web-api.md +0 -2636
  102. package/skills/creator-analysis/references/api-contracts/youtube-web-v2-api.md +0 -2660
  103. package/skills/creator-analysis/references/api-contracts/zhihu-web-api.md +0 -2315
  104. package/skills/creator-analysis/references/api-tags/asr-api.md +0 -100
  105. package/skills/creator-analysis/references/api-tags/bilibili-app-api.md +0 -482
  106. package/skills/creator-analysis/references/api-tags/bilibili-web-api.md +0 -1267
  107. package/skills/creator-analysis/references/api-tags/demo-api.md +0 -365
  108. package/skills/creator-analysis/references/api-tags/douyin-app-v3-api.md +0 -2012
  109. package/skills/creator-analysis/references/api-tags/douyin-billboard-api.md +0 -1428
  110. package/skills/creator-analysis/references/api-tags/douyin-creator-api.md +0 -694
  111. package/skills/creator-analysis/references/api-tags/douyin-creator-v2-api.md +0 -694
  112. package/skills/creator-analysis/references/api-tags/douyin-search-api.md +0 -1059
  113. package/skills/creator-analysis/references/api-tags/douyin-web-api.md +0 -3314
  114. package/skills/creator-analysis/references/api-tags/douyin-xingtu-api.md +0 -935
  115. package/skills/creator-analysis/references/api-tags/douyin-xingtu-v2-api.md +0 -925
  116. package/skills/creator-analysis/references/api-tags/health-check.md +0 -40
  117. package/skills/creator-analysis/references/api-tags/hybrid-parsing.md +0 -57
  118. package/skills/creator-analysis/references/api-tags/instagram-v1-api.md +0 -1224
  119. package/skills/creator-analysis/references/api-tags/instagram-v2-api.md +0 -1147
  120. package/skills/creator-analysis/references/api-tags/instagram-v3-api.md +0 -1123
  121. package/skills/creator-analysis/references/api-tags/ios-shortcut.md +0 -45
  122. package/skills/creator-analysis/references/api-tags/kuaishou-app-api.md +0 -846
  123. package/skills/creator-analysis/references/api-tags/kuaishou-web-api.md +0 -551
  124. package/skills/creator-analysis/references/api-tags/lemon8-app-api.md +0 -687
  125. package/skills/creator-analysis/references/api-tags/linkedin-web-api.md +0 -1105
  126. package/skills/creator-analysis/references/api-tags/media-ingest-api.md +0 -112
  127. package/skills/creator-analysis/references/api-tags/pipixia-app-api.md +0 -721
  128. package/skills/creator-analysis/references/api-tags/reddit-app-api.md +0 -1057
  129. package/skills/creator-analysis/references/api-tags/sora2-api.md +0 -737
  130. package/skills/creator-analysis/references/api-tags/temp-mail-api.md +0 -136
  131. package/skills/creator-analysis/references/api-tags/threads-web-api.md +0 -472
  132. package/skills/creator-analysis/references/api-tags/tikhub-downloader-api.md +0 -65
  133. package/skills/creator-analysis/references/api-tags/tikhub-user-api.md +0 -253
  134. package/skills/creator-analysis/references/api-tags/tiktok-ads-api.md +0 -1393
  135. package/skills/creator-analysis/references/api-tags/tiktok-analytics-api.md +0 -179
  136. package/skills/creator-analysis/references/api-tags/tiktok-app-v3-api.md +0 -3264
  137. package/skills/creator-analysis/references/api-tags/tiktok-creator-api.md +0 -709
  138. package/skills/creator-analysis/references/api-tags/tiktok-interaction-api.md +0 -366
  139. package/skills/creator-analysis/references/api-tags/tiktok-shop-web-api.md +0 -663
  140. package/skills/creator-analysis/references/api-tags/tiktok-web-api.md +0 -2516
  141. package/skills/creator-analysis/references/api-tags/toutiao-app-api.md +0 -220
  142. package/skills/creator-analysis/references/api-tags/toutiao-web-api.md +0 -96
  143. package/skills/creator-analysis/references/api-tags/twitter-web-api.md +0 -562
  144. package/skills/creator-analysis/references/api-tags/wechat-channels-api.md +0 -405
  145. package/skills/creator-analysis/references/api-tags/wechat-media-platform-web-api.md +0 -431
  146. package/skills/creator-analysis/references/api-tags/weibo-app-api.md +0 -851
  147. package/skills/creator-analysis/references/api-tags/weibo-web-api.md +0 -470
  148. package/skills/creator-analysis/references/api-tags/weibo-web-v2-api.md +0 -1405
  149. package/skills/creator-analysis/references/api-tags/xiaohongshu-app-api.md +0 -534
  150. package/skills/creator-analysis/references/api-tags/xiaohongshu-app-v2-api.md +0 -934
  151. package/skills/creator-analysis/references/api-tags/xiaohongshu-web-api.md +0 -757
  152. package/skills/creator-analysis/references/api-tags/xiaohongshu-web-v2-api.md +0 -762
  153. package/skills/creator-analysis/references/api-tags/xigua-app-v2-api.md +0 -308
  154. package/skills/creator-analysis/references/api-tags/youtube-web-api.md +0 -934
  155. package/skills/creator-analysis/references/api-tags/youtube-web-v2-api.md +0 -717
  156. package/skills/creator-analysis/references/api-tags/zhihu-web-api.md +0 -1384
  157. package/skills/creator-analysis/references/asr-orchestration.md +0 -33
  158. package/skills/creator-analysis/references/config-templates/defaults.yaml +0 -60
  159. package/skills/creator-analysis/references/contracts/creator-card-fields.md +0 -25
  160. package/skills/creator-analysis/references/contracts/work-card-fields.md +0 -68
  161. package/skills/creator-analysis/references/platform-guides/douyin.md +0 -54
  162. package/skills/creator-analysis/references/platform-guides/generic.md +0 -50
  163. package/skills/creator-analysis/references/platform-guides/xiaohongshu.md +0 -69
  164. package/skills/creator-analysis/references/prompt-contracts/asr-clean.md +0 -28
  165. package/skills/creator-analysis/references/prompt-contracts/author-analysis-v2.md +0 -46
  166. package/skills/creator-analysis/references/prompt-contracts/author-analysis.md +0 -49
  167. package/skills/creator-analysis/references/prompt-contracts/cta.md +0 -24
  168. package/skills/creator-analysis/references/prompt-contracts/hook.md +0 -25
  169. package/skills/creator-analysis/references/prompt-contracts/insight.md +0 -47
  170. package/skills/creator-analysis/references/prompt-contracts/sampled-work-batch-explanations.md +0 -30
  171. package/skills/creator-analysis/references/prompt-contracts/structure.md +0 -25
  172. package/skills/creator-analysis/references/prompt-contracts/style.md +0 -27
  173. package/skills/creator-analysis/references/prompt-contracts/summary.md +0 -29
  174. package/skills/creator-analysis/references/prompt-contracts/topic.md +0 -29
  175. package/skills/creator-analysis/references/schemas/author-analysis-input-v1.schema.json +0 -325
  176. package/skills/creator-analysis/references/schemas/author-analysis-v2.schema.json +0 -287
  177. package/skills/creator-analysis/references/schemas/sampled-work-batch-explanations.schema.json +0 -41
  178. package/skills/creator-analysis/references/service-guides/asr-u2-u3-fallback.md +0 -75
  179. package/skills/creator-analysis/references/workflow.md +0 -23
  180. package/skills/creator-analysis/scripts/__init__.py +0 -0
  181. package/skills/creator-analysis/scripts/author_home/__init__.py +0 -0
  182. package/skills/creator-analysis/scripts/author_home/adapters/__init__.py +0 -0
  183. package/skills/creator-analysis/scripts/author_home/analyzers/__init__.py +0 -0
  184. package/skills/creator-analysis/scripts/author_home/analyzers/author_analysis_v2_support.py +0 -1165
  185. package/skills/creator-analysis/scripts/author_home/analyzers/prompt_first_analyzers.py +0 -447
  186. package/skills/creator-analysis/scripts/author_home/analyzers/sampled_work_batch_explainer.py +0 -331
  187. package/skills/creator-analysis/scripts/author_home/asr/__init__.py +0 -5
  188. package/skills/creator-analysis/scripts/author_home/builders/__init__.py +0 -0
  189. package/skills/creator-analysis/scripts/author_home/builders/home_builders.py +0 -213
  190. package/skills/creator-analysis/scripts/author_home/collectors/__init__.py +0 -0
  191. package/skills/creator-analysis/scripts/author_home/orchestrator/__init__.py +0 -0
  192. package/skills/creator-analysis/scripts/author_home/orchestrator/run_author_analysis.py +0 -834
  193. package/skills/creator-analysis/scripts/author_home/orchestrator/work_analysis_artifacts.py +0 -609
  194. package/skills/creator-analysis/scripts/core/__init__.py +0 -0
  195. package/skills/creator-analysis/scripts/core/analysis_pipeline.py +0 -133
  196. package/skills/creator-analysis/scripts/core/config_loader.py +0 -418
  197. package/skills/creator-analysis/scripts/core/storage_router.py +0 -256
  198. package/skills/creator-analysis/scripts/core/tikomni_common.py +0 -588
  199. package/skills/creator-analysis/scripts/pipeline/__init__.py +0 -0
  200. package/skills/creator-analysis/scripts/pipeline/asr/__init__.py +0 -0
  201. package/skills/creator-analysis/scripts/pipeline/asr/asr_pipeline.py +0 -1189
  202. package/skills/creator-analysis/scripts/pipeline/asr/poll_u2_task.py +0 -95
  203. package/skills/creator-analysis/scripts/platform/__init__.py +0 -0
  204. package/skills/creator-analysis/scripts/platform/douyin/__init__.py +0 -0
  205. package/skills/creator-analysis/scripts/platform/douyin/run_douyin_single_video.py +0 -1208
  206. package/skills/creator-analysis/scripts/platform/xiaohongshu/__init__.py +0 -0
  207. package/skills/creator-analysis/scripts/platform/xiaohongshu/run_xiaohongshu_extract.py +0 -2128
  208. package/skills/creator-analysis/scripts/writers/__init__.py +0 -0
  209. package/skills/creator-analysis/scripts/writers/write_author_homepage_samples.py +0 -107
  210. package/skills/creator-analysis/scripts/writers/write_benchmark_card.py +0 -1579
  211. package/skills/meta-capability/SKILL.md +0 -69
  212. package/skills/meta-capability/agents/openai.yaml +0 -4
  213. package/skills/meta-capability/env.example +0 -42
  214. package/skills/meta-capability/references/api-capability-index.md +0 -92
  215. package/skills/meta-capability/references/api-contracts/asr-api.md +0 -130
  216. package/skills/meta-capability/references/api-contracts/bilibili-app-api.md +0 -776
  217. package/skills/meta-capability/references/api-contracts/bilibili-web-api.md +0 -2017
  218. package/skills/meta-capability/references/api-contracts/demo-api.md +0 -717
  219. package/skills/meta-capability/references/api-contracts/douyin-app-v3-api.md +0 -3594
  220. package/skills/meta-capability/references/api-contracts/douyin-billboard-api.md +0 -2274
  221. package/skills/meta-capability/references/api-contracts/douyin-creator-api.md +0 -1575
  222. package/skills/meta-capability/references/api-contracts/douyin-creator-v2-api.md +0 -3254
  223. package/skills/meta-capability/references/api-contracts/douyin-search-api.md +0 -4118
  224. package/skills/meta-capability/references/api-contracts/douyin-web-api.md +0 -5544
  225. package/skills/meta-capability/references/api-contracts/douyin-xingtu-api.md +0 -1916
  226. package/skills/meta-capability/references/api-contracts/douyin-xingtu-v2-api.md +0 -1540
  227. package/skills/meta-capability/references/api-contracts/health-check.md +0 -69
  228. package/skills/meta-capability/references/api-contracts/hybrid-parsing.md +0 -78
  229. package/skills/meta-capability/references/api-contracts/instagram-v1-api.md +0 -2256
  230. package/skills/meta-capability/references/api-contracts/instagram-v2-api.md +0 -2011
  231. package/skills/meta-capability/references/api-contracts/instagram-v3-api.md +0 -2630
  232. package/skills/meta-capability/references/api-contracts/ios-shortcut.md +0 -44
  233. package/skills/meta-capability/references/api-contracts/kuaishou-app-api.md +0 -1518
  234. package/skills/meta-capability/references/api-contracts/kuaishou-web-api.md +0 -1242
  235. package/skills/meta-capability/references/api-contracts/lemon8-app-api.md +0 -1088
  236. package/skills/meta-capability/references/api-contracts/linkedin-web-api.md +0 -1949
  237. package/skills/meta-capability/references/api-contracts/media-ingest-api.md +0 -126
  238. package/skills/meta-capability/references/api-contracts/pipixia-app-api.md +0 -1142
  239. package/skills/meta-capability/references/api-contracts/reddit-app-api.md +0 -2025
  240. package/skills/meta-capability/references/api-contracts/sora2-api.md +0 -2266
  241. package/skills/meta-capability/references/api-contracts/temp-mail-api.md +0 -208
  242. package/skills/meta-capability/references/api-contracts/threads-web-api.md +0 -897
  243. package/skills/meta-capability/references/api-contracts/tikhub-downloader-api.md +0 -134
  244. package/skills/meta-capability/references/api-contracts/tikhub-user-api.md +0 -494
  245. package/skills/meta-capability/references/api-contracts/tiktok-ads-api.md +0 -5947
  246. package/skills/meta-capability/references/api-contracts/tiktok-analytics-api.md +0 -968
  247. package/skills/meta-capability/references/api-contracts/tiktok-app-v3-api.md +0 -5735
  248. package/skills/meta-capability/references/api-contracts/tiktok-creator-api.md +0 -1951
  249. package/skills/meta-capability/references/api-contracts/tiktok-interaction-api.md +0 -742
  250. package/skills/meta-capability/references/api-contracts/tiktok-shop-web-api.md +0 -1890
  251. package/skills/meta-capability/references/api-contracts/tiktok-web-api.md +0 -4448
  252. package/skills/meta-capability/references/api-contracts/toutiao-app-api.md +0 -342
  253. package/skills/meta-capability/references/api-contracts/toutiao-web-api.md +0 -143
  254. package/skills/meta-capability/references/api-contracts/twitter-web-api.md +0 -989
  255. package/skills/meta-capability/references/api-contracts/wechat-channels-api.md +0 -809
  256. package/skills/meta-capability/references/api-contracts/wechat-media-platform-web-api.md +0 -677
  257. package/skills/meta-capability/references/api-contracts/weibo-app-api.md +0 -1547
  258. package/skills/meta-capability/references/api-contracts/weibo-web-api.md +0 -798
  259. package/skills/meta-capability/references/api-contracts/weibo-web-v2-api.md +0 -2459
  260. package/skills/meta-capability/references/api-contracts/xiaohongshu-app-api.md +0 -1291
  261. package/skills/meta-capability/references/api-contracts/xiaohongshu-app-v2-api.md +0 -1683
  262. package/skills/meta-capability/references/api-contracts/xiaohongshu-web-api.md +0 -1324
  263. package/skills/meta-capability/references/api-contracts/xiaohongshu-web-v2-api.md +0 -1209
  264. package/skills/meta-capability/references/api-contracts/xigua-app-v2-api.md +0 -489
  265. package/skills/meta-capability/references/api-contracts/youtube-web-api.md +0 -2636
  266. package/skills/meta-capability/references/api-contracts/youtube-web-v2-api.md +0 -2660
  267. package/skills/meta-capability/references/api-contracts/zhihu-web-api.md +0 -2315
  268. package/skills/meta-capability/references/api-tags/asr-api.md +0 -100
  269. package/skills/meta-capability/references/api-tags/bilibili-app-api.md +0 -482
  270. package/skills/meta-capability/references/api-tags/bilibili-web-api.md +0 -1267
  271. package/skills/meta-capability/references/api-tags/demo-api.md +0 -365
  272. package/skills/meta-capability/references/api-tags/douyin-app-v3-api.md +0 -2012
  273. package/skills/meta-capability/references/api-tags/douyin-billboard-api.md +0 -1428
  274. package/skills/meta-capability/references/api-tags/douyin-creator-api.md +0 -694
  275. package/skills/meta-capability/references/api-tags/douyin-creator-v2-api.md +0 -694
  276. package/skills/meta-capability/references/api-tags/douyin-search-api.md +0 -1059
  277. package/skills/meta-capability/references/api-tags/douyin-web-api.md +0 -3314
  278. package/skills/meta-capability/references/api-tags/douyin-xingtu-api.md +0 -935
  279. package/skills/meta-capability/references/api-tags/douyin-xingtu-v2-api.md +0 -925
  280. package/skills/meta-capability/references/api-tags/health-check.md +0 -40
  281. package/skills/meta-capability/references/api-tags/hybrid-parsing.md +0 -57
  282. package/skills/meta-capability/references/api-tags/instagram-v1-api.md +0 -1224
  283. package/skills/meta-capability/references/api-tags/instagram-v2-api.md +0 -1147
  284. package/skills/meta-capability/references/api-tags/instagram-v3-api.md +0 -1123
  285. package/skills/meta-capability/references/api-tags/ios-shortcut.md +0 -45
  286. package/skills/meta-capability/references/api-tags/kuaishou-app-api.md +0 -846
  287. package/skills/meta-capability/references/api-tags/kuaishou-web-api.md +0 -551
  288. package/skills/meta-capability/references/api-tags/lemon8-app-api.md +0 -687
  289. package/skills/meta-capability/references/api-tags/linkedin-web-api.md +0 -1105
  290. package/skills/meta-capability/references/api-tags/media-ingest-api.md +0 -112
  291. package/skills/meta-capability/references/api-tags/pipixia-app-api.md +0 -721
  292. package/skills/meta-capability/references/api-tags/reddit-app-api.md +0 -1057
  293. package/skills/meta-capability/references/api-tags/sora2-api.md +0 -737
  294. package/skills/meta-capability/references/api-tags/temp-mail-api.md +0 -136
  295. package/skills/meta-capability/references/api-tags/threads-web-api.md +0 -472
  296. package/skills/meta-capability/references/api-tags/tikhub-downloader-api.md +0 -65
  297. package/skills/meta-capability/references/api-tags/tikhub-user-api.md +0 -253
  298. package/skills/meta-capability/references/api-tags/tiktok-ads-api.md +0 -1393
  299. package/skills/meta-capability/references/api-tags/tiktok-analytics-api.md +0 -179
  300. package/skills/meta-capability/references/api-tags/tiktok-app-v3-api.md +0 -3264
  301. package/skills/meta-capability/references/api-tags/tiktok-creator-api.md +0 -709
  302. package/skills/meta-capability/references/api-tags/tiktok-interaction-api.md +0 -366
  303. package/skills/meta-capability/references/api-tags/tiktok-shop-web-api.md +0 -663
  304. package/skills/meta-capability/references/api-tags/tiktok-web-api.md +0 -2516
  305. package/skills/meta-capability/references/api-tags/toutiao-app-api.md +0 -220
  306. package/skills/meta-capability/references/api-tags/toutiao-web-api.md +0 -96
  307. package/skills/meta-capability/references/api-tags/twitter-web-api.md +0 -562
  308. package/skills/meta-capability/references/api-tags/wechat-channels-api.md +0 -405
  309. package/skills/meta-capability/references/api-tags/wechat-media-platform-web-api.md +0 -431
  310. package/skills/meta-capability/references/api-tags/weibo-app-api.md +0 -851
  311. package/skills/meta-capability/references/api-tags/weibo-web-api.md +0 -470
  312. package/skills/meta-capability/references/api-tags/weibo-web-v2-api.md +0 -1405
  313. package/skills/meta-capability/references/api-tags/xiaohongshu-app-api.md +0 -534
  314. package/skills/meta-capability/references/api-tags/xiaohongshu-app-v2-api.md +0 -934
  315. package/skills/meta-capability/references/api-tags/xiaohongshu-web-api.md +0 -757
  316. package/skills/meta-capability/references/api-tags/xiaohongshu-web-v2-api.md +0 -762
  317. package/skills/meta-capability/references/api-tags/xigua-app-v2-api.md +0 -308
  318. package/skills/meta-capability/references/api-tags/youtube-web-api.md +0 -934
  319. package/skills/meta-capability/references/api-tags/youtube-web-v2-api.md +0 -717
  320. package/skills/meta-capability/references/api-tags/zhihu-web-api.md +0 -1384
  321. package/skills/meta-capability/references/config-templates/defaults.yaml +0 -18
  322. package/skills/meta-capability/references/dispatch.md +0 -27
  323. package/skills/meta-capability/references/execution-guidelines.md +0 -25
  324. package/skills/meta-capability/references/implemented-route-map.md +0 -177
  325. package/skills/meta-capability/references/service-guides/asr-u2-u3-fallback.md +0 -75
  326. package/skills/meta-capability/scripts/__init__.py +0 -1
  327. package/skills/meta-capability/scripts/call_route.py +0 -141
  328. package/skills/meta-capability/scripts/core/__init__.py +0 -1
  329. package/skills/meta-capability/scripts/core/bootstrap_env.py +0 -32
  330. package/skills/meta-capability/scripts/core/config_loader.py +0 -204
  331. package/skills/meta-capability/scripts/core/tikomni_common.py +0 -443
  332. package/skills/meta-capability/scripts/test_auth.py +0 -98
  333. package/skills/single-work-analysis/SKILL.md +0 -62
  334. package/skills/single-work-analysis/agents/openai.yaml +0 -4
  335. package/skills/single-work-analysis/env.example +0 -36
  336. package/skills/single-work-analysis/references/api-capability-index.md +0 -92
  337. package/skills/single-work-analysis/references/api-contracts/asr-api.md +0 -130
  338. package/skills/single-work-analysis/references/api-contracts/bilibili-app-api.md +0 -776
  339. package/skills/single-work-analysis/references/api-contracts/bilibili-web-api.md +0 -2017
  340. package/skills/single-work-analysis/references/api-contracts/demo-api.md +0 -717
  341. package/skills/single-work-analysis/references/api-contracts/douyin-app-v3-api.md +0 -3594
  342. package/skills/single-work-analysis/references/api-contracts/douyin-billboard-api.md +0 -2274
  343. package/skills/single-work-analysis/references/api-contracts/douyin-creator-api.md +0 -1575
  344. package/skills/single-work-analysis/references/api-contracts/douyin-creator-v2-api.md +0 -3254
  345. package/skills/single-work-analysis/references/api-contracts/douyin-search-api.md +0 -4118
  346. package/skills/single-work-analysis/references/api-contracts/douyin-web-api.md +0 -5544
  347. package/skills/single-work-analysis/references/api-contracts/douyin-xingtu-api.md +0 -1916
  348. package/skills/single-work-analysis/references/api-contracts/douyin-xingtu-v2-api.md +0 -1540
  349. package/skills/single-work-analysis/references/api-contracts/health-check.md +0 -69
  350. package/skills/single-work-analysis/references/api-contracts/hybrid-parsing.md +0 -78
  351. package/skills/single-work-analysis/references/api-contracts/instagram-v1-api.md +0 -2256
  352. package/skills/single-work-analysis/references/api-contracts/instagram-v2-api.md +0 -2011
  353. package/skills/single-work-analysis/references/api-contracts/instagram-v3-api.md +0 -2630
  354. package/skills/single-work-analysis/references/api-contracts/ios-shortcut.md +0 -44
  355. package/skills/single-work-analysis/references/api-contracts/kuaishou-app-api.md +0 -1518
  356. package/skills/single-work-analysis/references/api-contracts/kuaishou-web-api.md +0 -1242
  357. package/skills/single-work-analysis/references/api-contracts/lemon8-app-api.md +0 -1088
  358. package/skills/single-work-analysis/references/api-contracts/linkedin-web-api.md +0 -1949
  359. package/skills/single-work-analysis/references/api-contracts/media-ingest-api.md +0 -126
  360. package/skills/single-work-analysis/references/api-contracts/pipixia-app-api.md +0 -1142
  361. package/skills/single-work-analysis/references/api-contracts/reddit-app-api.md +0 -2025
  362. package/skills/single-work-analysis/references/api-contracts/sora2-api.md +0 -2266
  363. package/skills/single-work-analysis/references/api-contracts/temp-mail-api.md +0 -208
  364. package/skills/single-work-analysis/references/api-contracts/threads-web-api.md +0 -897
  365. package/skills/single-work-analysis/references/api-contracts/tikhub-downloader-api.md +0 -134
  366. package/skills/single-work-analysis/references/api-contracts/tikhub-user-api.md +0 -494
  367. package/skills/single-work-analysis/references/api-contracts/tiktok-ads-api.md +0 -5947
  368. package/skills/single-work-analysis/references/api-contracts/tiktok-analytics-api.md +0 -968
  369. package/skills/single-work-analysis/references/api-contracts/tiktok-app-v3-api.md +0 -5735
  370. package/skills/single-work-analysis/references/api-contracts/tiktok-creator-api.md +0 -1951
  371. package/skills/single-work-analysis/references/api-contracts/tiktok-interaction-api.md +0 -742
  372. package/skills/single-work-analysis/references/api-contracts/tiktok-shop-web-api.md +0 -1890
  373. package/skills/single-work-analysis/references/api-contracts/tiktok-web-api.md +0 -4448
  374. package/skills/single-work-analysis/references/api-contracts/toutiao-app-api.md +0 -342
  375. package/skills/single-work-analysis/references/api-contracts/toutiao-web-api.md +0 -143
  376. package/skills/single-work-analysis/references/api-contracts/twitter-web-api.md +0 -989
  377. package/skills/single-work-analysis/references/api-contracts/wechat-channels-api.md +0 -809
  378. package/skills/single-work-analysis/references/api-contracts/wechat-media-platform-web-api.md +0 -677
  379. package/skills/single-work-analysis/references/api-contracts/weibo-app-api.md +0 -1547
  380. package/skills/single-work-analysis/references/api-contracts/weibo-web-api.md +0 -798
  381. package/skills/single-work-analysis/references/api-contracts/weibo-web-v2-api.md +0 -2459
  382. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-app-api.md +0 -1291
  383. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-app-v2-api.md +0 -1683
  384. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-web-api.md +0 -1324
  385. package/skills/single-work-analysis/references/api-contracts/xiaohongshu-web-v2-api.md +0 -1209
  386. package/skills/single-work-analysis/references/api-contracts/xigua-app-v2-api.md +0 -489
  387. package/skills/single-work-analysis/references/api-contracts/youtube-web-api.md +0 -2636
  388. package/skills/single-work-analysis/references/api-contracts/youtube-web-v2-api.md +0 -2660
  389. package/skills/single-work-analysis/references/api-contracts/zhihu-web-api.md +0 -2315
  390. package/skills/single-work-analysis/references/api-tags/asr-api.md +0 -100
  391. package/skills/single-work-analysis/references/api-tags/bilibili-app-api.md +0 -482
  392. package/skills/single-work-analysis/references/api-tags/bilibili-web-api.md +0 -1267
  393. package/skills/single-work-analysis/references/api-tags/demo-api.md +0 -365
  394. package/skills/single-work-analysis/references/api-tags/douyin-app-v3-api.md +0 -2012
  395. package/skills/single-work-analysis/references/api-tags/douyin-billboard-api.md +0 -1428
  396. package/skills/single-work-analysis/references/api-tags/douyin-creator-api.md +0 -694
  397. package/skills/single-work-analysis/references/api-tags/douyin-creator-v2-api.md +0 -694
  398. package/skills/single-work-analysis/references/api-tags/douyin-search-api.md +0 -1059
  399. package/skills/single-work-analysis/references/api-tags/douyin-web-api.md +0 -3314
  400. package/skills/single-work-analysis/references/api-tags/douyin-xingtu-api.md +0 -935
  401. package/skills/single-work-analysis/references/api-tags/douyin-xingtu-v2-api.md +0 -925
  402. package/skills/single-work-analysis/references/api-tags/health-check.md +0 -40
  403. package/skills/single-work-analysis/references/api-tags/hybrid-parsing.md +0 -57
  404. package/skills/single-work-analysis/references/api-tags/instagram-v1-api.md +0 -1224
  405. package/skills/single-work-analysis/references/api-tags/instagram-v2-api.md +0 -1147
  406. package/skills/single-work-analysis/references/api-tags/instagram-v3-api.md +0 -1123
  407. package/skills/single-work-analysis/references/api-tags/ios-shortcut.md +0 -45
  408. package/skills/single-work-analysis/references/api-tags/kuaishou-app-api.md +0 -846
  409. package/skills/single-work-analysis/references/api-tags/kuaishou-web-api.md +0 -551
  410. package/skills/single-work-analysis/references/api-tags/lemon8-app-api.md +0 -687
  411. package/skills/single-work-analysis/references/api-tags/linkedin-web-api.md +0 -1105
  412. package/skills/single-work-analysis/references/api-tags/media-ingest-api.md +0 -112
  413. package/skills/single-work-analysis/references/api-tags/pipixia-app-api.md +0 -721
  414. package/skills/single-work-analysis/references/api-tags/reddit-app-api.md +0 -1057
  415. package/skills/single-work-analysis/references/api-tags/sora2-api.md +0 -737
  416. package/skills/single-work-analysis/references/api-tags/temp-mail-api.md +0 -136
  417. package/skills/single-work-analysis/references/api-tags/threads-web-api.md +0 -472
  418. package/skills/single-work-analysis/references/api-tags/tikhub-downloader-api.md +0 -65
  419. package/skills/single-work-analysis/references/api-tags/tikhub-user-api.md +0 -253
  420. package/skills/single-work-analysis/references/api-tags/tiktok-ads-api.md +0 -1393
  421. package/skills/single-work-analysis/references/api-tags/tiktok-analytics-api.md +0 -179
  422. package/skills/single-work-analysis/references/api-tags/tiktok-app-v3-api.md +0 -3264
  423. package/skills/single-work-analysis/references/api-tags/tiktok-creator-api.md +0 -709
  424. package/skills/single-work-analysis/references/api-tags/tiktok-interaction-api.md +0 -366
  425. package/skills/single-work-analysis/references/api-tags/tiktok-shop-web-api.md +0 -663
  426. package/skills/single-work-analysis/references/api-tags/tiktok-web-api.md +0 -2516
  427. package/skills/single-work-analysis/references/api-tags/toutiao-app-api.md +0 -220
  428. package/skills/single-work-analysis/references/api-tags/toutiao-web-api.md +0 -96
  429. package/skills/single-work-analysis/references/api-tags/twitter-web-api.md +0 -562
  430. package/skills/single-work-analysis/references/api-tags/wechat-channels-api.md +0 -405
  431. package/skills/single-work-analysis/references/api-tags/wechat-media-platform-web-api.md +0 -431
  432. package/skills/single-work-analysis/references/api-tags/weibo-app-api.md +0 -851
  433. package/skills/single-work-analysis/references/api-tags/weibo-web-api.md +0 -470
  434. package/skills/single-work-analysis/references/api-tags/weibo-web-v2-api.md +0 -1405
  435. package/skills/single-work-analysis/references/api-tags/xiaohongshu-app-api.md +0 -534
  436. package/skills/single-work-analysis/references/api-tags/xiaohongshu-app-v2-api.md +0 -934
  437. package/skills/single-work-analysis/references/api-tags/xiaohongshu-web-api.md +0 -757
  438. package/skills/single-work-analysis/references/api-tags/xiaohongshu-web-v2-api.md +0 -762
  439. package/skills/single-work-analysis/references/api-tags/xigua-app-v2-api.md +0 -308
  440. package/skills/single-work-analysis/references/api-tags/youtube-web-api.md +0 -934
  441. package/skills/single-work-analysis/references/api-tags/youtube-web-v2-api.md +0 -717
  442. package/skills/single-work-analysis/references/api-tags/zhihu-web-api.md +0 -1384
  443. package/skills/single-work-analysis/references/asr-and-fallback.md +0 -20
  444. package/skills/single-work-analysis/references/config-templates/defaults.yaml +0 -47
  445. package/skills/single-work-analysis/references/contracts/work-card-fields.md +0 -41
  446. package/skills/single-work-analysis/references/platform-guides/douyin.md +0 -47
  447. package/skills/single-work-analysis/references/platform-guides/generic.md +0 -43
  448. package/skills/single-work-analysis/references/platform-guides/xiaohongshu.md +0 -54
  449. package/skills/single-work-analysis/references/prompt-contracts/analysis-bundle.md +0 -82
  450. package/skills/single-work-analysis/references/schemas/work-card.schema.json +0 -39
  451. package/skills/single-work-analysis/references/service-guides/asr-u2-u3-fallback.md +0 -75
  452. package/skills/single-work-analysis/scripts/__init__.py +0 -0
  453. package/skills/single-work-analysis/scripts/core/__init__.py +0 -0
  454. package/skills/single-work-analysis/scripts/core/analysis_adapter.py +0 -384
  455. package/skills/single-work-analysis/scripts/core/analysis_pipeline.py +0 -456
  456. package/skills/single-work-analysis/scripts/core/bootstrap_env.py +0 -35
  457. package/skills/single-work-analysis/scripts/core/extract_pipeline.py +0 -173
  458. package/skills/single-work-analysis/scripts/core/progress_report.py +0 -258
  459. package/skills/single-work-analysis/scripts/core/storage_router.py +0 -220
  460. package/skills/single-work-analysis/scripts/pipeline/__init__.py +0 -0
  461. package/skills/single-work-analysis/scripts/pipeline/asr/__init__.py +0 -0
  462. package/skills/single-work-analysis/scripts/platform/__init__.py +0 -0
  463. package/skills/single-work-analysis/scripts/platform/douyin/__init__.py +0 -0
  464. package/skills/single-work-analysis/scripts/platform/douyin/douyin_video_type_matrix.py +0 -224
  465. package/skills/single-work-analysis/scripts/platform/douyin/select_low_quality_video_url.py +0 -200
  466. package/skills/single-work-analysis/scripts/platform/xiaohongshu/__init__.py +0 -0
  467. package/skills/single-work-analysis/scripts/writers/__init__.py +0 -0
  468. package/skills/single-work-analysis/scripts/writers/write_benchmark_card.py +0 -752
  469. /package/skills/{creator-analysis → social-media-crawl}/scripts/core/bootstrap_env.py +0 -0
  470. /package/skills/{creator-analysis → social-media-crawl}/scripts/core/extract_pipeline.py +0 -0
  471. /package/skills/{single-work-analysis → social-media-crawl}/scripts/core/tikomni_common.py +0 -0
  472. /package/skills/{creator-analysis/scripts/platform/douyin → social-media-crawl/scripts/pipelines}/douyin_video_type_matrix.py +0 -0
  473. /package/skills/{creator-analysis/scripts/author_home/collectors → social-media-crawl/scripts/pipelines}/homepage_collectors.py +0 -0
  474. /package/skills/{creator-analysis/scripts/platform/douyin → social-media-crawl/scripts/pipelines}/select_low_quality_video_url.py +0 -0
@@ -0,0 +1,391 @@
1
+ #!/usr/bin/env python3
2
+ """Write work fact cards and normalized envelopes."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import hashlib
7
+ import json
8
+ from datetime import datetime, timedelta, timezone
9
+ from pathlib import Path
10
+ from typing import Any, Dict, List, Optional
11
+
12
+ from scripts.core.completeness import ensure_request_id, evaluate_work_fact_card, normalize_missing_fields
13
+ from scripts.core.config_loader import resolve_storage_paths
14
+ from scripts.core.storage_router import (
15
+ build_work_fact_card_paths,
16
+ render_output_filename,
17
+ resolve_card_root,
18
+ resolve_json_filename_pattern,
19
+ )
20
+
21
+ SHANGHAI_TZ = timezone(timedelta(hours=8))
22
+
23
+
24
+ def _safe_text(value: Any) -> str:
25
+ if value is None:
26
+ return ""
27
+ return str(value).strip()
28
+
29
+
30
+ def _safe_int(value: Any) -> int:
31
+ if value is None:
32
+ return 0
33
+ if isinstance(value, bool):
34
+ return int(value)
35
+ if isinstance(value, int):
36
+ return value
37
+ if isinstance(value, float):
38
+ return int(value)
39
+ text = _safe_text(value)
40
+ if not text:
41
+ return 0
42
+ try:
43
+ return int(float(text.replace(",", "")))
44
+ except Exception:
45
+ return 0
46
+
47
+
48
+ def _source_dict(payload: Dict[str, Any]) -> Dict[str, Any]:
49
+ source = payload.get("source")
50
+ return source if isinstance(source, dict) else {}
51
+
52
+
53
+ def _author_dict(payload: Dict[str, Any]) -> Dict[str, Any]:
54
+ author = payload.get("author")
55
+ return author if isinstance(author, dict) else {}
56
+
57
+
58
+ def _resolve_platform(payload: Dict[str, Any], platform: Optional[str]) -> str:
59
+ return _safe_text(platform or payload.get("platform")) or "unknown"
60
+
61
+
62
+ def _resolve_work_id(payload: Dict[str, Any]) -> str:
63
+ for key in ("platform_work_id", "note_id", "aweme_id", "id"):
64
+ hit = _safe_text(payload.get(key))
65
+ if hit:
66
+ return hit
67
+ source = _source_dict(payload)
68
+ for key in ("note_id", "platform_work_id"):
69
+ hit = _safe_text(source.get(key))
70
+ if hit:
71
+ return hit
72
+ return ""
73
+
74
+
75
+ def _resolve_author_display(payload: Dict[str, Any]) -> str:
76
+ author_raw = payload.get("author")
77
+ author_obj = _author_dict(payload)
78
+ if isinstance(author_raw, str) and _safe_text(author_raw):
79
+ return _safe_text(author_raw)
80
+ for key in ("nickname", "author_handle", "platform_author_id"):
81
+ hit = _safe_text(author_obj.get(key))
82
+ if hit:
83
+ return hit
84
+ for key in ("nickname", "author_handle", "platform_author_id"):
85
+ hit = _safe_text(payload.get(key))
86
+ if hit:
87
+ return hit
88
+ return ""
89
+
90
+
91
+ def _resolve_author_handle(payload: Dict[str, Any]) -> str:
92
+ author_obj = _author_dict(payload)
93
+ source = _source_dict(payload)
94
+ for key in ("author_handle", "short_id", "red_id"):
95
+ for container in (payload, author_obj, source):
96
+ hit = _safe_text(container.get(key))
97
+ if hit:
98
+ return hit
99
+ return _resolve_author_display(payload)
100
+
101
+
102
+ def _resolve_platform_author_id(payload: Dict[str, Any]) -> str:
103
+ author_obj = _author_dict(payload)
104
+ source = _source_dict(payload)
105
+ for key in (
106
+ "platform_author_id",
107
+ "author_platform_id",
108
+ "xhs_user_id",
109
+ "douyin_aweme_author_id",
110
+ "uid",
111
+ ):
112
+ for container in (payload, author_obj, source):
113
+ hit = _safe_text(container.get(key))
114
+ if hit:
115
+ return hit
116
+ return ""
117
+
118
+
119
+ def _resolve_title(payload: Dict[str, Any]) -> str:
120
+ for key in ("title", "display_title", "name"):
121
+ hit = _safe_text(payload.get(key))
122
+ if hit:
123
+ return hit
124
+ caption = _resolve_caption(payload)
125
+ return caption[:60] if caption else ""
126
+
127
+
128
+ def _resolve_caption(payload: Dict[str, Any]) -> str:
129
+ source = _source_dict(payload)
130
+ for key in ("caption_raw", "desc", "content", "raw_content", "summary"):
131
+ for container in (payload, source):
132
+ hit = _safe_text(container.get(key))
133
+ if hit:
134
+ return hit
135
+ return ""
136
+
137
+
138
+ def _to_timestamp(value: Any) -> Optional[int]:
139
+ raw = _safe_int(value)
140
+ if raw <= 0:
141
+ return None
142
+ if raw > 1_000_000_000_000:
143
+ raw //= 1000
144
+ return raw if raw > 0 else None
145
+
146
+
147
+ def _resolve_published_date(payload: Dict[str, Any]) -> str:
148
+ for key in ("published_date", "publish_time_text"):
149
+ hit = _safe_text(payload.get(key))
150
+ if hit:
151
+ return hit[:10] if len(hit) >= 10 else hit
152
+ for key in ("publish_time", "create_time_sec", "create_time", "time"):
153
+ ts = _to_timestamp(payload.get(key))
154
+ if ts:
155
+ return datetime.fromtimestamp(ts, tz=SHANGHAI_TZ).strftime("%Y-%m-%d")
156
+ return ""
157
+
158
+
159
+ def _resolve_work_modality(payload: Dict[str, Any]) -> str:
160
+ modality = _safe_text(payload.get("work_modality")).lower()
161
+ if modality:
162
+ return modality
163
+ content_type = _safe_text(payload.get("note_content_type") or payload.get("content_type")).lower()
164
+ if content_type in {"video", "single_video", "video_note"}:
165
+ return "video"
166
+ if content_type in {"image", "photo", "text", "note"}:
167
+ return "text"
168
+ if payload.get("is_video") is True:
169
+ return "video"
170
+ return "video" if _safe_text(payload.get("video_download_url") or payload.get("video_down_url")) else "text"
171
+
172
+
173
+ def _resolve_source_url(payload: Dict[str, Any], platform: str, work_id: str) -> str:
174
+ source = _source_dict(payload)
175
+ for key in ("source_url", "url", "note_url"):
176
+ for container in (payload, source):
177
+ hit = _safe_text(container.get(key))
178
+ if hit:
179
+ return hit
180
+ if platform == "douyin" and work_id:
181
+ return f"https://www.douyin.com/video/{work_id}"
182
+ if platform == "xiaohongshu" and work_id:
183
+ return f"https://www.xiaohongshu.com/explore/{work_id}"
184
+ return ""
185
+
186
+
187
+ def _resolve_share_url(payload: Dict[str, Any], source_url: str) -> str:
188
+ source = _source_dict(payload)
189
+ for key in ("share_url", "share_link", "share_text"):
190
+ for container in (payload, source):
191
+ hit = _safe_text(container.get(key))
192
+ if hit:
193
+ return hit
194
+ return source_url
195
+
196
+
197
+ def _resolve_primary_text(payload: Dict[str, Any], caption_raw: str) -> Dict[str, str]:
198
+ subtitle_raw = _safe_text(payload.get("subtitle_raw"))
199
+ asr_clean = _safe_text(payload.get("asr_clean"))
200
+ asr_raw = _safe_text(payload.get("asr_raw"))
201
+ if subtitle_raw:
202
+ return {"primary_text": subtitle_raw, "primary_text_source": "subtitle_raw"}
203
+ if asr_clean:
204
+ return {"primary_text": asr_clean, "primary_text_source": "asr_clean"}
205
+ if asr_raw:
206
+ return {"primary_text": asr_raw, "primary_text_source": "asr_raw"}
207
+ if caption_raw:
208
+ return {"primary_text": caption_raw, "primary_text_source": "caption_raw"}
209
+ return {"primary_text": "", "primary_text_source": "missing"}
210
+
211
+
212
+ def build_work_fact_card(payload: Dict[str, Any], platform: Optional[str] = None) -> Dict[str, Any]:
213
+ platform_name = _resolve_platform(payload, platform)
214
+ work_id = _resolve_work_id(payload)
215
+ caption_raw = _resolve_caption(payload)
216
+ source_url = _resolve_source_url(payload, platform_name, work_id)
217
+ share_url = _resolve_share_url(payload, source_url)
218
+ author_handle = _resolve_author_handle(payload)
219
+ platform_author_id = _resolve_platform_author_id(payload)
220
+ primary_text_bundle = _resolve_primary_text(payload, caption_raw)
221
+
222
+ card: Dict[str, Any] = {
223
+ "platform": platform_name,
224
+ "platform_work_id": work_id,
225
+ "platform_author_id": platform_author_id,
226
+ "author_handle": author_handle,
227
+ "author": _resolve_author_display(payload),
228
+ "title": _resolve_title(payload),
229
+ "caption_raw": caption_raw,
230
+ "subtitle_raw": _safe_text(payload.get("subtitle_raw")),
231
+ "work_modality": _resolve_work_modality(payload),
232
+ "published_date": _resolve_published_date(payload),
233
+ "digg_count": _safe_int(payload.get("digg_count")),
234
+ "comment_count": _safe_int(payload.get("comment_count")),
235
+ "collect_count": _safe_int(payload.get("collect_count")),
236
+ "share_count": _safe_int(payload.get("share_count")),
237
+ "play_count": _safe_int(payload.get("play_count")),
238
+ "cover_image": _safe_text(payload.get("cover_image")),
239
+ "source_url": source_url,
240
+ "share_url": share_url,
241
+ "video_download_url": _safe_text(payload.get("video_download_url") or payload.get("video_down_url")),
242
+ "primary_text": primary_text_bundle["primary_text"],
243
+ "primary_text_source": primary_text_bundle["primary_text_source"],
244
+ "asr_raw": _safe_text(payload.get("asr_raw")),
245
+ "asr_clean": _safe_text(payload.get("asr_clean")),
246
+ "request_id": ensure_request_id(_safe_text(payload.get("request_id")), fallback_seed=share_url or work_id or caption_raw),
247
+ "missing_fields": normalize_missing_fields(payload.get("missing_fields")),
248
+ "error_reason": _safe_text(payload.get("error_reason")) or None,
249
+ "extract_trace": payload.get("extract_trace") if isinstance(payload.get("extract_trace"), list) else [],
250
+ }
251
+ existing_missing = {(entry.get("field"), entry.get("reason")) for entry in card["missing_fields"]}
252
+ if (
253
+ card["work_modality"] == "video"
254
+ and not card["asr_clean"]
255
+ and not card["asr_raw"]
256
+ and not card["subtitle_raw"]
257
+ and ("asr_clean", "caption_fallback") not in existing_missing
258
+ ):
259
+ card["missing_fields"].append({"field": "asr_clean", "reason": "caption_fallback"})
260
+ evaluation = evaluate_work_fact_card(card)
261
+ card["completeness"] = evaluation["completeness"]
262
+ card["missing_fields"] = evaluation["missing_fields"]
263
+ return card
264
+
265
+
266
+ def build_work_output_envelope(payload: Dict[str, Any], platform: Optional[str] = None) -> Dict[str, Any]:
267
+ card = build_work_fact_card(payload, platform=platform)
268
+ source = _source_dict(payload)
269
+ input_value = source.get("share_url") or source.get("share_text") or source.get("source_url") or source
270
+ return {
271
+ "object_type": "work",
272
+ "platform": card["platform"],
273
+ "input": input_value,
274
+ "normalized": card,
275
+ "completeness": card["completeness"],
276
+ "missing_fields": card["missing_fields"],
277
+ "error_reason": card.get("error_reason"),
278
+ "extract_trace": card.get("extract_trace", []),
279
+ "request_id": card["request_id"],
280
+ }
281
+
282
+
283
+ def _markdown_lines(card: Dict[str, Any]) -> List[str]:
284
+ lines = [
285
+ f"# {card.get('title') or card.get('platform_work_id') or 'Work'}",
286
+ "",
287
+ "## Facts",
288
+ f"- platform: {card.get('platform') or ''}",
289
+ f"- platform_work_id: {card.get('platform_work_id') or ''}",
290
+ f"- platform_author_id: {card.get('platform_author_id') or ''}",
291
+ f"- author_handle: {card.get('author_handle') or ''}",
292
+ f"- author: {card.get('author') or ''}",
293
+ f"- published_date: {card.get('published_date') or ''}",
294
+ f"- work_modality: {card.get('work_modality') or ''}",
295
+ f"- digg_count: {card.get('digg_count')}",
296
+ f"- comment_count: {card.get('comment_count')}",
297
+ f"- collect_count: {card.get('collect_count')}",
298
+ f"- share_count: {card.get('share_count')}",
299
+ f"- play_count: {card.get('play_count')}",
300
+ f"- source_url: {card.get('source_url') or ''}",
301
+ f"- share_url: {card.get('share_url') or ''}",
302
+ f"- video_download_url: {card.get('video_download_url') or ''}",
303
+ "",
304
+ "## Text",
305
+ card.get("primary_text") or "",
306
+ "",
307
+ "## Meta",
308
+ f"- primary_text_source: {card.get('primary_text_source') or ''}",
309
+ f"- completeness: {card.get('completeness') or ''}",
310
+ f"- request_id: {card.get('request_id') or ''}",
311
+ f"- error_reason: {card.get('error_reason') or ''}",
312
+ ]
313
+ if card.get("missing_fields"):
314
+ lines.extend(["", "## Missing Fields"])
315
+ for entry in card["missing_fields"]:
316
+ lines.append(f"- {entry.get('field')}: {entry.get('reason')}")
317
+ return lines
318
+
319
+
320
+ def write_work_fact_card(
321
+ *,
322
+ payload: Dict[str, Any],
323
+ platform: Optional[str] = None,
324
+ card_root: Optional[str] = None,
325
+ storage_config: Optional[Dict[str, Any]] = None,
326
+ **_: Any,
327
+ ) -> Dict[str, Any]:
328
+ card = build_work_fact_card(payload, platform=platform)
329
+ resolved_card_root = resolve_card_root(storage_config, explicit_card_root=card_root)
330
+ fallback_identifier = card["share_url"] or card["source_url"] or card["title"] or card["request_id"]
331
+ paths = build_work_fact_card_paths(
332
+ card_root=resolved_card_root,
333
+ platform=card["platform"],
334
+ platform_work_id=card["platform_work_id"],
335
+ author_handle=card["author_handle"],
336
+ platform_author_id=card["platform_author_id"],
337
+ storage_config=storage_config,
338
+ fallback_identifier=fallback_identifier,
339
+ )
340
+
341
+ Path(paths["json_path"]).write_text(json.dumps(card, ensure_ascii=False, indent=2), encoding="utf-8")
342
+ Path(paths["markdown_path"]).write_text("\n".join(_markdown_lines(card)).strip() + "\n", encoding="utf-8")
343
+
344
+ return {
345
+ "enabled": True,
346
+ "ok": True,
347
+ "count": 1,
348
+ "path": paths["markdown_path"],
349
+ "json_path": paths["json_path"],
350
+ "markdown_path": paths["markdown_path"],
351
+ "route": paths["route"],
352
+ "identifier": paths["identifier"],
353
+ "card": card,
354
+ }
355
+
356
+
357
+ def persist_output_envelope(
358
+ *,
359
+ envelope: Dict[str, Any],
360
+ storage_config: Optional[Dict[str, Any]],
361
+ platform: str,
362
+ fallback_identifier: str,
363
+ ) -> Dict[str, Any]:
364
+ try:
365
+ paths = resolve_storage_paths(storage_config or {})
366
+ except Exception as error:
367
+ return {"enabled": True, "ok": False, "error": f"resolve_storage_paths_failed:{error}"}
368
+
369
+ now = datetime.now()
370
+ date_key = now.strftime("%Y%m%d")
371
+ timestamp = now.strftime("%Y%m%dT%H%M%S")
372
+ identifier = _safe_text(envelope.get("normalized", {}).get("platform_work_id")) or fallback_identifier
373
+ status = "error" if envelope.get("error_reason") else "success"
374
+
375
+ target_root = Path(paths["errors_root"] if status == "error" else paths["results_root"]) / date_key
376
+ target_root.mkdir(parents=True, exist_ok=True)
377
+ file_name = render_output_filename(
378
+ pattern=resolve_json_filename_pattern(storage_config),
379
+ context={
380
+ "platform": platform,
381
+ "identifier": identifier,
382
+ "timestamp": timestamp,
383
+ "date": date_key,
384
+ "ext": ".json",
385
+ },
386
+ default_filename=f"{timestamp}-{platform}-{identifier}.json",
387
+ default_ext=".json",
388
+ )
389
+ file_path = target_root / file_name
390
+ file_path.write_text(json.dumps(envelope, ensure_ascii=False, indent=2), encoding="utf-8")
391
+ return {"enabled": True, "ok": True, "status": status, "path": str(file_path)}
@@ -1,95 +0,0 @@
1
- ---
2
- name: creator-analysis
3
- description: Use this skill for creator, account profile, and content-collection retrieval, benchmarking, breakdown, and analysis. Trigger when the user asks to analyze creator / analyze account / profile analysis / creator benchmark / creator breakdown, or 创作者分析 / 账号分析 / 主页分析 / 博主分析 / 博主对标 / 账号拆解 / 作者卡 / 主页作品汇总, and the target is a creator, account profile, channel, or content collection rather than one content item.
4
- ---
5
-
6
- # Creator Analysis
7
-
8
- ## When To Use
9
-
10
- - Use this skill when the target is a creator, account, profile page, channel, or content collection rather than a single content item.
11
- - Use this skill when the user wants a creator card, author sample cards, sampled explanations, or aggregated creator-level conclusions.
12
- - Use this skill when multiple videos under one profile should go through batch ASR first.
13
- - Use this skill when the user provides a profile URL, creator handle, account identifier, channel entry, or another creator-level entry point.
14
-
15
- ## What It Can Do
16
-
17
- - Fetch and normalize creator-side fact fields.
18
- - Fetch and normalize the full content collection under a profile.
19
- - Produce author sample cards for the retrieved items.
20
- - Run batch ASR for video items when needed.
21
- - Complete bucketing, sampling, sampled explanations, and creator-level analysis.
22
- - Return creator cards, author sample cards, sampled enhanced cards, and aggregated conclusions.
23
-
24
- ## Core Workflow Rules
25
-
26
- - Keep the task scoped to a creator, account profile, or content collection.
27
- - Prefer the platform guide first. Only go back to API discovery references when the guide is insufficient.
28
- - Keep fact cards for all retrieved works, but do not run per-work deep LLM analysis.
29
- - Prefer batch ASR for video items, with up to 100 links per batch.
30
- - Let sampled-work explanation fields come from one batch LLM step only.
31
- - Treat `author_analysis_v2` as the formal creator-level analysis object.
32
- - If `analysis_eligibility=incomplete`, keep the fact card but exclude the item from sampling, sampled explanations, and creator-level analysis.
33
-
34
- ## Shared Layer Boundaries
35
-
36
- - Shared layer owns orchestration order, status semantics, output contracts, sampled-work explanation constraints, and final card-writing rules.
37
- - Platform layer owns route strategy, collector behavior, platform-field compatibility, adapter normalization, and platform-specific cleaning rules.
38
- - Keep sampled explanations as a batch-stage artifact. Do not reintroduce per-work deep analysis in the creator path.
39
- - Treat `author`, `author_sample_work`, and sampled enhanced cards as separate output roles with explicit routing semantics.
40
-
41
- ## Platform Navigation
42
-
43
- - Start with the platform guide:
44
- - Douyin: `references/platform-guides/douyin.md`
45
- - Xiaohongshu: `references/platform-guides/xiaohongshu.md`
46
- - Other platforms: `references/platform-guides/generic.md`
47
- - Route strategy, collector behavior, and raw payload retrieval:
48
- - First stop: `scripts/author_home/collectors/homepage_collectors.py`
49
- - Platform-field compatibility and normalization:
50
- - First stop: `scripts/author_home/adapters/platform_adapters.py`
51
- - Orchestration order, stage status, degradation, persistence, and final result assembly:
52
- - First stop: `scripts/author_home/orchestrator/run_author_analysis.py`
53
- - Work-analysis artifacts, cache behavior, and structural labels:
54
- - First stop: `scripts/author_home/orchestrator/work_analysis_artifacts.py`
55
- - Sampled explanations and creator-level analysis logic:
56
- - First stop: `scripts/author_home/analyzers/`
57
- - Card writing and markdown rendering:
58
- - First stop: `scripts/writers/write_author_homepage_samples.py`
59
- - Supporting renderer: `scripts/writers/write_benchmark_card.py`
60
-
61
- ## Do Not
62
-
63
- - Do not paste sampled explanations directly into every work-card body.
64
- - Do not expose platform process fields directly in the final card body.
65
- - Do not introduce per-work LLM explanations inside the creator path.
66
- - Do not bypass the platform guide and jump straight into local helpers without understanding the route and contract expectations first.
67
-
68
- ## Workflow
69
-
70
- 1. Identify the platform and confirm that the target is a creator, account profile, channel, or content collection.
71
- 2. Read `references/contracts/creator-card-fields.md` to confirm required creator-card fields.
72
- 3. Read `references/contracts/work-card-fields.md` to confirm required work-card fields for the collected items.
73
- 4. Read the platform guide first and then the first-stop implementation file for the problem type you are solving.
74
- 5. If video items are involved, read `references/service-guides/asr-u2-u3-fallback.md` and then `references/asr-orchestration.md` to run batch ASR and fallback.
75
- 6. Read `references/api-capability-index.md`, `references/api-tags/`, and `references/api-contracts/` only when the platform guide does not provide enough route or field detail.
76
- 7. Read `references/workflow.md` to complete bucketing, sampling, sampled explanations, and `author_analysis_v2`.
77
- 8. Return the creator card, author sample cards, sampled enhanced cards, and aggregated conclusions.
78
-
79
- ## References
80
-
81
- - API capability index: `references/api-capability-index.md`
82
- - Tag-level route summaries: `references/api-tags/`
83
- - Tag-level full contracts: `references/api-contracts/`
84
- - U2/U3 ASR fallback: `references/service-guides/asr-u2-u3-fallback.md`
85
- - Creator-card fields: `references/contracts/creator-card-fields.md`
86
- - Work-card fields: `references/contracts/work-card-fields.md`
87
- - ASR orchestration: `references/asr-orchestration.md`
88
- - Creator workflow: `references/workflow.md`
89
- - Author-analysis prompt contract: `references/prompt-contracts/author-analysis-v2.md`
90
- - Sampled-explanations prompt contract: `references/prompt-contracts/sampled-work-batch-explanations.md`
91
- - Author-analysis schema: `references/schemas/author-analysis-v2.schema.json`
92
- - Sampled-explanations schema: `references/schemas/sampled-work-batch-explanations.schema.json`
93
- - Generic platform guide: `references/platform-guides/generic.md`
94
- - Douyin guide: `references/platform-guides/douyin.md`
95
- - Xiaohongshu guide: `references/platform-guides/xiaohongshu.md`
@@ -1,4 +0,0 @@
1
- interface:
2
- display_name: "Creator Analysis"
3
- short_description: "Creator, profile, and collection benchmark analysis"
4
- default_prompt: "Use $creator-analysis to analyze a creator, account profile, or content collection and return the creator card, work cards, creator benchmark breakdown, and aggregated conclusions."
@@ -1,36 +0,0 @@
1
- # [ZH] 本文件是 creator-analysis 的环境变量示例。
2
- # [EN] This file is the env example for creator-analysis.
3
- #
4
- # [ZH] 正常情况下,请先把仓库根 env.example 复制到 skills/.env。
5
- # [EN] In normal use, copy the repo-root env.example to skills/.env first.
6
- #
7
- # [ZH] 只有当 creator-analysis 需要局部覆盖时,才把下面字段复制到本目录的 .env.local。
8
- # [EN] Only copy selected keys into this folder's .env.local when creator-analysis needs local overrides.
9
-
10
- # [ZH] 输出根目录。默认值:继承 skills/.env;如需局部覆盖,必须是绝对路径。
11
- # [EN] Output root. Default: inherited from skills/.env; must be absolute when overridden locally.
12
- # TIKOMNI_OUTPUT_ROOT="/absolute/path/to/tikomni-output"
13
-
14
- # [ZH] 卡片根目录。默认值:继承 skills/.env;如需局部覆盖,必须是绝对路径。
15
- # [EN] Card root. Default: inherited from skills/.env; must be absolute when overridden locally.
16
- # TIKOMNI_CARD_ROOT="/absolute/path/to/tikomni-cards"
17
-
18
- # [ZH] 路由语言预设。默认值:zh
19
- # [EN] Route locale preset. Default: zh
20
- TIKOMNI_PATH_LOCALE="zh"
21
-
22
- # [ZH] 作者级 LLM 分析超时,单位秒。默认值:45
23
- # [EN] Timeout for creator-level LLM analysis in seconds. Default: 45
24
- TIKOMNI_AUTHOR_ANALYSIS_TIMEOUT_SEC="45"
25
-
26
- # [ZH] sampled works 少于该阈值时跳过作者级 LLM 分析。默认值:5
27
- # [EN] Skip creator-level LLM analysis when sampled works are below this threshold. Default: 5
28
- TIKOMNI_AUTHOR_ANALYSIS_SMALL_SAMPLE_SKIP="5"
29
-
30
- # [ZH] sampled works 批量解释超时,单位秒。默认值:45
31
- # [EN] Timeout for sampled-work batch explanations in seconds. Default: 45
32
- TIKOMNI_SAMPLED_EXPLANATION_TIMEOUT_SEC="45"
33
-
34
- # [ZH] 显式配置文件路径。默认值:空;留空时自动使用本模块 defaults.yaml
35
- # [EN] Explicit config file path. Default: empty; when empty the module uses its own defaults.yaml
36
- # TIKOMNI_CONFIG_FILE=""
@@ -1,92 +0,0 @@
1
- # TikOmni API Capability Index
2
-
3
- ## Purpose
4
-
5
- - This auto-generated lightweight entry point helps identify the right tag, capability area, and auth pattern first.
6
- - Source mode: `remote`
7
- - Source: `https://app.tikomni.com/openapi/tikomni-openapi.full.with-u2.public.latest.json`
8
- - Fetched at: `2026-03-08T06:54:04+00:00`
9
- - Start route selection here. Read `api-tags/` and `api-contracts/` only when you need field definitions, defaults, examples, or full response structures.
10
- - If the task involves ASR timeout, non-public media URLs, or U3 media relay, also read `service-guides/asr-u2-u3-fallback.md`.
11
-
12
- ## Global Auth
13
-
14
- - Default auth: Header `Authorization: Bearer {token}`; docs also allow Cookie `Authorization` as fallback (`HTTPBearer`)
15
- - If a route overrides or disables the default auth requirement, trust the corresponding `api-tags/` and `api-contracts/` entries.
16
-
17
- ## Read Order
18
-
19
- 1. Choose a tag by platform and object type.
20
- 2. Open `api-tags/<tag>.md` for route summaries, auth requirements, and key fields.
21
- 3. Open `api-contracts/<tag>.md` only when you need exact field definitions, defaults, examples, or full success-response structures.
22
- 4. If the task involves transcription, the 90-second soft observation window, or the 120-second hard fallback, read the U2/U3 guide.
23
-
24
- ## Stats
25
-
26
- - Tag groups: `53`
27
- - Routes: `991`
28
- - Generated targets: `3` skill reference sets
29
-
30
- ## Special Flows
31
-
32
- - ASR and U3 fallback: [`service-guides/asr-u2-u3-fallback.md`](./service-guides/asr-u2-u3-fallback.md)
33
- - ASR tag: [`api-tags/asr-api.md`](./api-tags/asr-api.md)
34
- - U3 media relay tag: [`api-tags/media-ingest-api.md`](./api-tags/media-ingest-api.md)
35
-
36
- ## Tag Overview
37
-
38
- | Tag | File | Contract | Ops | Auth | Common Capabilities | Common Inputs |
39
- | --- | --- | --- | ---: | --- | --- | --- |
40
- | `ASR-API` | [`api-tags/asr-api.md`](./api-tags/asr-api.md) | [`api-contracts/asr-api.md`](./api-contracts/asr-api.md) | 2 | Header `Authorization` Bearer | ASR / transcription / audio / media / general | `input`, `task_id` |
41
- | `Bilibili-App-API` | [`api-tags/bilibili-app-api.md`](./api-tags/bilibili-app-api.md) | [`api-contracts/bilibili-app-api.md`](./api-contracts/bilibili-app-api.md) | 11 | Header `Authorization` Bearer | general / profiles / accounts / content details / search | `av_id`, `bv_id`, `page`, `idx`, `next_offset`, `ps`, `keyword`, `page_size`, `order`, `user_id` |
42
- | `Bilibili-Web-API` | [`api-tags/bilibili-web-api.md`](./api-tags/bilibili-web-api.md) | [`api-contracts/bilibili-web-api.md`](./api-contracts/bilibili-web-api.md) | 30 | Header `Authorization` Bearer | content details / profiles / accounts / livestream / details | `bv_id`, `uid`, `pn`, `cid`, `dynamic_id`, `order`, `room_id`, `a_id`, `c_id`, `url` |
43
- | `Demo-API` | [`api-tags/demo-api.md`](./api-tags/demo-api.md) | [`api-contracts/demo-api.md`](./api-contracts/demo-api.md) | 9 | Header `Authorization` Bearer | content details / profiles / accounts / general / search | None |
44
- | `Douyin-App-V3-API` | [`api-tags/douyin-app-v3-api.md`](./api-tags/douyin-app-v3-api.md) | [`api-contracts/douyin-app-v3-api.md`](./api-contracts/douyin-app-v3-api.md) | 47 | Header `Authorization` Bearer | content details / search / profiles / accounts / details | `count`, `cursor`, `keyword`, `aweme_id`, `sec_user_id`, `offset`, `sort_type`, `publish_time`, `filter_duration`, `aweme_ids` |
45
- | `Douyin-Billboard-API` | [`api-tags/douyin-billboard-api.md`](./api-tags/douyin-billboard-api.md) | [`api-contracts/douyin-billboard-api.md`](./api-contracts/douyin-billboard-api.md) | 31 | Header `Authorization` Bearer | trends / rankings / search / topics / details | `page_size`, `date_window`, `page`, `keyword`, `tags`, `sec_uid`, `option`, `page_num`, `end_date`, `start_date` |
46
- | `Douyin-Creator-API` | [`api-tags/douyin-creator-api.md`](./api-tags/douyin-creator-api.md) | [`api-contracts/douyin-creator-api.md`](./api-contracts/douyin-creator-api.md) | 16 | Header `Authorization` Bearer | creators / trends / rankings / topics / details | `billboard_tag`, `order_key`, `time_filter`, `limit`, `offset`, `category_id`, `order`, `activity_id`, `start_time`, `end_time` |
47
- | `Douyin-Creator-V2-API` | [`api-tags/douyin-creator-v2-api.md`](./api-tags/douyin-creator-v2-api.md) | [`api-contracts/douyin-creator-v2-api.md`](./api-contracts/douyin-creator-v2-api.md) | 14 | Header `Authorization` Bearer | creators / media / download / search / trends / rankings | `cookie`, `item_id`, `start_date`, `end_date`, `genres`, `primary_verticals`, `fields`, `need_long_article`, `metric_type`, `count` |
48
- | `Douyin-Search-API` | [`api-tags/douyin-search-api.md`](./api-tags/douyin-search-api.md) | [`api-contracts/douyin-search-api.md`](./api-contracts/douyin-search-api.md) | 20 | Header `Authorization` Bearer | search / topics / profiles / accounts / content details | `keyword`, `cursor`, `search_id`, `sort_type`, `publish_time`, `filter_duration`, `content_type`, `backtrace`, `douyin_user_fans`, `douyin_user_type` |
49
- | `Douyin-Web-API` | [`api-tags/douyin-web-api.md`](./api-tags/douyin-web-api.md) | [`api-contracts/douyin-web-api.md`](./api-contracts/douyin-web-api.md) | 76 | Header `Authorization` Bearer | profiles / accounts / content details / general / livestream | `count`, `cookie`, `refresh_index`, `keyword`, `sec_user_id`, `cursor`, `room_id`, `offset`, `aweme_id`, `max_cursor` |
50
- | `Douyin-Xingtu-API` | [`api-tags/douyin-xingtu-api.md`](./api-tags/douyin-xingtu-api.md) | [`api-contracts/douyin-xingtu-api.md`](./api-contracts/douyin-xingtu-api.md) | 22 | Header `Authorization` Bearer | general / content details / comments / trends / rankings | `kolId`, `platformChannel`, `_range`, `page`, `onlyAssign`, `keyword`, `uri`, `durationTS`, `format`, `sec_user_id` |
51
- | `Douyin-Xingtu-V2-API` | [`api-tags/douyin-xingtu-v2-api.md`](./api-tags/douyin-xingtu-v2-api.md) | [`api-contracts/douyin-xingtu-v2-api.md`](./api-contracts/douyin-xingtu-v2-api.md) | 21 | Header `Authorization` Bearer | creators / general / trends / rankings / comments | `o_author_id`, `platform_source`, `limit`, `platform_channel`, `author_id`, `only_assign`, `flow_type`, `page`, `qualifier`, `period` |
52
- | `Health-Check` | [`api-tags/health-check.md`](./api-tags/health-check.md) | [`api-contracts/health-check.md`](./api-contracts/health-check.md) | 1 | Header `Authorization` Bearer | general | None |
53
- | `Hybrid-Parsing` | [`api-tags/hybrid-parsing.md`](./api-tags/hybrid-parsing.md) | [`api-contracts/hybrid-parsing.md`](./api-contracts/hybrid-parsing.md) | 1 | Header `Authorization` Bearer | content details | `url`, `minimal`, `base64_url` |
54
- | `Instagram-V1-API` | [`api-tags/instagram-v1-api.md`](./api-tags/instagram-v1-api.md) | [`api-contracts/instagram-v1-api.md`](./api-contracts/instagram-v1-api.md) | 29 | Header `Authorization` Bearer | profiles / accounts / content details / general / comments | `user_id`, `max_id`, `count`, `end_cursor`, `media_id`, `username`, `page`, `min_id`, `location_id`, `post_url` |
55
- | `Instagram-V2-API` | [`api-tags/instagram-v2-api.md`](./api-tags/instagram-v2-api.md) | [`api-contracts/instagram-v2-api.md`](./api-contracts/instagram-v2-api.md) | 27 | Header `Authorization` Bearer | profiles / accounts / content details / search / comments | `pagination_token`, `user_id`, `username`, `keyword`, `code_or_url`, `comment_id`, `feed_type`, `highlight_id`, `location_id`, `audio_canonical_id` |
56
- | `Instagram-V3-API` | [`api-tags/instagram-v3-api.md`](./api-tags/instagram-v3-api.md) | [`api-contracts/instagram-v3-api.md`](./api-contracts/instagram-v3-api.md) | 26 | Header `Authorization` Bearer | profiles / accounts / content details / comments / search | `user_id`, `username`, `url`, `first`, `after`, `query`, `media_id`, `code`, `max_id`, `comment_id` |
57
- | `Kuaishou-App-API` | [`api-tags/kuaishou-app-api.md`](./api-tags/kuaishou-app-api.md) | [`api-contracts/kuaishou-app-api.md`](./api-contracts/kuaishou-app-api.md) | 20 | Header `Authorization` Bearer | content details / trends / rankings / profiles / accounts / search | `pcursor`, `user_id`, `subTabId`, `subTabName`, `keyword`, `magic_face_id`, `photo_id`, `page`, `boardType`, `boardId` |
58
- | `Kuaishou-Web-API` | [`api-tags/kuaishou-web-api.md`](./api-tags/kuaishou-web-api.md) | [`api-contracts/kuaishou-web-api.md`](./api-contracts/kuaishou-web-api.md) | 13 | Header `Authorization` Bearer | content details / profiles / accounts / trends / rankings / comments | `pcursor`, `photo_id`, `user_id`, `share_link`, `board_type`, `share_text`, `url`, `root_comment_id` |
59
- | `Lemon8-App-API` | [`api-tags/lemon8-app-api.md`](./api-tags/lemon8-app-api.md) | [`api-contracts/lemon8-app-api.md`](./api-contracts/lemon8-app-api.md) | 16 | Header `Authorization` Bearer | general / profiles / accounts / content details / search | `user_id`, `item_id`, `cursor`, `share_text`, `group_id`, `media_id`, `offset`, `query`, `max_cursor`, `filter_type` |
60
- | `LinkedIn-Web-API` | [`api-tags/linkedin-web-api.md`](./api-tags/linkedin-web-api.md) | [`api-contracts/linkedin-web-api.md`](./api-contracts/linkedin-web-api.md) | 25 | Header `Authorization` Bearer | profiles / accounts / general / content details / search | `page`, `urn`, `company_id`, `pagination_token`, `sort_by`, `company`, `username`, `date_posted`, `experience_level`, `remote` |
61
- | `Media-Ingest-API` | [`api-tags/media-ingest-api.md`](./api-tags/media-ingest-api.md) | [`api-contracts/media-ingest-api.md`](./api-contracts/media-ingest-api.md) | 2 | Header `Authorization` Bearer | media upload / public URL | `provider`, `file_name`, `content_type`, `size_bytes`, `upload_id` |
62
- | `PiPiXia-App-API` | [`api-tags/pipixia-app-api.md`](./api-tags/pipixia-app-api.md) | [`api-contracts/pipixia-app-api.md`](./api-contracts/pipixia-app-api.md) | 17 | Header `Authorization` Bearer | content details / profiles / accounts / search / details | `cursor`, `cell_id`, `user_id`, `cell_type`, `hashtag_id`, `feed_count`, `offset`, `hashtag_request_type`, `hashtag_sort_type`, `page` |
63
- | `Reddit-APP-API` | [`api-tags/reddit-app-api.md`](./api-tags/reddit-app-api.md) | [`api-contracts/reddit-app-api.md`](./api-contracts/reddit-app-api.md) | 24 | Header `Authorization` Bearer | general / profiles / accounts / content details / comments | `need_format`, `after`, `sort`, `username`, `subreddit_name`, `subreddit_id`, `post_id`, `filter_posts`, `include_comment_id`, `comment_id` |
64
- | `Sora2-API` | [`api-tags/sora2-api.md`](./api-tags/sora2-api.md) | [`api-contracts/sora2-api.md`](./api-contracts/sora2-api.md) | 17 | Header `Authorization` Bearer | content details / profiles / accounts / general / comments | `cursor`, `user_id`, `post_id`, `post_url`, `task_id`, `prompt`, `orientation`, `media_id`, `comment_id`, `eager_views` |
65
- | `Temp-Mail-API` | [`api-tags/temp-mail-api.md`](./api-tags/temp-mail-api.md) | [`api-contracts/temp-mail-api.md`](./api-contracts/temp-mail-api.md) | 3 | Header `Authorization` Bearer | general | `token`, `message_id` |
66
- | `Threads-Web-API` | [`api-tags/threads-web-api.md`](./api-tags/threads-web-api.md) | [`api-contracts/threads-web-api.md`](./api-contracts/threads-web-api.md) | 11 | Header `Authorization` Bearer | profiles / accounts / content details / search / details | `end_cursor`, `user_id`, `post_id`, `query`, `url`, `username` |
67
- | `TikHub-Downloader-API` | [`api-tags/tikhub-downloader-api.md`](./api-tags/tikhub-downloader-api.md) | [`api-contracts/tikhub-downloader-api.md`](./api-contracts/tikhub-downloader-api.md) | 2 | Header `Authorization` Bearer | media / download | None |
68
- | `TikHub-User-API` | [`api-tags/tikhub-user-api.md`](./api-tags/tikhub-user-api.md) | [`api-contracts/tikhub-user-api.md`](./api-contracts/tikhub-user-api.md) | 6 | Header `Authorization` Bearer | profiles / accounts | `endpoint`, `request_per_day` |
69
- | `TikTok-Ads-API` | [`api-tags/tiktok-ads-api.md`](./api-tags/tiktok-ads-api.md) | [`api-contracts/tiktok-ads-api.md`](./api-contracts/tiktok-ads-api.md) | 31 | Header `Authorization` Bearer | ads / search / details / creators | `limit`, `page`, `country_code`, `period`, `keyword`, `period_type`, `industry`, `order_by`, `rank_type`, `material_id` |
70
- | `TikTok-Analytics-API` | [`api-tags/tiktok-analytics-api.md`](./api-tags/tiktok-analytics-api.md) | [`api-contracts/tiktok-analytics-api.md`](./api-contracts/tiktok-analytics-api.md) | 4 | Header `Authorization` Bearer | analytics / comments / creators / content details | `item_id`, `content_category`, `user_id` |
71
- | `TikTok-App-V3-API` | [`api-tags/tiktok-app-v3-api.md`](./api-tags/tiktok-app-v3-api.md) | [`api-contracts/tiktok-app-v3-api.md`](./api-contracts/tiktok-app-v3-api.md) | 75 | Header `Authorization` Bearer | content details / commerce / profiles / accounts / search | `count`, `offset`, `keyword`, `sort_type`, `cursor`, `region`, `sec_user_id`, `user_id`, `room_id`, `seller_id` |
72
- | `TikTok-Creator-API` | [`api-tags/tiktok-creator-api.md`](./api-tags/tiktok-creator-api.md) | [`api-contracts/tiktok-creator-api.md`](./api-contracts/tiktok-creator-api.md) | 14 | Header `Authorization` Bearer | creators / content details / analytics / commerce | `cookie`, `proxy`, `start_date`, `item_id`, `page`, `product_id`, `end_date`, `count`, `offset`, `item_ids` |
73
- | `TikTok-Interaction-API` | [`api-tags/tiktok-interaction-api.md`](./api-tags/tiktok-interaction-api.md) | [`api-contracts/tiktok-interaction-api.md`](./api-contracts/tiktok-interaction-api.md) | 7 | Header `Authorization` Bearer | general / comments / content details / comment replies | `cookie`, `device_id`, `iid`, `proxy`, `aweme_id`, `text`, `api_key`, `invite_code`, `user_id`, `sec_user_id` |
74
- | `TikTok-Shop-Web-API` | [`api-tags/tiktok-shop-web-api.md`](./api-tags/tiktok-shop-web-api.md) | [`api-contracts/tiktok-shop-web-api.md`](./api-contracts/tiktok-shop-web-api.md) | 15 | Header `Authorization` Bearer | commerce / search / details / trends / rankings | `region`, `product_id`, `offset`, `seller_id`, `search_word`, `page_token`, `lang`, `count`, `sort_type`, `filter_id` |
75
- | `TikTok-Web-API` | [`api-tags/tiktok-web-api.md`](./api-tags/tiktok-web-api.md) | [`api-contracts/tiktok-web-api.md`](./api-contracts/tiktok-web-api.md) | 58 | Header `Authorization` Bearer | general / profiles / accounts / livestream / content details | `count`, `cursor`, `cookie`, `secUid`, `url`, `keyword`, `search_id`, `user_agent`, `offset`, `coverFormat` |
76
- | `Toutiao-App-API` | [`api-tags/toutiao-app-api.md`](./api-tags/toutiao-app-api.md) | [`api-contracts/toutiao-app-api.md`](./api-contracts/toutiao-app-api.md) | 5 | Header `Authorization` Bearer | content details / profiles / accounts / comments | `group_id`, `offset`, `user_profile_url`, `user_id` |
77
- | `Toutiao-Web-API` | [`api-tags/toutiao-web-api.md`](./api-tags/toutiao-web-api.md) | [`api-contracts/toutiao-web-api.md`](./api-contracts/toutiao-web-api.md) | 2 | Header `Authorization` Bearer | content details | `aweme_id` |
78
- | `Twitter-Web-API` | [`api-tags/twitter-web-api.md`](./api-tags/twitter-web-api.md) | [`api-contracts/twitter-web-api.md`](./api-contracts/twitter-web-api.md) | 13 | Header `Authorization` Bearer | profiles / accounts / content details / comments / search | `cursor`, `screen_name`, `tweet_id`, `rest_id`, `keyword`, `search_type`, `country`, `userId`, `count` |
79
- | `WeChat-Channels-API` | [`api-tags/wechat-channels-api.md`](./api-tags/wechat-channels-api.md) | [`api-contracts/wechat-channels-api.md`](./api-contracts/wechat-channels-api.md) | 9 | Header `Authorization` Bearer | profiles / accounts / search / comments / trends / rankings | `keywords`, `id`, `username`, `lastBuffer`, `comment_id`, `session_buffer`, `last_buffer`, `page`, `exportId` |
80
- | `WeChat-Media-Platform-Web-API` | [`api-tags/wechat-media-platform-web-api.md`](./api-tags/wechat-media-platform-web-api.md) | [`api-contracts/wechat-media-platform-web-api.md`](./api-contracts/wechat-media-platform-web-api.md) | 10 | Header `Authorization` Bearer | content details / comments / details / comment replies | `url`, `comment_id`, `offset`, `buffer`, `content_id`, `ghid`, `sogou_url` |
81
- | `Weibo-App-API` | [`api-tags/weibo-app-api.md`](./api-tags/weibo-app-api.md) | [`api-contracts/weibo-app-api.md`](./api-contracts/weibo-app-api.md) | 20 | Header `Authorization` Bearer | profiles / accounts / content details / search / details | `uid`, `page`, `since_id`, `status_id`, `query`, `count`, `max_id`, `category`, `search_type`, `sort_type` |
82
- | `Weibo-Web-API` | [`api-tags/weibo-web-api.md`](./api-tags/weibo-web-api.md) | [`api-contracts/weibo-web-api.md`](./api-contracts/weibo-web-api.md) | 11 | Header `Authorization` Bearer | profiles / accounts / search / content details / comments | `page`, `max_id`, `post_id`, `uid`, `channel_name`, `cid`, `mid`, `max_id_type`, `keyword`, `search_type` |
83
- | `Weibo-Web-V2-API` | [`api-tags/weibo-web-v2-api.md`](./api-tags/weibo-web-v2-api.md) | [`api-contracts/weibo-web-v2-api.md`](./api-contracts/weibo-web-v2-api.md) | 33 | Header `Authorization` Bearer | search / profiles / accounts / content details / general | `page`, `uid`, `query`, `id`, `max_id`, `count`, `since_id`, `q`, `keyword`, `cursor` |
84
- | `Xiaohongshu-App-API` | [`api-tags/xiaohongshu-app-api.md`](./api-tags/xiaohongshu-app-api.md) | [`api-contracts/xiaohongshu-app-api.md`](./api-contracts/xiaohongshu-app-api.md) | 12 | Header `Authorization` Bearer | content details / profiles / accounts / comments / commerce | `note_id`, `session_id`, `share_link`, `start`, `share_text`, `sort`, `user_id`, `keyword`, `page`, `search_id` |
85
- | `Xiaohongshu-App-V2-API` | [`api-tags/xiaohongshu-app-v2-api.md`](./api-tags/xiaohongshu-app-v2-api.md) | [`api-contracts/xiaohongshu-app-v2-api.md`](./api-contracts/xiaohongshu-app-v2-api.md) | 21 | Header `Authorization` Bearer | content details / commerce / search / details | `source`, `share_text`, `cursor`, `note_id`, `page`, `keyword`, `search_id`, `sku_id`, `user_id`, `tab` |
86
- | `Xiaohongshu-Web-API` | [`api-tags/xiaohongshu-web-api.md`](./api-tags/xiaohongshu-web-api.md) | [`api-contracts/xiaohongshu-web-api.md`](./api-contracts/xiaohongshu-web-api.md) | 17 | Header `Authorization` Bearer | content details / profiles / accounts / search / comments | `note_id`, `share_text`, `cookie`, `proxy`, `lastCursor`, `user_id`, `keyword`, `page`, `xsec_token`, `sort` |
87
- | `Xiaohongshu-Web-V2-API` | [`api-tags/xiaohongshu-web-v2-api.md`](./api-tags/xiaohongshu-web-v2-api.md) | [`api-contracts/xiaohongshu-web-v2-api.md`](./api-contracts/xiaohongshu-web-v2-api.md) | 18 | Header `Authorization` Bearer | content details / profiles / accounts / general / comments | `note_id`, `user_id`, `cursor`, `page`, `keywords`, `short_url`, `sort_type`, `note_type`, `comment_id` |
88
- | `Xigua-App-V2-API` | [`api-tags/xigua-app-v2-api.md`](./api-tags/xigua-app-v2-api.md) | [`api-contracts/xigua-app-v2-api.md`](./api-contracts/xigua-app-v2-api.md) | 7 | Header `Authorization` Bearer | content details / profiles / accounts / comments / search | `item_id`, `user_id`, `offset`, `max_behot_time`, `count`, `keyword`, `order_type`, `min_duration`, `max_duration` |
89
- | `YouTube-Web-API` | [`api-tags/youtube-web-api.md`](./api-tags/youtube-web-api.md) | [`api-contracts/youtube-web-api.md`](./api-contracts/youtube-web-api.md) | 21 | Header `Authorization` Bearer | content details / profiles / accounts / search / comments | `continuation_token`, `language_code`, `country_code`, `channel_id`, `video_id`, `need_format`, `search_query`, `sort_by`, `lang`, `time_zone` |
90
- | `YouTube-Web-V2-API` | [`api-tags/youtube-web-v2-api.md`](./api-tags/youtube-web-v2-api.md) | [`api-contracts/youtube-web-v2-api.md`](./api-contracts/youtube-web-v2-api.md) | 16 | Header `Authorization` Bearer | content details / profiles / accounts / search / livestream | `continuation_token`, `need_format`, `language_code`, `country_code`, `video_id`, `channel_id`, `video_url`, `sort_by`, `channel_url`, `search_query` |
91
- | `Zhihu-Web-API` | [`api-tags/zhihu-web-api.md`](./api-tags/zhihu-web-api.md) | [`api-contracts/zhihu-web-api.md`](./api-contracts/zhihu-web-api.md) | 32 | Header `Authorization` Bearer | search / profiles / accounts / content details / general | `offset`, `limit`, `keyword`, `user_url_token`, `search_hash_id`, `article_id`, `order_by`, `message_content`, `message_id`, `show_all_topics` |
92
- | `iOS-Shortcut` | [`api-tags/ios-shortcut.md`](./api-tags/ios-shortcut.md) | [`api-contracts/ios-shortcut.md`](./api-contracts/ios-shortcut.md) | 1 | Header `Authorization` Bearer | general | None |