@jackwener/opencli 1.4.0 → 1.4.1

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 (209) hide show
  1. package/.github/actions/setup-chrome/action.yml +5 -4
  2. package/.github/workflows/ci.yml +17 -3
  3. package/.github/workflows/e2e-headed.yml +16 -3
  4. package/CHANGELOG.md +23 -0
  5. package/PRIVACY.md +57 -0
  6. package/README.md +1 -1
  7. package/README.zh-CN.md +1 -1
  8. package/SKILL.md +101 -2
  9. package/dist/cli-manifest.json +720 -32
  10. package/dist/clis/apple-podcasts/search.js +2 -1
  11. package/dist/clis/arxiv/search.js +2 -2
  12. package/dist/clis/bbc/news.js +0 -1
  13. package/dist/clis/ctrip/search.js +0 -1
  14. package/dist/clis/douyin/_shared/browser-fetch.d.ts +10 -0
  15. package/dist/clis/douyin/_shared/browser-fetch.js +30 -0
  16. package/dist/clis/douyin/_shared/browser-fetch.test.d.ts +1 -0
  17. package/dist/clis/douyin/_shared/browser-fetch.test.js +31 -0
  18. package/dist/clis/douyin/_shared/creation-id.d.ts +1 -0
  19. package/dist/clis/douyin/_shared/creation-id.js +5 -0
  20. package/dist/clis/douyin/_shared/creation-id.test.d.ts +1 -0
  21. package/dist/clis/douyin/_shared/creation-id.test.js +22 -0
  22. package/dist/clis/douyin/_shared/imagex-upload.d.ts +20 -0
  23. package/dist/clis/douyin/_shared/imagex-upload.js +53 -0
  24. package/dist/clis/douyin/_shared/imagex-upload.test.d.ts +1 -0
  25. package/dist/clis/douyin/_shared/imagex-upload.test.js +87 -0
  26. package/dist/clis/douyin/_shared/sts2.d.ts +8 -0
  27. package/dist/clis/douyin/_shared/sts2.js +15 -0
  28. package/dist/clis/douyin/_shared/text-extra.d.ts +18 -0
  29. package/dist/clis/douyin/_shared/text-extra.js +15 -0
  30. package/dist/clis/douyin/_shared/text-extra.test.d.ts +1 -0
  31. package/dist/clis/douyin/_shared/text-extra.test.js +37 -0
  32. package/dist/clis/douyin/_shared/timing.d.ts +2 -0
  33. package/dist/clis/douyin/_shared/timing.js +22 -0
  34. package/dist/clis/douyin/_shared/timing.test.d.ts +1 -0
  35. package/dist/clis/douyin/_shared/timing.test.js +28 -0
  36. package/dist/clis/douyin/_shared/tos-upload-short-read.test.d.ts +11 -0
  37. package/dist/clis/douyin/_shared/tos-upload-short-read.test.js +83 -0
  38. package/dist/clis/douyin/_shared/tos-upload.d.ts +53 -0
  39. package/dist/clis/douyin/_shared/tos-upload.js +295 -0
  40. package/dist/clis/douyin/_shared/tos-upload.test.d.ts +1 -0
  41. package/dist/clis/douyin/_shared/tos-upload.test.js +229 -0
  42. package/dist/clis/douyin/_shared/transcode.d.ts +27 -0
  43. package/dist/clis/douyin/_shared/transcode.js +45 -0
  44. package/dist/clis/douyin/_shared/transcode.test.d.ts +1 -0
  45. package/dist/clis/douyin/_shared/transcode.test.js +93 -0
  46. package/dist/clis/douyin/_shared/types.d.ts +26 -0
  47. package/dist/clis/douyin/_shared/types.js +1 -0
  48. package/dist/clis/douyin/activities.d.ts +1 -0
  49. package/dist/clis/douyin/activities.js +20 -0
  50. package/dist/clis/douyin/activities.test.d.ts +1 -0
  51. package/dist/clis/douyin/activities.test.js +22 -0
  52. package/dist/clis/douyin/collections.d.ts +1 -0
  53. package/dist/clis/douyin/collections.js +22 -0
  54. package/dist/clis/douyin/collections.test.d.ts +1 -0
  55. package/dist/clis/douyin/collections.test.js +23 -0
  56. package/dist/clis/douyin/delete.d.ts +1 -0
  57. package/dist/clis/douyin/delete.js +18 -0
  58. package/dist/clis/douyin/delete.test.d.ts +1 -0
  59. package/dist/clis/douyin/delete.test.js +11 -0
  60. package/dist/clis/douyin/draft.d.ts +14 -0
  61. package/dist/clis/douyin/draft.js +237 -0
  62. package/dist/clis/douyin/draft.test.d.ts +1 -0
  63. package/dist/clis/douyin/draft.test.js +11 -0
  64. package/dist/clis/douyin/drafts.d.ts +1 -0
  65. package/dist/clis/douyin/drafts.js +23 -0
  66. package/dist/clis/douyin/drafts.test.d.ts +1 -0
  67. package/dist/clis/douyin/drafts.test.js +11 -0
  68. package/dist/clis/douyin/hashtag.d.ts +1 -0
  69. package/dist/clis/douyin/hashtag.js +45 -0
  70. package/dist/clis/douyin/hashtag.test.d.ts +1 -0
  71. package/dist/clis/douyin/hashtag.test.js +25 -0
  72. package/dist/clis/douyin/location.d.ts +1 -0
  73. package/dist/clis/douyin/location.js +24 -0
  74. package/dist/clis/douyin/location.test.d.ts +1 -0
  75. package/dist/clis/douyin/location.test.js +23 -0
  76. package/dist/clis/douyin/profile.d.ts +1 -0
  77. package/dist/clis/douyin/profile.js +28 -0
  78. package/dist/clis/douyin/profile.test.d.ts +1 -0
  79. package/dist/clis/douyin/profile.test.js +11 -0
  80. package/dist/clis/douyin/publish.d.ts +14 -0
  81. package/dist/clis/douyin/publish.js +288 -0
  82. package/dist/clis/douyin/publish.test.d.ts +1 -0
  83. package/dist/clis/douyin/publish.test.js +38 -0
  84. package/dist/clis/douyin/stats.d.ts +1 -0
  85. package/dist/clis/douyin/stats.js +27 -0
  86. package/dist/clis/douyin/stats.test.d.ts +1 -0
  87. package/dist/clis/douyin/stats.test.js +22 -0
  88. package/dist/clis/douyin/update.d.ts +1 -0
  89. package/dist/clis/douyin/update.js +31 -0
  90. package/dist/clis/douyin/update.test.d.ts +1 -0
  91. package/dist/clis/douyin/update.test.js +11 -0
  92. package/dist/clis/douyin/videos.d.ts +1 -0
  93. package/dist/clis/douyin/videos.js +34 -0
  94. package/dist/clis/douyin/videos.test.d.ts +1 -0
  95. package/dist/clis/douyin/videos.test.js +11 -0
  96. package/dist/clis/hackernews/search.yaml +1 -1
  97. package/dist/clis/instagram/search.yaml +2 -1
  98. package/dist/clis/linux-do/search.yaml +3 -1
  99. package/dist/clis/medium/search.js +1 -1
  100. package/dist/clis/reuters/search.js +0 -1
  101. package/dist/clis/twitter/search.js +5 -3
  102. package/dist/clis/twitter/search.test.js +54 -2
  103. package/dist/clis/weibo/comments.d.ts +1 -0
  104. package/dist/clis/weibo/comments.js +53 -0
  105. package/dist/clis/weibo/feed.d.ts +1 -0
  106. package/dist/clis/weibo/feed.js +56 -0
  107. package/dist/clis/weibo/hot.js +0 -1
  108. package/dist/clis/weibo/me.d.ts +1 -0
  109. package/dist/clis/weibo/me.js +76 -0
  110. package/dist/clis/weibo/post.d.ts +1 -0
  111. package/dist/clis/weibo/post.js +75 -0
  112. package/dist/clis/weibo/user.d.ts +1 -0
  113. package/dist/clis/weibo/user.js +63 -0
  114. package/dist/clis/weibo/utils.d.ts +6 -0
  115. package/dist/clis/weibo/utils.js +30 -0
  116. package/dist/clis/weread/search.js +3 -2
  117. package/dist/clis/xueqiu/search.yaml +2 -1
  118. package/dist/clis/yahoo-finance/quote.js +0 -1
  119. package/dist/clis/youtube/channel.d.ts +1 -0
  120. package/dist/clis/youtube/channel.js +150 -0
  121. package/dist/clis/youtube/comments.d.ts +1 -0
  122. package/dist/clis/youtube/comments.js +95 -0
  123. package/dist/clis/youtube/search.js +0 -1
  124. package/dist/clis/zhihu/search.yaml +2 -1
  125. package/dist/external-clis.yaml +0 -17
  126. package/dist/weread-search-regression.test.d.ts +1 -0
  127. package/dist/weread-search-regression.test.js +39 -0
  128. package/docs/.vitepress/config.mts +13 -0
  129. package/docs/adapters/browser/douyin.md +75 -0
  130. package/docs/adapters/browser/twitter.md +6 -0
  131. package/docs/adapters/index.md +6 -1
  132. package/extension/dist/background.js +508 -518
  133. package/extension/manifest.json +6 -2
  134. package/extension/package.json +1 -1
  135. package/extension/popup.html +84 -0
  136. package/extension/popup.js +25 -0
  137. package/extension/src/background.ts +20 -1
  138. package/package.json +1 -1
  139. package/src/clis/apple-podcasts/search.ts +2 -1
  140. package/src/clis/arxiv/search.ts +2 -2
  141. package/src/clis/bbc/news.ts +0 -1
  142. package/src/clis/ctrip/search.ts +0 -1
  143. package/src/clis/douyin/_shared/browser-fetch.test.ts +38 -0
  144. package/src/clis/douyin/_shared/browser-fetch.ts +45 -0
  145. package/src/clis/douyin/_shared/creation-id.test.ts +26 -0
  146. package/src/clis/douyin/_shared/creation-id.ts +8 -0
  147. package/src/clis/douyin/_shared/imagex-upload.test.ts +113 -0
  148. package/src/clis/douyin/_shared/imagex-upload.ts +76 -0
  149. package/src/clis/douyin/_shared/sts2.ts +20 -0
  150. package/src/clis/douyin/_shared/text-extra.test.ts +42 -0
  151. package/src/clis/douyin/_shared/text-extra.ts +33 -0
  152. package/src/clis/douyin/_shared/timing.test.ts +38 -0
  153. package/src/clis/douyin/_shared/timing.ts +22 -0
  154. package/src/clis/douyin/_shared/tos-upload-short-read.test.ts +102 -0
  155. package/src/clis/douyin/_shared/tos-upload.test.ts +281 -0
  156. package/src/clis/douyin/_shared/tos-upload.ts +444 -0
  157. package/src/clis/douyin/_shared/transcode.test.ts +117 -0
  158. package/src/clis/douyin/_shared/transcode.ts +78 -0
  159. package/src/clis/douyin/_shared/types.ts +29 -0
  160. package/src/clis/douyin/activities.test.ts +25 -0
  161. package/src/clis/douyin/activities.ts +23 -0
  162. package/src/clis/douyin/collections.test.ts +26 -0
  163. package/src/clis/douyin/collections.ts +25 -0
  164. package/src/clis/douyin/delete.test.ts +12 -0
  165. package/src/clis/douyin/delete.ts +20 -0
  166. package/src/clis/douyin/draft.test.ts +12 -0
  167. package/src/clis/douyin/draft.ts +282 -0
  168. package/src/clis/douyin/drafts.test.ts +12 -0
  169. package/src/clis/douyin/drafts.ts +27 -0
  170. package/src/clis/douyin/hashtag.test.ts +28 -0
  171. package/src/clis/douyin/hashtag.ts +56 -0
  172. package/src/clis/douyin/location.test.ts +26 -0
  173. package/src/clis/douyin/location.ts +27 -0
  174. package/src/clis/douyin/profile.test.ts +12 -0
  175. package/src/clis/douyin/profile.ts +37 -0
  176. package/src/clis/douyin/publish.test.ts +45 -0
  177. package/src/clis/douyin/publish.ts +340 -0
  178. package/src/clis/douyin/stats.test.ts +25 -0
  179. package/src/clis/douyin/stats.ts +30 -0
  180. package/src/clis/douyin/update.test.ts +12 -0
  181. package/src/clis/douyin/update.ts +43 -0
  182. package/src/clis/douyin/videos.test.ts +12 -0
  183. package/src/clis/douyin/videos.ts +49 -0
  184. package/src/clis/hackernews/search.yaml +1 -1
  185. package/src/clis/instagram/search.yaml +2 -1
  186. package/src/clis/linux-do/search.yaml +3 -1
  187. package/src/clis/medium/search.ts +1 -1
  188. package/src/clis/reuters/search.ts +0 -1
  189. package/src/clis/twitter/search.test.ts +69 -2
  190. package/src/clis/twitter/search.ts +5 -3
  191. package/src/clis/weibo/comments.ts +54 -0
  192. package/src/clis/weibo/feed.ts +57 -0
  193. package/src/clis/weibo/hot.ts +0 -1
  194. package/src/clis/weibo/me.ts +77 -0
  195. package/src/clis/weibo/post.ts +77 -0
  196. package/src/clis/weibo/user.ts +64 -0
  197. package/src/clis/weibo/utils.ts +32 -0
  198. package/src/clis/weread/search.ts +3 -2
  199. package/src/clis/xueqiu/search.yaml +2 -1
  200. package/src/clis/yahoo-finance/quote.ts +0 -1
  201. package/src/clis/youtube/channel.ts +155 -0
  202. package/src/clis/youtube/comments.ts +97 -0
  203. package/src/clis/youtube/search.ts +0 -1
  204. package/src/clis/zhihu/search.yaml +2 -1
  205. package/src/external-clis.yaml +0 -17
  206. package/src/weread-search-regression.test.ts +44 -0
  207. package/tests/e2e/browser-public-extended.test.ts +162 -0
  208. package/tests/e2e/browser-public.test.ts +7 -146
  209. package/vitest.config.ts +24 -17
@@ -219,7 +219,8 @@
219
219
  "title",
220
220
  "author",
221
221
  "episodes",
222
- "genre"
222
+ "genre",
223
+ "url"
223
224
  ]
224
225
  },
225
226
  {
@@ -307,7 +308,8 @@
307
308
  "id",
308
309
  "title",
309
310
  "authors",
310
- "published"
311
+ "published",
312
+ "url"
311
313
  ]
312
314
  },
313
315
  {
@@ -3314,35 +3316,501 @@
3314
3316
  "browser": true,
3315
3317
  "args": [
3316
3318
  {
3317
- "name": "text",
3319
+ "name": "text",
3320
+ "type": "str",
3321
+ "required": true,
3322
+ "positional": true,
3323
+ "help": "Message text to send"
3324
+ }
3325
+ ],
3326
+ "type": "ts",
3327
+ "modulePath": "doubao-app/send.js",
3328
+ "domain": "doubao-app",
3329
+ "columns": [
3330
+ "Status",
3331
+ "Text"
3332
+ ]
3333
+ },
3334
+ {
3335
+ "site": "doubao-app",
3336
+ "name": "status",
3337
+ "description": "Check CDP connection to Doubao desktop app",
3338
+ "strategy": "ui",
3339
+ "browser": true,
3340
+ "args": [],
3341
+ "type": "ts",
3342
+ "modulePath": "doubao-app/status.js",
3343
+ "domain": "doubao-app",
3344
+ "columns": [
3345
+ "Status",
3346
+ "Url",
3347
+ "Title"
3348
+ ]
3349
+ },
3350
+ {
3351
+ "site": "douyin",
3352
+ "name": "activities",
3353
+ "description": "官方活动列表",
3354
+ "strategy": "cookie",
3355
+ "browser": true,
3356
+ "args": [],
3357
+ "type": "ts",
3358
+ "modulePath": "douyin/activities.js",
3359
+ "domain": "creator.douyin.com",
3360
+ "columns": [
3361
+ "activity_id",
3362
+ "title",
3363
+ "end_time"
3364
+ ]
3365
+ },
3366
+ {
3367
+ "site": "douyin",
3368
+ "name": "collections",
3369
+ "description": "合集列表",
3370
+ "strategy": "cookie",
3371
+ "browser": true,
3372
+ "args": [
3373
+ {
3374
+ "name": "limit",
3375
+ "type": "int",
3376
+ "default": 20,
3377
+ "required": false,
3378
+ "help": ""
3379
+ }
3380
+ ],
3381
+ "type": "ts",
3382
+ "modulePath": "douyin/collections.js",
3383
+ "domain": "creator.douyin.com",
3384
+ "columns": [
3385
+ "mix_id",
3386
+ "name",
3387
+ "item_count"
3388
+ ]
3389
+ },
3390
+ {
3391
+ "site": "douyin",
3392
+ "name": "delete",
3393
+ "description": "删除作品",
3394
+ "strategy": "cookie",
3395
+ "browser": true,
3396
+ "args": [
3397
+ {
3398
+ "name": "aweme_id",
3399
+ "type": "str",
3400
+ "required": true,
3401
+ "positional": true,
3402
+ "help": "作品 ID"
3403
+ }
3404
+ ],
3405
+ "type": "ts",
3406
+ "modulePath": "douyin/delete.js",
3407
+ "domain": "creator.douyin.com",
3408
+ "columns": [
3409
+ "status"
3410
+ ]
3411
+ },
3412
+ {
3413
+ "site": "douyin",
3414
+ "name": "draft",
3415
+ "description": "上传视频并保存为草稿",
3416
+ "strategy": "cookie",
3417
+ "browser": true,
3418
+ "args": [
3419
+ {
3420
+ "name": "video",
3421
+ "type": "str",
3422
+ "required": true,
3423
+ "positional": true,
3424
+ "help": "视频文件路径"
3425
+ },
3426
+ {
3427
+ "name": "title",
3428
+ "type": "str",
3429
+ "required": true,
3430
+ "help": "视频标题(≤30字)"
3431
+ },
3432
+ {
3433
+ "name": "caption",
3434
+ "type": "str",
3435
+ "default": "",
3436
+ "required": false,
3437
+ "help": "正文内容(≤1000字,支持 #话题)"
3438
+ },
3439
+ {
3440
+ "name": "cover",
3441
+ "type": "str",
3442
+ "default": "",
3443
+ "required": false,
3444
+ "help": "封面图片路径"
3445
+ },
3446
+ {
3447
+ "name": "visibility",
3448
+ "type": "str",
3449
+ "default": "public",
3450
+ "required": false,
3451
+ "help": "",
3452
+ "choices": [
3453
+ "public",
3454
+ "friends",
3455
+ "private"
3456
+ ]
3457
+ }
3458
+ ],
3459
+ "type": "ts",
3460
+ "modulePath": "douyin/draft.js",
3461
+ "domain": "creator.douyin.com",
3462
+ "columns": [
3463
+ "status",
3464
+ "aweme_id"
3465
+ ]
3466
+ },
3467
+ {
3468
+ "site": "douyin",
3469
+ "name": "drafts",
3470
+ "description": "获取草稿列表",
3471
+ "strategy": "cookie",
3472
+ "browser": true,
3473
+ "args": [
3474
+ {
3475
+ "name": "limit",
3476
+ "type": "int",
3477
+ "default": 20,
3478
+ "required": false,
3479
+ "help": ""
3480
+ }
3481
+ ],
3482
+ "type": "ts",
3483
+ "modulePath": "douyin/drafts.js",
3484
+ "domain": "creator.douyin.com",
3485
+ "columns": [
3486
+ "aweme_id",
3487
+ "title",
3488
+ "create_time"
3489
+ ]
3490
+ },
3491
+ {
3492
+ "site": "douyin",
3493
+ "name": "hashtag",
3494
+ "description": "话题搜索 / AI推荐 / 热点词",
3495
+ "strategy": "cookie",
3496
+ "browser": true,
3497
+ "args": [
3498
+ {
3499
+ "name": "action",
3500
+ "type": "str",
3501
+ "required": true,
3502
+ "positional": true,
3503
+ "help": "search=关键词搜索 suggest=AI推荐 hot=热点词",
3504
+ "choices": [
3505
+ "search",
3506
+ "suggest",
3507
+ "hot"
3508
+ ]
3509
+ },
3510
+ {
3511
+ "name": "keyword",
3512
+ "type": "str",
3513
+ "default": "",
3514
+ "required": false,
3515
+ "help": "搜索关键词(search/hot 使用)"
3516
+ },
3517
+ {
3518
+ "name": "cover",
3519
+ "type": "str",
3520
+ "default": "",
3521
+ "required": false,
3522
+ "help": "封面 URI(suggest 使用)"
3523
+ },
3524
+ {
3525
+ "name": "limit",
3526
+ "type": "int",
3527
+ "default": 10,
3528
+ "required": false,
3529
+ "help": ""
3530
+ }
3531
+ ],
3532
+ "type": "ts",
3533
+ "modulePath": "douyin/hashtag.js",
3534
+ "domain": "creator.douyin.com",
3535
+ "columns": [
3536
+ "name",
3537
+ "id",
3538
+ "view_count"
3539
+ ]
3540
+ },
3541
+ {
3542
+ "site": "douyin",
3543
+ "name": "location",
3544
+ "description": "地理位置 POI 搜索",
3545
+ "strategy": "cookie",
3546
+ "browser": true,
3547
+ "args": [
3548
+ {
3549
+ "name": "query",
3550
+ "type": "str",
3551
+ "required": true,
3552
+ "positional": true,
3553
+ "help": "地名关键词"
3554
+ },
3555
+ {
3556
+ "name": "limit",
3557
+ "type": "int",
3558
+ "default": 20,
3559
+ "required": false,
3560
+ "help": ""
3561
+ }
3562
+ ],
3563
+ "type": "ts",
3564
+ "modulePath": "douyin/location.js",
3565
+ "domain": "creator.douyin.com",
3566
+ "columns": [
3567
+ "poi_id",
3568
+ "name",
3569
+ "address",
3570
+ "city"
3571
+ ]
3572
+ },
3573
+ {
3574
+ "site": "douyin",
3575
+ "name": "profile",
3576
+ "description": "获取账号信息",
3577
+ "strategy": "cookie",
3578
+ "browser": true,
3579
+ "args": [],
3580
+ "type": "ts",
3581
+ "modulePath": "douyin/profile.js",
3582
+ "domain": "creator.douyin.com",
3583
+ "columns": [
3584
+ "uid",
3585
+ "nickname",
3586
+ "follower_count",
3587
+ "following_count",
3588
+ "aweme_count"
3589
+ ]
3590
+ },
3591
+ {
3592
+ "site": "douyin",
3593
+ "name": "publish",
3594
+ "description": "定时发布视频到抖音(必须设置 2h ~ 14天后的发布时间)",
3595
+ "strategy": "cookie",
3596
+ "browser": true,
3597
+ "args": [
3598
+ {
3599
+ "name": "video",
3600
+ "type": "str",
3601
+ "required": true,
3602
+ "positional": true,
3603
+ "help": "视频文件路径"
3604
+ },
3605
+ {
3606
+ "name": "title",
3607
+ "type": "str",
3608
+ "required": true,
3609
+ "help": "视频标题(≤30字)"
3610
+ },
3611
+ {
3612
+ "name": "schedule",
3613
+ "type": "str",
3614
+ "required": true,
3615
+ "help": "定时发布时间(ISO8601 或 Unix 秒,2h ~ 14天后)"
3616
+ },
3617
+ {
3618
+ "name": "caption",
3619
+ "type": "str",
3620
+ "default": "",
3621
+ "required": false,
3622
+ "help": "正文内容(≤1000字,支持 #话题)"
3623
+ },
3624
+ {
3625
+ "name": "cover",
3626
+ "type": "str",
3627
+ "default": "",
3628
+ "required": false,
3629
+ "help": "封面图片路径(不提供时使用视频截帧)"
3630
+ },
3631
+ {
3632
+ "name": "visibility",
3633
+ "type": "str",
3634
+ "default": "public",
3635
+ "required": false,
3636
+ "help": "",
3637
+ "choices": [
3638
+ "public",
3639
+ "friends",
3640
+ "private"
3641
+ ]
3642
+ },
3643
+ {
3644
+ "name": "allow_download",
3645
+ "type": "bool",
3646
+ "default": false,
3647
+ "required": false,
3648
+ "help": "允许下载"
3649
+ },
3650
+ {
3651
+ "name": "collection",
3652
+ "type": "str",
3653
+ "default": "",
3654
+ "required": false,
3655
+ "help": "合集 ID"
3656
+ },
3657
+ {
3658
+ "name": "activity",
3659
+ "type": "str",
3660
+ "default": "",
3661
+ "required": false,
3662
+ "help": "活动 ID"
3663
+ },
3664
+ {
3665
+ "name": "poi_id",
3666
+ "type": "str",
3667
+ "default": "",
3668
+ "required": false,
3669
+ "help": "地理位置 ID"
3670
+ },
3671
+ {
3672
+ "name": "poi_name",
3673
+ "type": "str",
3674
+ "default": "",
3675
+ "required": false,
3676
+ "help": "地理位置名称"
3677
+ },
3678
+ {
3679
+ "name": "hotspot",
3680
+ "type": "str",
3681
+ "default": "",
3682
+ "required": false,
3683
+ "help": "关联热点词"
3684
+ },
3685
+ {
3686
+ "name": "no_safety_check",
3687
+ "type": "bool",
3688
+ "default": false,
3689
+ "required": false,
3690
+ "help": "跳过内容安全检测"
3691
+ },
3692
+ {
3693
+ "name": "sync_toutiao",
3694
+ "type": "bool",
3695
+ "default": false,
3696
+ "required": false,
3697
+ "help": "同步发布到头条"
3698
+ }
3699
+ ],
3700
+ "type": "ts",
3701
+ "modulePath": "douyin/publish.js",
3702
+ "domain": "creator.douyin.com",
3703
+ "columns": [
3704
+ "status",
3705
+ "aweme_id",
3706
+ "url",
3707
+ "publish_time"
3708
+ ]
3709
+ },
3710
+ {
3711
+ "site": "douyin",
3712
+ "name": "stats",
3713
+ "description": "作品数据分析",
3714
+ "strategy": "cookie",
3715
+ "browser": true,
3716
+ "args": [
3717
+ {
3718
+ "name": "aweme_id",
3719
+ "type": "str",
3720
+ "required": true,
3721
+ "positional": true,
3722
+ "help": ""
3723
+ }
3724
+ ],
3725
+ "type": "ts",
3726
+ "modulePath": "douyin/stats.js",
3727
+ "domain": "creator.douyin.com",
3728
+ "columns": [
3729
+ "metric",
3730
+ "value"
3731
+ ]
3732
+ },
3733
+ {
3734
+ "site": "douyin",
3735
+ "name": "update",
3736
+ "description": "更新视频信息",
3737
+ "strategy": "cookie",
3738
+ "browser": true,
3739
+ "args": [
3740
+ {
3741
+ "name": "aweme_id",
3742
+ "type": "str",
3743
+ "required": true,
3744
+ "positional": true,
3745
+ "help": ""
3746
+ },
3747
+ {
3748
+ "name": "reschedule",
3318
3749
  "type": "str",
3319
- "required": true,
3320
- "positional": true,
3321
- "help": "Message text to send"
3750
+ "default": "",
3751
+ "required": false,
3752
+ "help": "新的发布时间(ISO8601 Unix 秒)"
3753
+ },
3754
+ {
3755
+ "name": "caption",
3756
+ "type": "str",
3757
+ "default": "",
3758
+ "required": false,
3759
+ "help": "新的正文内容"
3322
3760
  }
3323
3761
  ],
3324
3762
  "type": "ts",
3325
- "modulePath": "doubao-app/send.js",
3326
- "domain": "doubao-app",
3763
+ "modulePath": "douyin/update.js",
3764
+ "domain": "creator.douyin.com",
3327
3765
  "columns": [
3328
- "Status",
3329
- "Text"
3766
+ "status"
3330
3767
  ]
3331
3768
  },
3332
3769
  {
3333
- "site": "doubao-app",
3334
- "name": "status",
3335
- "description": "Check CDP connection to Doubao desktop app",
3336
- "strategy": "ui",
3770
+ "site": "douyin",
3771
+ "name": "videos",
3772
+ "description": "获取作品列表",
3773
+ "strategy": "cookie",
3337
3774
  "browser": true,
3338
- "args": [],
3775
+ "args": [
3776
+ {
3777
+ "name": "limit",
3778
+ "type": "int",
3779
+ "default": 20,
3780
+ "required": false,
3781
+ "help": "每页数量"
3782
+ },
3783
+ {
3784
+ "name": "page",
3785
+ "type": "int",
3786
+ "default": 1,
3787
+ "required": false,
3788
+ "help": "页码"
3789
+ },
3790
+ {
3791
+ "name": "status",
3792
+ "type": "str",
3793
+ "default": "all",
3794
+ "required": false,
3795
+ "help": "",
3796
+ "choices": [
3797
+ "all",
3798
+ "published",
3799
+ "reviewing",
3800
+ "scheduled"
3801
+ ]
3802
+ }
3803
+ ],
3339
3804
  "type": "ts",
3340
- "modulePath": "doubao-app/status.js",
3341
- "domain": "doubao-app",
3805
+ "modulePath": "douyin/videos.js",
3806
+ "domain": "creator.douyin.com",
3342
3807
  "columns": [
3343
- "Status",
3344
- "Url",
3345
- "Title"
3808
+ "aweme_id",
3809
+ "title",
3810
+ "status",
3811
+ "play_count",
3812
+ "digg_count",
3813
+ "create_time"
3346
3814
  ]
3347
3815
  },
3348
3816
  {
@@ -4159,7 +4627,8 @@
4159
4627
  "title",
4160
4628
  "score",
4161
4629
  "author",
4162
- "comments"
4630
+ "comments",
4631
+ "url"
4163
4632
  ],
4164
4633
  "pipeline": [
4165
4634
  {
@@ -4758,14 +5227,15 @@
4758
5227
  "username",
4759
5228
  "name",
4760
5229
  "verified",
4761
- "private"
5230
+ "private",
5231
+ "url"
4762
5232
  ],
4763
5233
  "pipeline": [
4764
5234
  {
4765
5235
  "navigate": "https://www.instagram.com"
4766
5236
  },
4767
5237
  {
4768
- "evaluate": "(async () => {\n const query = ${{ args.query | json }};\n const limit = ${{ args.limit }};\n const res = await fetch(\n 'https://www.instagram.com/web/search/topsearch/?query=' + encodeURIComponent(query) + '&context=user',\n {\n credentials: 'include',\n headers: { 'X-IG-App-ID': '936619743392459' }\n }\n );\n if (!res.ok) throw new Error('HTTP ' + res.status + ' - make sure you are logged in to Instagram');\n const data = await res.json();\n const users = (data?.users || []).slice(0, limit);\n return users.map((item, i) => ({\n rank: i + 1,\n username: item.user?.username || '',\n name: item.user?.full_name || '',\n verified: item.user?.is_verified ? 'Yes' : 'No',\n private: item.user?.is_private ? 'Yes' : 'No',\n }));\n})()\n"
5238
+ "evaluate": "(async () => {\n const query = ${{ args.query | json }};\n const limit = ${{ args.limit }};\n const res = await fetch(\n 'https://www.instagram.com/web/search/topsearch/?query=' + encodeURIComponent(query) + '&context=user',\n {\n credentials: 'include',\n headers: { 'X-IG-App-ID': '936619743392459' }\n }\n );\n if (!res.ok) throw new Error('HTTP ' + res.status + ' - make sure you are logged in to Instagram');\n const data = await res.json();\n const users = (data?.users || []).slice(0, limit);\n return users.map((item, i) => ({\n rank: i + 1,\n username: item.user?.username || '',\n name: item.user?.full_name || '',\n verified: item.user?.is_verified ? 'Yes' : 'No',\n private: item.user?.is_private ? 'Yes' : 'No',\n url: 'https://www.instagram.com/' + (item.user?.username || ''),\n }));\n})()\n"
4769
5239
  }
4770
5240
  ],
4771
5241
  "type": "yaml"
@@ -5748,14 +6218,15 @@
5748
6218
  "title",
5749
6219
  "views",
5750
6220
  "likes",
5751
- "replies"
6221
+ "replies",
6222
+ "url"
5752
6223
  ],
5753
6224
  "pipeline": [
5754
6225
  {
5755
6226
  "navigate": "https://linux.do"
5756
6227
  },
5757
6228
  {
5758
- "evaluate": "(async () => {\n const keyword = ${{ args.query | json }};\n const res = await fetch('/search.json?q=' + encodeURIComponent(keyword), { credentials: 'include' });\n if (!res.ok) throw new Error('HTTP ' + res.status + ' - 请先登录 linux.do');\n let data;\n try { data = await res.json(); } catch { throw new Error('响应不是有效 JSON - 请先登录 linux.do'); }\n const topics = data?.topics || [];\n return topics.slice(0, ${{ args.limit }}).map(t => ({\n title: t.title,\n views: t.views,\n likes: t.like_count,\n replies: (t.posts_count || 1) - 1,\n }));\n})()\n"
6229
+ "evaluate": "(async () => {\n const keyword = ${{ args.query | json }};\n const res = await fetch('/search.json?q=' + encodeURIComponent(keyword), { credentials: 'include' });\n if (!res.ok) throw new Error('HTTP ' + res.status + ' - 请先登录 linux.do');\n let data;\n try { data = await res.json(); } catch { throw new Error('响应不是有效 JSON - 请先登录 linux.do'); }\n const topics = data?.topics || [];\n return topics.slice(0, ${{ args.limit }}).map(t => ({\n title: t.title,\n views: t.views,\n likes: t.like_count,\n replies: (t.posts_count || 1) - 1,\n url: 'https://linux.do/t/topic/' + t.id,\n }));\n})()\n"
5759
6230
  },
5760
6231
  {
5761
6232
  "map": {
@@ -5763,7 +6234,8 @@
5763
6234
  "title": "${{ item.title }}",
5764
6235
  "views": "${{ item.views }}",
5765
6236
  "likes": "${{ item.likes }}",
5766
- "replies": "${{ item.replies }}"
6237
+ "replies": "${{ item.replies }}",
6238
+ "url": "${{ item.url }}"
5767
6239
  }
5768
6240
  },
5769
6241
  {
@@ -6072,7 +6544,8 @@
6072
6544
  "author",
6073
6545
  "date",
6074
6546
  "readTime",
6075
- "claps"
6547
+ "claps",
6548
+ "url"
6076
6549
  ]
6077
6550
  },
6078
6551
  {
@@ -8803,6 +9276,17 @@
8803
9276
  "positional": true,
8804
9277
  "help": ""
8805
9278
  },
9279
+ {
9280
+ "name": "filter",
9281
+ "type": "string",
9282
+ "default": "top",
9283
+ "required": false,
9284
+ "help": "",
9285
+ "choices": [
9286
+ "top",
9287
+ "live"
9288
+ ]
9289
+ },
8806
9290
  {
8807
9291
  "name": "limit",
8808
9292
  "type": "int",
@@ -9471,6 +9955,68 @@
9471
9955
  ],
9472
9956
  "navigateBefore": false
9473
9957
  },
9958
+ {
9959
+ "site": "weibo",
9960
+ "name": "comments",
9961
+ "description": "Get comments on a Weibo post",
9962
+ "strategy": "cookie",
9963
+ "browser": true,
9964
+ "args": [
9965
+ {
9966
+ "name": "id",
9967
+ "type": "str",
9968
+ "required": true,
9969
+ "positional": true,
9970
+ "help": "Post ID (numeric idstr)"
9971
+ },
9972
+ {
9973
+ "name": "limit",
9974
+ "type": "int",
9975
+ "default": 20,
9976
+ "required": false,
9977
+ "help": "Number of comments (max 50)"
9978
+ }
9979
+ ],
9980
+ "type": "ts",
9981
+ "modulePath": "weibo/comments.js",
9982
+ "domain": "weibo.com",
9983
+ "columns": [
9984
+ "rank",
9985
+ "author",
9986
+ "text",
9987
+ "likes",
9988
+ "replies",
9989
+ "time"
9990
+ ]
9991
+ },
9992
+ {
9993
+ "site": "weibo",
9994
+ "name": "feed",
9995
+ "description": "Weibo home timeline (posts from followed users)",
9996
+ "strategy": "cookie",
9997
+ "browser": true,
9998
+ "args": [
9999
+ {
10000
+ "name": "limit",
10001
+ "type": "int",
10002
+ "default": 15,
10003
+ "required": false,
10004
+ "help": "Number of posts (max 50)"
10005
+ }
10006
+ ],
10007
+ "type": "ts",
10008
+ "modulePath": "weibo/feed.js",
10009
+ "domain": "weibo.com",
10010
+ "columns": [
10011
+ "author",
10012
+ "text",
10013
+ "reposts",
10014
+ "comments",
10015
+ "likes",
10016
+ "time",
10017
+ "url"
10018
+ ]
10019
+ },
9474
10020
  {
9475
10021
  "site": "weibo",
9476
10022
  "name": "hot",
@@ -9498,6 +10044,49 @@
9498
10044
  "url"
9499
10045
  ]
9500
10046
  },
10047
+ {
10048
+ "site": "weibo",
10049
+ "name": "me",
10050
+ "description": "My Weibo profile info",
10051
+ "strategy": "cookie",
10052
+ "browser": true,
10053
+ "args": [],
10054
+ "type": "ts",
10055
+ "modulePath": "weibo/me.js",
10056
+ "domain": "weibo.com",
10057
+ "columns": [
10058
+ "screen_name",
10059
+ "uid",
10060
+ "followers",
10061
+ "following",
10062
+ "statuses",
10063
+ "verified",
10064
+ "location"
10065
+ ]
10066
+ },
10067
+ {
10068
+ "site": "weibo",
10069
+ "name": "post",
10070
+ "description": "Get a single Weibo post",
10071
+ "strategy": "cookie",
10072
+ "browser": true,
10073
+ "args": [
10074
+ {
10075
+ "name": "id",
10076
+ "type": "str",
10077
+ "required": true,
10078
+ "positional": true,
10079
+ "help": "Post ID (numeric idstr or mblogid from URL)"
10080
+ }
10081
+ ],
10082
+ "type": "ts",
10083
+ "modulePath": "weibo/post.js",
10084
+ "domain": "weibo.com",
10085
+ "columns": [
10086
+ "field",
10087
+ "value"
10088
+ ]
10089
+ },
9501
10090
  {
9502
10091
  "site": "weibo",
9503
10092
  "name": "search",
@@ -9531,6 +10120,36 @@
9531
10120
  "url"
9532
10121
  ]
9533
10122
  },
10123
+ {
10124
+ "site": "weibo",
10125
+ "name": "user",
10126
+ "description": "Get Weibo user profile",
10127
+ "strategy": "cookie",
10128
+ "browser": true,
10129
+ "args": [
10130
+ {
10131
+ "name": "id",
10132
+ "type": "str",
10133
+ "required": true,
10134
+ "positional": true,
10135
+ "help": "User ID (numeric uid) or screen name"
10136
+ }
10137
+ ],
10138
+ "type": "ts",
10139
+ "modulePath": "weibo/user.js",
10140
+ "domain": "weibo.com",
10141
+ "columns": [
10142
+ "screen_name",
10143
+ "uid",
10144
+ "followers",
10145
+ "following",
10146
+ "statuses",
10147
+ "verified",
10148
+ "description",
10149
+ "location",
10150
+ "url"
10151
+ ]
10152
+ },
9534
10153
  {
9535
10154
  "site": "weixin",
9536
10155
  "name": "download",
@@ -9741,7 +10360,8 @@
9741
10360
  "rank",
9742
10361
  "title",
9743
10362
  "author",
9744
- "bookId"
10363
+ "bookId",
10364
+ "url"
9745
10365
  ]
9746
10366
  },
9747
10367
  {
@@ -10657,7 +11277,8 @@
10657
11277
  "name",
10658
11278
  "exchange",
10659
11279
  "price",
10660
- "changePercent"
11280
+ "changePercent",
11281
+ "url"
10661
11282
  ],
10662
11283
  "pipeline": [
10663
11284
  {
@@ -10672,7 +11293,8 @@
10672
11293
  "name": "${{ item.name }}",
10673
11294
  "exchange": "${{ item.exchange }}",
10674
11295
  "price": "${{ item.price }}",
10675
- "changePercent": "${{ item.changePercent }}"
11296
+ "changePercent": "${{ item.changePercent }}",
11297
+ "url": "${{ item.url }}"
10676
11298
  }
10677
11299
  },
10678
11300
  {
@@ -11361,6 +11983,70 @@
11361
11983
  "url"
11362
11984
  ]
11363
11985
  },
11986
+ {
11987
+ "site": "youtube",
11988
+ "name": "channel",
11989
+ "description": "Get YouTube channel info and recent videos",
11990
+ "strategy": "cookie",
11991
+ "browser": true,
11992
+ "args": [
11993
+ {
11994
+ "name": "id",
11995
+ "type": "str",
11996
+ "required": true,
11997
+ "positional": true,
11998
+ "help": "Channel ID (UCxxxx) or handle (@name)"
11999
+ },
12000
+ {
12001
+ "name": "limit",
12002
+ "type": "int",
12003
+ "default": 10,
12004
+ "required": false,
12005
+ "help": "Max recent videos (max 30)"
12006
+ }
12007
+ ],
12008
+ "type": "ts",
12009
+ "modulePath": "youtube/channel.js",
12010
+ "domain": "www.youtube.com",
12011
+ "columns": [
12012
+ "field",
12013
+ "value"
12014
+ ]
12015
+ },
12016
+ {
12017
+ "site": "youtube",
12018
+ "name": "comments",
12019
+ "description": "Get YouTube video comments",
12020
+ "strategy": "cookie",
12021
+ "browser": true,
12022
+ "args": [
12023
+ {
12024
+ "name": "url",
12025
+ "type": "str",
12026
+ "required": true,
12027
+ "positional": true,
12028
+ "help": "YouTube video URL or video ID"
12029
+ },
12030
+ {
12031
+ "name": "limit",
12032
+ "type": "int",
12033
+ "default": 20,
12034
+ "required": false,
12035
+ "help": "Max comments (max 100)"
12036
+ }
12037
+ ],
12038
+ "type": "ts",
12039
+ "modulePath": "youtube/comments.js",
12040
+ "domain": "www.youtube.com",
12041
+ "columns": [
12042
+ "rank",
12043
+ "author",
12044
+ "text",
12045
+ "likes",
12046
+ "replies",
12047
+ "time"
12048
+ ]
12049
+ },
11364
12050
  {
11365
12051
  "site": "youtube",
11366
12052
  "name": "search",
@@ -11593,7 +12279,8 @@
11593
12279
  "title",
11594
12280
  "type",
11595
12281
  "author",
11596
- "votes"
12282
+ "votes",
12283
+ "url"
11597
12284
  ],
11598
12285
  "pipeline": [
11599
12286
  {
@@ -11608,7 +12295,8 @@
11608
12295
  "title": "${{ item.title }}",
11609
12296
  "type": "${{ item.type }}",
11610
12297
  "author": "${{ item.author }}",
11611
- "votes": "${{ item.votes }}"
12298
+ "votes": "${{ item.votes }}",
12299
+ "url": "${{ item.url }}"
11612
12300
  }
11613
12301
  },
11614
12302
  {