@jackwener/opencli 1.3.1 → 1.3.2
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.
- package/CHANGELOG.md +128 -0
- package/README.md +44 -5
- package/README.zh-CN.md +44 -5
- package/SKILL.md +317 -5
- package/TESTING.md +4 -4
- package/dist/browser/errors.d.ts +2 -1
- package/dist/browser/errors.js +9 -10
- package/dist/build-manifest.js +1 -3
- package/dist/cli-manifest.json +2573 -989
- package/dist/cli.js +42 -2
- package/dist/clis/bilibili/download.js +20 -65
- package/dist/clis/bilibili/utils.js +2 -1
- package/dist/clis/chaoxing/assignments.js +2 -1
- package/dist/clis/doubao/ask.d.ts +1 -0
- package/dist/clis/doubao/ask.js +35 -0
- package/dist/clis/doubao/common.d.ts +23 -0
- package/dist/clis/doubao/common.js +564 -0
- package/dist/clis/doubao/new.d.ts +1 -0
- package/dist/clis/doubao/new.js +20 -0
- package/dist/clis/doubao/read.d.ts +1 -0
- package/dist/clis/doubao/read.js +19 -0
- package/dist/clis/doubao/send.d.ts +1 -0
- package/dist/clis/doubao/send.js +22 -0
- package/dist/clis/doubao/status.d.ts +1 -0
- package/dist/clis/doubao/status.js +24 -0
- package/dist/clis/doubao-app/ask.d.ts +1 -0
- package/dist/clis/doubao-app/ask.js +53 -0
- package/dist/clis/doubao-app/common.d.ts +37 -0
- package/dist/clis/doubao-app/common.js +110 -0
- package/dist/clis/doubao-app/dump.d.ts +1 -0
- package/dist/clis/doubao-app/dump.js +24 -0
- package/dist/clis/doubao-app/new.d.ts +1 -0
- package/dist/clis/doubao-app/new.js +20 -0
- package/dist/clis/doubao-app/read.d.ts +1 -0
- package/dist/clis/doubao-app/read.js +18 -0
- package/dist/clis/doubao-app/screenshot.d.ts +1 -0
- package/dist/clis/doubao-app/screenshot.js +18 -0
- package/dist/clis/doubao-app/send.d.ts +1 -0
- package/dist/clis/doubao-app/send.js +27 -0
- package/dist/clis/doubao-app/status.d.ts +1 -0
- package/dist/clis/doubao-app/status.js +16 -0
- package/dist/clis/hackernews/ask.yaml +38 -0
- package/dist/clis/hackernews/best.yaml +38 -0
- package/dist/clis/hackernews/jobs.yaml +36 -0
- package/dist/clis/hackernews/new.yaml +38 -0
- package/dist/clis/hackernews/search.yaml +44 -0
- package/dist/clis/hackernews/show.yaml +38 -0
- package/dist/clis/hackernews/top.yaml +3 -1
- package/dist/clis/hackernews/user.yaml +25 -0
- package/dist/clis/twitter/download.js +13 -97
- package/dist/clis/twitter/thread.js +2 -1
- package/dist/clis/v2ex/member.yaml +29 -0
- package/dist/clis/v2ex/node.yaml +34 -0
- package/dist/clis/v2ex/nodes.yaml +31 -0
- package/dist/clis/v2ex/replies.yaml +32 -0
- package/dist/clis/v2ex/user.yaml +34 -0
- package/dist/clis/weibo/search.d.ts +1 -0
- package/dist/clis/weibo/search.js +73 -0
- package/dist/clis/weixin/download.d.ts +12 -0
- package/dist/clis/weixin/download.js +183 -0
- package/dist/clis/xiaohongshu/download.js +12 -60
- package/dist/clis/xiaohongshu/publish.d.ts +18 -0
- package/dist/clis/xiaohongshu/publish.js +352 -0
- package/dist/clis/xiaohongshu/search.js +47 -15
- package/dist/clis/xiaohongshu/search.test.d.ts +1 -0
- package/dist/clis/xiaohongshu/search.test.js +114 -0
- package/dist/clis/yollomi/background.d.ts +4 -0
- package/dist/clis/yollomi/background.js +45 -0
- package/dist/clis/yollomi/edit.d.ts +5 -0
- package/dist/clis/yollomi/edit.js +56 -0
- package/dist/clis/yollomi/face-swap.d.ts +5 -0
- package/dist/clis/yollomi/face-swap.js +43 -0
- package/dist/clis/yollomi/generate.d.ts +9 -0
- package/dist/clis/yollomi/generate.js +100 -0
- package/dist/clis/yollomi/models.d.ts +1 -0
- package/dist/clis/yollomi/models.js +33 -0
- package/dist/clis/yollomi/object-remover.d.ts +4 -0
- package/dist/clis/yollomi/object-remover.js +42 -0
- package/dist/clis/yollomi/remove-bg.d.ts +4 -0
- package/dist/clis/yollomi/remove-bg.js +38 -0
- package/dist/clis/yollomi/restore.d.ts +4 -0
- package/dist/clis/yollomi/restore.js +38 -0
- package/dist/clis/yollomi/try-on.d.ts +4 -0
- package/dist/clis/yollomi/try-on.js +46 -0
- package/dist/clis/yollomi/upload.d.ts +7 -0
- package/dist/clis/yollomi/upload.js +71 -0
- package/dist/clis/yollomi/upscale.d.ts +4 -0
- package/dist/clis/yollomi/upscale.js +53 -0
- package/dist/clis/yollomi/utils.d.ts +45 -0
- package/dist/clis/yollomi/utils.js +180 -0
- package/dist/clis/yollomi/video.d.ts +5 -0
- package/dist/clis/yollomi/video.js +56 -0
- package/dist/clis/zhihu/download.d.ts +1 -5
- package/dist/clis/zhihu/download.js +20 -126
- package/dist/clis/zhihu/download.test.js +7 -5
- package/dist/clis/zhihu/question.js +2 -1
- package/dist/commanderAdapter.js +4 -6
- package/dist/daemon.js +5 -2
- package/dist/discovery.js +10 -10
- package/dist/download/article-download.d.ts +59 -0
- package/dist/download/article-download.js +178 -0
- package/dist/download/media-download.d.ts +49 -0
- package/dist/download/media-download.js +112 -0
- package/dist/errors.d.ts +23 -2
- package/dist/errors.js +58 -2
- package/dist/errors.test.d.ts +1 -0
- package/dist/errors.test.js +59 -0
- package/dist/execution.js +9 -10
- package/dist/explore.js +4 -2
- package/dist/external.d.ts +15 -0
- package/dist/external.js +48 -2
- package/dist/external.test.d.ts +1 -0
- package/dist/external.test.js +64 -0
- package/dist/main.js +10 -0
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.js +45 -23
- package/dist/plugin.test.js +6 -1
- package/dist/record.d.ts +47 -0
- package/dist/record.js +545 -0
- package/dist/registry.d.ts +7 -2
- package/dist/registry.js +2 -6
- package/dist/runtime.d.ts +3 -1
- package/dist/runtime.js +10 -3
- package/dist/validate.js +1 -3
- package/docs/.vitepress/config.mts +1 -0
- package/docs/adapters/browser/doubao.md +35 -0
- package/docs/adapters/browser/hackernews.md +20 -4
- package/docs/adapters/browser/tiktok.md +1 -1
- package/docs/adapters/browser/v2ex.md +31 -10
- package/docs/adapters/browser/weibo.md +4 -0
- package/docs/adapters/browser/weixin.md +33 -0
- package/docs/adapters/browser/xiaohongshu.md +8 -6
- package/docs/adapters/browser/yollomi.md +69 -0
- package/docs/adapters/desktop/doubao-app.md +35 -0
- package/docs/adapters/index.md +16 -5
- package/docs/advanced/download.md +4 -0
- package/package.json +3 -1
- package/src/browser/errors.ts +17 -11
- package/src/build-manifest.ts +2 -3
- package/src/cli.ts +45 -2
- package/src/clis/bilibili/download.ts +25 -83
- package/src/clis/bilibili/utils.ts +2 -1
- package/src/clis/chaoxing/assignments.ts +2 -1
- package/src/clis/doubao/ask.ts +40 -0
- package/src/clis/doubao/common.ts +619 -0
- package/src/clis/doubao/new.ts +22 -0
- package/src/clis/doubao/read.ts +20 -0
- package/src/clis/doubao/send.ts +25 -0
- package/src/clis/doubao/status.ts +27 -0
- package/src/clis/doubao-app/ask.ts +60 -0
- package/src/clis/doubao-app/common.ts +116 -0
- package/src/clis/doubao-app/dump.ts +28 -0
- package/src/clis/doubao-app/new.ts +21 -0
- package/src/clis/doubao-app/read.ts +21 -0
- package/src/clis/doubao-app/screenshot.ts +19 -0
- package/src/clis/doubao-app/send.ts +30 -0
- package/src/clis/doubao-app/status.ts +17 -0
- package/src/clis/hackernews/ask.yaml +38 -0
- package/src/clis/hackernews/best.yaml +38 -0
- package/src/clis/hackernews/jobs.yaml +36 -0
- package/src/clis/hackernews/new.yaml +38 -0
- package/src/clis/hackernews/search.yaml +44 -0
- package/src/clis/hackernews/show.yaml +38 -0
- package/src/clis/hackernews/top.yaml +3 -1
- package/src/clis/hackernews/user.yaml +25 -0
- package/src/clis/twitter/download.ts +13 -111
- package/src/clis/twitter/thread.ts +2 -1
- package/src/clis/v2ex/member.yaml +29 -0
- package/src/clis/v2ex/node.yaml +34 -0
- package/src/clis/v2ex/nodes.yaml +31 -0
- package/src/clis/v2ex/replies.yaml +32 -0
- package/src/clis/v2ex/user.yaml +34 -0
- package/src/clis/weibo/search.ts +78 -0
- package/src/clis/weixin/download.ts +199 -0
- package/src/clis/xiaohongshu/download.ts +12 -71
- package/src/clis/xiaohongshu/publish.ts +392 -0
- package/src/clis/xiaohongshu/search.test.ts +134 -0
- package/src/clis/xiaohongshu/search.ts +49 -15
- package/src/clis/yollomi/background.ts +48 -0
- package/src/clis/yollomi/edit.ts +58 -0
- package/src/clis/yollomi/face-swap.ts +45 -0
- package/src/clis/yollomi/generate.ts +95 -0
- package/src/clis/yollomi/models.ts +38 -0
- package/src/clis/yollomi/object-remover.ts +44 -0
- package/src/clis/yollomi/remove-bg.ts +40 -0
- package/src/clis/yollomi/restore.ts +40 -0
- package/src/clis/yollomi/try-on.ts +48 -0
- package/src/clis/yollomi/upload.ts +78 -0
- package/src/clis/yollomi/upscale.ts +49 -0
- package/src/clis/yollomi/utils.ts +202 -0
- package/src/clis/yollomi/video.ts +61 -0
- package/src/clis/zhihu/download.test.ts +7 -5
- package/src/clis/zhihu/download.ts +23 -158
- package/src/clis/zhihu/question.ts +2 -1
- package/src/commanderAdapter.ts +4 -7
- package/src/daemon.ts +5 -2
- package/src/discovery.ts +26 -26
- package/src/download/article-download.ts +272 -0
- package/src/download/media-download.ts +178 -0
- package/src/errors.test.ts +79 -0
- package/src/errors.ts +92 -2
- package/src/execution.ts +14 -10
- package/src/explore.ts +4 -2
- package/src/external.test.ts +88 -0
- package/src/external.ts +56 -2
- package/src/generate.ts +2 -1
- package/src/main.ts +10 -0
- package/src/plugin.test.ts +7 -1
- package/src/plugin.ts +49 -25
- package/src/record.ts +617 -0
- package/src/registry.ts +9 -5
- package/src/runtime.ts +16 -4
- package/src/validate.ts +2 -3
- package/tests/e2e/browser-auth.test.ts +10 -1
- package/tests/e2e/browser-public.test.ts +13 -8
- package/tests/e2e/public-commands.test.ts +209 -21
- package/tests/smoke/api-health.test.ts +65 -6
package/dist/cli-manifest.json
CHANGED
|
@@ -3157,6 +3157,243 @@
|
|
|
3157
3157
|
],
|
|
3158
3158
|
"type": "yaml"
|
|
3159
3159
|
},
|
|
3160
|
+
{
|
|
3161
|
+
"site": "doubao",
|
|
3162
|
+
"name": "ask",
|
|
3163
|
+
"description": "Send a prompt and wait for the Doubao response",
|
|
3164
|
+
"strategy": "cookie",
|
|
3165
|
+
"browser": true,
|
|
3166
|
+
"args": [
|
|
3167
|
+
{
|
|
3168
|
+
"name": "text",
|
|
3169
|
+
"type": "str",
|
|
3170
|
+
"required": true,
|
|
3171
|
+
"positional": true,
|
|
3172
|
+
"help": "Prompt to send"
|
|
3173
|
+
},
|
|
3174
|
+
{
|
|
3175
|
+
"name": "timeout",
|
|
3176
|
+
"type": "str",
|
|
3177
|
+
"default": "60)",
|
|
3178
|
+
"required": false,
|
|
3179
|
+
"help": "Max seconds to wait (default: 60)"
|
|
3180
|
+
}
|
|
3181
|
+
],
|
|
3182
|
+
"type": "ts",
|
|
3183
|
+
"modulePath": "doubao/ask.js",
|
|
3184
|
+
"columns": [
|
|
3185
|
+
"Role",
|
|
3186
|
+
"Text"
|
|
3187
|
+
],
|
|
3188
|
+
"navigateBefore": false
|
|
3189
|
+
},
|
|
3190
|
+
{
|
|
3191
|
+
"site": "doubao",
|
|
3192
|
+
"name": "new",
|
|
3193
|
+
"description": "Start a new conversation in Doubao web chat",
|
|
3194
|
+
"strategy": "cookie",
|
|
3195
|
+
"browser": true,
|
|
3196
|
+
"args": [],
|
|
3197
|
+
"type": "ts",
|
|
3198
|
+
"modulePath": "doubao/new.js",
|
|
3199
|
+
"columns": [
|
|
3200
|
+
"Status",
|
|
3201
|
+
"Action"
|
|
3202
|
+
],
|
|
3203
|
+
"navigateBefore": false
|
|
3204
|
+
},
|
|
3205
|
+
{
|
|
3206
|
+
"site": "doubao",
|
|
3207
|
+
"name": "read",
|
|
3208
|
+
"description": "Read the current Doubao conversation history",
|
|
3209
|
+
"strategy": "cookie",
|
|
3210
|
+
"browser": true,
|
|
3211
|
+
"args": [],
|
|
3212
|
+
"type": "ts",
|
|
3213
|
+
"modulePath": "doubao/read.js",
|
|
3214
|
+
"columns": [
|
|
3215
|
+
"Role",
|
|
3216
|
+
"Text"
|
|
3217
|
+
],
|
|
3218
|
+
"navigateBefore": false
|
|
3219
|
+
},
|
|
3220
|
+
{
|
|
3221
|
+
"site": "doubao",
|
|
3222
|
+
"name": "send",
|
|
3223
|
+
"description": "Send a message to Doubao web chat",
|
|
3224
|
+
"strategy": "cookie",
|
|
3225
|
+
"browser": true,
|
|
3226
|
+
"args": [
|
|
3227
|
+
{
|
|
3228
|
+
"name": "text",
|
|
3229
|
+
"type": "str",
|
|
3230
|
+
"required": true,
|
|
3231
|
+
"positional": true,
|
|
3232
|
+
"help": "Message to send"
|
|
3233
|
+
}
|
|
3234
|
+
],
|
|
3235
|
+
"type": "ts",
|
|
3236
|
+
"modulePath": "doubao/send.js",
|
|
3237
|
+
"columns": [
|
|
3238
|
+
"Status",
|
|
3239
|
+
"SubmittedBy",
|
|
3240
|
+
"InjectedText"
|
|
3241
|
+
],
|
|
3242
|
+
"navigateBefore": false
|
|
3243
|
+
},
|
|
3244
|
+
{
|
|
3245
|
+
"site": "doubao",
|
|
3246
|
+
"name": "status",
|
|
3247
|
+
"description": "Check Doubao chat page availability and login state",
|
|
3248
|
+
"strategy": "cookie",
|
|
3249
|
+
"browser": true,
|
|
3250
|
+
"args": [],
|
|
3251
|
+
"type": "ts",
|
|
3252
|
+
"modulePath": "doubao/status.js",
|
|
3253
|
+
"columns": [
|
|
3254
|
+
"Status",
|
|
3255
|
+
"Login",
|
|
3256
|
+
"Url",
|
|
3257
|
+
"Title"
|
|
3258
|
+
],
|
|
3259
|
+
"navigateBefore": false
|
|
3260
|
+
},
|
|
3261
|
+
{
|
|
3262
|
+
"site": "doubao-app",
|
|
3263
|
+
"name": "ask",
|
|
3264
|
+
"description": "Send a message to Doubao desktop app and wait for the AI response",
|
|
3265
|
+
"strategy": "ui",
|
|
3266
|
+
"browser": true,
|
|
3267
|
+
"args": [
|
|
3268
|
+
{
|
|
3269
|
+
"name": "text",
|
|
3270
|
+
"type": "str",
|
|
3271
|
+
"required": true,
|
|
3272
|
+
"positional": true,
|
|
3273
|
+
"help": "Prompt to send"
|
|
3274
|
+
},
|
|
3275
|
+
{
|
|
3276
|
+
"name": "timeout",
|
|
3277
|
+
"type": "int",
|
|
3278
|
+
"default": 30,
|
|
3279
|
+
"required": false,
|
|
3280
|
+
"help": "Max seconds to wait for response"
|
|
3281
|
+
}
|
|
3282
|
+
],
|
|
3283
|
+
"type": "ts",
|
|
3284
|
+
"modulePath": "doubao-app/ask.js",
|
|
3285
|
+
"domain": "doubao-app",
|
|
3286
|
+
"columns": [
|
|
3287
|
+
"Role",
|
|
3288
|
+
"Text"
|
|
3289
|
+
]
|
|
3290
|
+
},
|
|
3291
|
+
{
|
|
3292
|
+
"site": "doubao-app",
|
|
3293
|
+
"name": "dump",
|
|
3294
|
+
"description": "Dump Doubao desktop app DOM and snapshot to /tmp for debugging",
|
|
3295
|
+
"strategy": "ui",
|
|
3296
|
+
"browser": true,
|
|
3297
|
+
"args": [],
|
|
3298
|
+
"type": "ts",
|
|
3299
|
+
"modulePath": "doubao-app/dump.js",
|
|
3300
|
+
"domain": "doubao-app",
|
|
3301
|
+
"columns": [
|
|
3302
|
+
"Status",
|
|
3303
|
+
"File"
|
|
3304
|
+
]
|
|
3305
|
+
},
|
|
3306
|
+
{
|
|
3307
|
+
"site": "doubao-app",
|
|
3308
|
+
"name": "new",
|
|
3309
|
+
"description": "Start a new chat in Doubao desktop app",
|
|
3310
|
+
"strategy": "ui",
|
|
3311
|
+
"browser": true,
|
|
3312
|
+
"args": [],
|
|
3313
|
+
"type": "ts",
|
|
3314
|
+
"modulePath": "doubao-app/new.js",
|
|
3315
|
+
"domain": "doubao-app",
|
|
3316
|
+
"columns": [
|
|
3317
|
+
"Status"
|
|
3318
|
+
]
|
|
3319
|
+
},
|
|
3320
|
+
{
|
|
3321
|
+
"site": "doubao-app",
|
|
3322
|
+
"name": "read",
|
|
3323
|
+
"description": "Read chat history from Doubao desktop app",
|
|
3324
|
+
"strategy": "ui",
|
|
3325
|
+
"browser": true,
|
|
3326
|
+
"args": [],
|
|
3327
|
+
"type": "ts",
|
|
3328
|
+
"modulePath": "doubao-app/read.js",
|
|
3329
|
+
"domain": "doubao-app",
|
|
3330
|
+
"columns": [
|
|
3331
|
+
"Role",
|
|
3332
|
+
"Text"
|
|
3333
|
+
]
|
|
3334
|
+
},
|
|
3335
|
+
{
|
|
3336
|
+
"site": "doubao-app",
|
|
3337
|
+
"name": "screenshot",
|
|
3338
|
+
"description": "Capture a screenshot of the Doubao desktop app window",
|
|
3339
|
+
"strategy": "ui",
|
|
3340
|
+
"browser": true,
|
|
3341
|
+
"args": [
|
|
3342
|
+
{
|
|
3343
|
+
"name": "output",
|
|
3344
|
+
"type": "str",
|
|
3345
|
+
"default": "/tmp/doubao-screenshot.png)",
|
|
3346
|
+
"required": false,
|
|
3347
|
+
"help": "Output file path (default: /tmp/doubao-screenshot.png)"
|
|
3348
|
+
}
|
|
3349
|
+
],
|
|
3350
|
+
"type": "ts",
|
|
3351
|
+
"modulePath": "doubao-app/screenshot.js",
|
|
3352
|
+
"domain": "doubao-app",
|
|
3353
|
+
"columns": [
|
|
3354
|
+
"Status",
|
|
3355
|
+
"File"
|
|
3356
|
+
]
|
|
3357
|
+
},
|
|
3358
|
+
{
|
|
3359
|
+
"site": "doubao-app",
|
|
3360
|
+
"name": "send",
|
|
3361
|
+
"description": "Send a message to Doubao desktop app",
|
|
3362
|
+
"strategy": "ui",
|
|
3363
|
+
"browser": true,
|
|
3364
|
+
"args": [
|
|
3365
|
+
{
|
|
3366
|
+
"name": "text",
|
|
3367
|
+
"type": "str",
|
|
3368
|
+
"required": true,
|
|
3369
|
+
"positional": true,
|
|
3370
|
+
"help": "Message text to send"
|
|
3371
|
+
}
|
|
3372
|
+
],
|
|
3373
|
+
"type": "ts",
|
|
3374
|
+
"modulePath": "doubao-app/send.js",
|
|
3375
|
+
"domain": "doubao-app",
|
|
3376
|
+
"columns": [
|
|
3377
|
+
"Status",
|
|
3378
|
+
"Text"
|
|
3379
|
+
]
|
|
3380
|
+
},
|
|
3381
|
+
{
|
|
3382
|
+
"site": "doubao-app",
|
|
3383
|
+
"name": "status",
|
|
3384
|
+
"description": "Check CDP connection to Doubao desktop app",
|
|
3385
|
+
"strategy": "ui",
|
|
3386
|
+
"browser": true,
|
|
3387
|
+
"args": [],
|
|
3388
|
+
"type": "ts",
|
|
3389
|
+
"modulePath": "doubao-app/status.js",
|
|
3390
|
+
"domain": "doubao-app",
|
|
3391
|
+
"columns": [
|
|
3392
|
+
"Status",
|
|
3393
|
+
"Url",
|
|
3394
|
+
"Title"
|
|
3395
|
+
]
|
|
3396
|
+
},
|
|
3160
3397
|
{
|
|
3161
3398
|
"site": "facebook",
|
|
3162
3399
|
"name": "add-friend",
|
|
@@ -3693,8 +3930,8 @@
|
|
|
3693
3930
|
},
|
|
3694
3931
|
{
|
|
3695
3932
|
"site": "hackernews",
|
|
3696
|
-
"name": "
|
|
3697
|
-
"description": "Hacker News
|
|
3933
|
+
"name": "ask",
|
|
3934
|
+
"description": "Hacker News Ask HN posts",
|
|
3698
3935
|
"domain": "news.ycombinator.com",
|
|
3699
3936
|
"strategy": "public",
|
|
3700
3937
|
"browser": false,
|
|
@@ -3717,11 +3954,11 @@
|
|
|
3717
3954
|
"pipeline": [
|
|
3718
3955
|
{
|
|
3719
3956
|
"fetch": {
|
|
3720
|
-
"url": "https://hacker-news.firebaseio.com/v0/
|
|
3957
|
+
"url": "https://hacker-news.firebaseio.com/v0/askstories.json"
|
|
3721
3958
|
}
|
|
3722
3959
|
},
|
|
3723
3960
|
{
|
|
3724
|
-
"limit":
|
|
3961
|
+
"limit": "${{ Math.min((args.limit ? args.limit : 20) + 10, 50) }}"
|
|
3725
3962
|
},
|
|
3726
3963
|
{
|
|
3727
3964
|
"map": {
|
|
@@ -3733,6 +3970,9 @@
|
|
|
3733
3970
|
"url": "https://hacker-news.firebaseio.com/v0/item/${{ item.id }}.json"
|
|
3734
3971
|
}
|
|
3735
3972
|
},
|
|
3973
|
+
{
|
|
3974
|
+
"filter": "item.title && !item.deleted && !item.dead"
|
|
3975
|
+
},
|
|
3736
3976
|
{
|
|
3737
3977
|
"map": {
|
|
3738
3978
|
"rank": "${{ index + 1 }}",
|
|
@@ -3750,9 +3990,10 @@
|
|
|
3750
3990
|
"type": "yaml"
|
|
3751
3991
|
},
|
|
3752
3992
|
{
|
|
3753
|
-
"site": "
|
|
3754
|
-
"name": "
|
|
3755
|
-
"description": "
|
|
3993
|
+
"site": "hackernews",
|
|
3994
|
+
"name": "best",
|
|
3995
|
+
"description": "Hacker News best stories",
|
|
3996
|
+
"domain": "news.ycombinator.com",
|
|
3756
3997
|
"strategy": "public",
|
|
3757
3998
|
"browser": false,
|
|
3758
3999
|
"args": [
|
|
@@ -3761,304 +4002,453 @@
|
|
|
3761
4002
|
"type": "int",
|
|
3762
4003
|
"default": 20,
|
|
3763
4004
|
"required": false,
|
|
3764
|
-
"help": "Number of
|
|
4005
|
+
"help": "Number of stories"
|
|
4006
|
+
}
|
|
4007
|
+
],
|
|
4008
|
+
"columns": [
|
|
4009
|
+
"rank",
|
|
4010
|
+
"title",
|
|
4011
|
+
"score",
|
|
4012
|
+
"author",
|
|
4013
|
+
"comments"
|
|
4014
|
+
],
|
|
4015
|
+
"pipeline": [
|
|
4016
|
+
{
|
|
4017
|
+
"fetch": {
|
|
4018
|
+
"url": "https://hacker-news.firebaseio.com/v0/beststories.json"
|
|
4019
|
+
}
|
|
3765
4020
|
},
|
|
3766
4021
|
{
|
|
3767
|
-
"
|
|
3768
|
-
"type": "bool",
|
|
3769
|
-
"default": false,
|
|
3770
|
-
"required": false,
|
|
3771
|
-
"help": "Return all papers (ignore limit)"
|
|
4022
|
+
"limit": "${{ Math.min((args.limit ? args.limit : 20) + 10, 50) }}"
|
|
3772
4023
|
},
|
|
3773
4024
|
{
|
|
3774
|
-
"
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
"help": "Date (YYYY-MM-DD), defaults to most recent"
|
|
4025
|
+
"map": {
|
|
4026
|
+
"id": "${{ item }}"
|
|
4027
|
+
}
|
|
3778
4028
|
},
|
|
3779
4029
|
{
|
|
3780
|
-
"
|
|
3781
|
-
|
|
3782
|
-
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
"
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
|
|
4030
|
+
"fetch": {
|
|
4031
|
+
"url": "https://hacker-news.firebaseio.com/v0/item/${{ item.id }}.json"
|
|
4032
|
+
}
|
|
4033
|
+
},
|
|
4034
|
+
{
|
|
4035
|
+
"filter": "item.title && !item.deleted && !item.dead"
|
|
4036
|
+
},
|
|
4037
|
+
{
|
|
4038
|
+
"map": {
|
|
4039
|
+
"rank": "${{ index + 1 }}",
|
|
4040
|
+
"title": "${{ item.title }}",
|
|
4041
|
+
"score": "${{ item.score }}",
|
|
4042
|
+
"author": "${{ item.by }}",
|
|
4043
|
+
"comments": "${{ item.descendants }}",
|
|
4044
|
+
"url": "${{ item.url }}"
|
|
4045
|
+
}
|
|
4046
|
+
},
|
|
4047
|
+
{
|
|
4048
|
+
"limit": "${{ args.limit }}"
|
|
3790
4049
|
}
|
|
3791
4050
|
],
|
|
3792
|
-
"type": "
|
|
3793
|
-
"modulePath": "hf/top.js",
|
|
3794
|
-
"domain": "huggingface.co"
|
|
4051
|
+
"type": "yaml"
|
|
3795
4052
|
},
|
|
3796
4053
|
{
|
|
3797
|
-
"site": "
|
|
3798
|
-
"name": "
|
|
3799
|
-
"description": "
|
|
3800
|
-
"domain": "
|
|
3801
|
-
"strategy": "
|
|
3802
|
-
"browser":
|
|
4054
|
+
"site": "hackernews",
|
|
4055
|
+
"name": "jobs",
|
|
4056
|
+
"description": "Hacker News job postings",
|
|
4057
|
+
"domain": "news.ycombinator.com",
|
|
4058
|
+
"strategy": "public",
|
|
4059
|
+
"browser": false,
|
|
3803
4060
|
"args": [
|
|
3804
4061
|
{
|
|
3805
|
-
"name": "
|
|
3806
|
-
"type": "str",
|
|
3807
|
-
"required": true,
|
|
3808
|
-
"positional": true,
|
|
3809
|
-
"help": "Username of the post author"
|
|
3810
|
-
},
|
|
3811
|
-
{
|
|
3812
|
-
"name": "text",
|
|
3813
|
-
"type": "str",
|
|
3814
|
-
"required": true,
|
|
3815
|
-
"positional": true,
|
|
3816
|
-
"help": "Comment text"
|
|
3817
|
-
},
|
|
3818
|
-
{
|
|
3819
|
-
"name": "index",
|
|
4062
|
+
"name": "limit",
|
|
3820
4063
|
"type": "int",
|
|
3821
|
-
"default":
|
|
4064
|
+
"default": 20,
|
|
3822
4065
|
"required": false,
|
|
3823
|
-
"help": "
|
|
4066
|
+
"help": "Number of job postings"
|
|
3824
4067
|
}
|
|
3825
4068
|
],
|
|
3826
4069
|
"columns": [
|
|
3827
|
-
"
|
|
3828
|
-
"
|
|
3829
|
-
"
|
|
4070
|
+
"rank",
|
|
4071
|
+
"title",
|
|
4072
|
+
"author",
|
|
4073
|
+
"url"
|
|
3830
4074
|
],
|
|
3831
4075
|
"pipeline": [
|
|
3832
4076
|
{
|
|
3833
|
-
"
|
|
4077
|
+
"fetch": {
|
|
4078
|
+
"url": "https://hacker-news.firebaseio.com/v0/jobstories.json"
|
|
4079
|
+
}
|
|
3834
4080
|
},
|
|
3835
4081
|
{
|
|
3836
|
-
"
|
|
4082
|
+
"limit": "${{ Math.min((args.limit ? args.limit : 20) + 10, 50) }}"
|
|
4083
|
+
},
|
|
4084
|
+
{
|
|
4085
|
+
"map": {
|
|
4086
|
+
"id": "${{ item }}"
|
|
4087
|
+
}
|
|
4088
|
+
},
|
|
4089
|
+
{
|
|
4090
|
+
"fetch": {
|
|
4091
|
+
"url": "https://hacker-news.firebaseio.com/v0/item/${{ item.id }}.json"
|
|
4092
|
+
}
|
|
4093
|
+
},
|
|
4094
|
+
{
|
|
4095
|
+
"filter": "item.title && !item.deleted && !item.dead"
|
|
4096
|
+
},
|
|
4097
|
+
{
|
|
4098
|
+
"map": {
|
|
4099
|
+
"rank": "${{ index + 1 }}",
|
|
4100
|
+
"title": "${{ item.title }}",
|
|
4101
|
+
"author": "${{ item.by }}",
|
|
4102
|
+
"url": "${{ item.url }}"
|
|
4103
|
+
}
|
|
4104
|
+
},
|
|
4105
|
+
{
|
|
4106
|
+
"limit": "${{ args.limit }}"
|
|
3837
4107
|
}
|
|
3838
4108
|
],
|
|
3839
4109
|
"type": "yaml"
|
|
3840
4110
|
},
|
|
3841
4111
|
{
|
|
3842
|
-
"site": "
|
|
3843
|
-
"name": "
|
|
3844
|
-
"description": "
|
|
3845
|
-
"domain": "
|
|
3846
|
-
"strategy": "
|
|
3847
|
-
"browser":
|
|
4112
|
+
"site": "hackernews",
|
|
4113
|
+
"name": "new",
|
|
4114
|
+
"description": "Hacker News newest stories",
|
|
4115
|
+
"domain": "news.ycombinator.com",
|
|
4116
|
+
"strategy": "public",
|
|
4117
|
+
"browser": false,
|
|
3848
4118
|
"args": [
|
|
3849
4119
|
{
|
|
3850
4120
|
"name": "limit",
|
|
3851
4121
|
"type": "int",
|
|
3852
4122
|
"default": 20,
|
|
3853
4123
|
"required": false,
|
|
3854
|
-
"help": "Number of
|
|
4124
|
+
"help": "Number of stories"
|
|
3855
4125
|
}
|
|
3856
4126
|
],
|
|
3857
4127
|
"columns": [
|
|
3858
4128
|
"rank",
|
|
3859
|
-
"
|
|
3860
|
-
"
|
|
3861
|
-
"
|
|
3862
|
-
"comments"
|
|
3863
|
-
"type"
|
|
4129
|
+
"title",
|
|
4130
|
+
"score",
|
|
4131
|
+
"author",
|
|
4132
|
+
"comments"
|
|
3864
4133
|
],
|
|
3865
4134
|
"pipeline": [
|
|
3866
4135
|
{
|
|
3867
|
-
"
|
|
4136
|
+
"fetch": {
|
|
4137
|
+
"url": "https://hacker-news.firebaseio.com/v0/newstories.json"
|
|
4138
|
+
}
|
|
3868
4139
|
},
|
|
3869
4140
|
{
|
|
3870
|
-
"
|
|
3871
|
-
}
|
|
3872
|
-
],
|
|
3873
|
-
"type": "yaml"
|
|
3874
|
-
},
|
|
3875
|
-
{
|
|
3876
|
-
"site": "instagram",
|
|
3877
|
-
"name": "follow",
|
|
3878
|
-
"description": "Follow an Instagram user",
|
|
3879
|
-
"domain": "www.instagram.com",
|
|
3880
|
-
"strategy": "cookie",
|
|
3881
|
-
"browser": true,
|
|
3882
|
-
"args": [
|
|
4141
|
+
"limit": "${{ Math.min((args.limit ? args.limit : 20) + 10, 50) }}"
|
|
4142
|
+
},
|
|
3883
4143
|
{
|
|
3884
|
-
"
|
|
3885
|
-
|
|
3886
|
-
|
|
3887
|
-
|
|
3888
|
-
"help": "Instagram username to follow"
|
|
3889
|
-
}
|
|
3890
|
-
],
|
|
3891
|
-
"columns": [
|
|
3892
|
-
"status",
|
|
3893
|
-
"username"
|
|
3894
|
-
],
|
|
3895
|
-
"pipeline": [
|
|
4144
|
+
"map": {
|
|
4145
|
+
"id": "${{ item }}"
|
|
4146
|
+
}
|
|
4147
|
+
},
|
|
3896
4148
|
{
|
|
3897
|
-
"
|
|
4149
|
+
"fetch": {
|
|
4150
|
+
"url": "https://hacker-news.firebaseio.com/v0/item/${{ item.id }}.json"
|
|
4151
|
+
}
|
|
3898
4152
|
},
|
|
3899
4153
|
{
|
|
3900
|
-
"
|
|
4154
|
+
"filter": "item.title && !item.deleted && !item.dead"
|
|
4155
|
+
},
|
|
4156
|
+
{
|
|
4157
|
+
"map": {
|
|
4158
|
+
"rank": "${{ index + 1 }}",
|
|
4159
|
+
"title": "${{ item.title }}",
|
|
4160
|
+
"score": "${{ item.score }}",
|
|
4161
|
+
"author": "${{ item.by }}",
|
|
4162
|
+
"comments": "${{ item.descendants }}",
|
|
4163
|
+
"url": "${{ item.url }}"
|
|
4164
|
+
}
|
|
4165
|
+
},
|
|
4166
|
+
{
|
|
4167
|
+
"limit": "${{ args.limit }}"
|
|
3901
4168
|
}
|
|
3902
4169
|
],
|
|
3903
4170
|
"type": "yaml"
|
|
3904
4171
|
},
|
|
3905
4172
|
{
|
|
3906
|
-
"site": "
|
|
3907
|
-
"name": "
|
|
3908
|
-
"description": "
|
|
3909
|
-
"domain": "
|
|
3910
|
-
"strategy": "
|
|
3911
|
-
"browser":
|
|
4173
|
+
"site": "hackernews",
|
|
4174
|
+
"name": "search",
|
|
4175
|
+
"description": "Search Hacker News stories",
|
|
4176
|
+
"domain": "news.ycombinator.com",
|
|
4177
|
+
"strategy": "public",
|
|
4178
|
+
"browser": false,
|
|
3912
4179
|
"args": [
|
|
3913
4180
|
{
|
|
3914
|
-
"name": "
|
|
4181
|
+
"name": "query",
|
|
3915
4182
|
"type": "str",
|
|
3916
4183
|
"required": true,
|
|
3917
4184
|
"positional": true,
|
|
3918
|
-
"help": "
|
|
4185
|
+
"help": "Search query"
|
|
3919
4186
|
},
|
|
3920
4187
|
{
|
|
3921
4188
|
"name": "limit",
|
|
3922
4189
|
"type": "int",
|
|
3923
4190
|
"default": 20,
|
|
3924
4191
|
"required": false,
|
|
3925
|
-
"help": "Number of
|
|
4192
|
+
"help": "Number of results"
|
|
4193
|
+
},
|
|
4194
|
+
{
|
|
4195
|
+
"name": "sort",
|
|
4196
|
+
"type": "str",
|
|
4197
|
+
"default": "relevance",
|
|
4198
|
+
"required": false,
|
|
4199
|
+
"help": "Sort by relevance or date",
|
|
4200
|
+
"choices": [
|
|
4201
|
+
"relevance",
|
|
4202
|
+
"date"
|
|
4203
|
+
]
|
|
3926
4204
|
}
|
|
3927
4205
|
],
|
|
3928
4206
|
"columns": [
|
|
3929
4207
|
"rank",
|
|
3930
|
-
"
|
|
3931
|
-
"
|
|
3932
|
-
"
|
|
3933
|
-
"
|
|
4208
|
+
"title",
|
|
4209
|
+
"score",
|
|
4210
|
+
"author",
|
|
4211
|
+
"comments"
|
|
3934
4212
|
],
|
|
3935
4213
|
"pipeline": [
|
|
3936
4214
|
{
|
|
3937
|
-
"
|
|
4215
|
+
"fetch": {
|
|
4216
|
+
"url": "https://hn.algolia.com/api/v1/${{ args.sort === 'date' ? 'search_by_date' : 'search' }}",
|
|
4217
|
+
"params": {
|
|
4218
|
+
"query": "${{ args.query }}",
|
|
4219
|
+
"tags": "story",
|
|
4220
|
+
"hitsPerPage": "${{ args.limit }}"
|
|
4221
|
+
}
|
|
4222
|
+
}
|
|
3938
4223
|
},
|
|
3939
4224
|
{
|
|
3940
|
-
"
|
|
4225
|
+
"select": "hits"
|
|
4226
|
+
},
|
|
4227
|
+
{
|
|
4228
|
+
"map": {
|
|
4229
|
+
"rank": "${{ index + 1 }}",
|
|
4230
|
+
"title": "${{ item.title }}",
|
|
4231
|
+
"score": "${{ item.points }}",
|
|
4232
|
+
"author": "${{ item.author }}",
|
|
4233
|
+
"comments": "${{ item.num_comments }}",
|
|
4234
|
+
"url": "${{ item.url }}"
|
|
4235
|
+
}
|
|
4236
|
+
},
|
|
4237
|
+
{
|
|
4238
|
+
"limit": "${{ args.limit }}"
|
|
3941
4239
|
}
|
|
3942
4240
|
],
|
|
3943
4241
|
"type": "yaml"
|
|
3944
4242
|
},
|
|
3945
4243
|
{
|
|
3946
|
-
"site": "
|
|
3947
|
-
"name": "
|
|
3948
|
-
"description": "
|
|
3949
|
-
"domain": "
|
|
3950
|
-
"strategy": "
|
|
3951
|
-
"browser":
|
|
4244
|
+
"site": "hackernews",
|
|
4245
|
+
"name": "show",
|
|
4246
|
+
"description": "Hacker News Show HN posts",
|
|
4247
|
+
"domain": "news.ycombinator.com",
|
|
4248
|
+
"strategy": "public",
|
|
4249
|
+
"browser": false,
|
|
3952
4250
|
"args": [
|
|
3953
|
-
{
|
|
3954
|
-
"name": "username",
|
|
3955
|
-
"type": "str",
|
|
3956
|
-
"required": true,
|
|
3957
|
-
"positional": true,
|
|
3958
|
-
"help": "Instagram username"
|
|
3959
|
-
},
|
|
3960
4251
|
{
|
|
3961
4252
|
"name": "limit",
|
|
3962
4253
|
"type": "int",
|
|
3963
4254
|
"default": 20,
|
|
3964
4255
|
"required": false,
|
|
3965
|
-
"help": "Number of
|
|
4256
|
+
"help": "Number of stories"
|
|
3966
4257
|
}
|
|
3967
4258
|
],
|
|
3968
4259
|
"columns": [
|
|
3969
4260
|
"rank",
|
|
3970
|
-
"
|
|
3971
|
-
"
|
|
3972
|
-
"
|
|
3973
|
-
"
|
|
4261
|
+
"title",
|
|
4262
|
+
"score",
|
|
4263
|
+
"author",
|
|
4264
|
+
"comments"
|
|
3974
4265
|
],
|
|
3975
4266
|
"pipeline": [
|
|
3976
4267
|
{
|
|
3977
|
-
"
|
|
4268
|
+
"fetch": {
|
|
4269
|
+
"url": "https://hacker-news.firebaseio.com/v0/showstories.json"
|
|
4270
|
+
}
|
|
3978
4271
|
},
|
|
3979
4272
|
{
|
|
3980
|
-
"
|
|
4273
|
+
"limit": "${{ Math.min((args.limit ? args.limit : 20) + 10, 50) }}"
|
|
4274
|
+
},
|
|
4275
|
+
{
|
|
4276
|
+
"map": {
|
|
4277
|
+
"id": "${{ item }}"
|
|
4278
|
+
}
|
|
4279
|
+
},
|
|
4280
|
+
{
|
|
4281
|
+
"fetch": {
|
|
4282
|
+
"url": "https://hacker-news.firebaseio.com/v0/item/${{ item.id }}.json"
|
|
4283
|
+
}
|
|
4284
|
+
},
|
|
4285
|
+
{
|
|
4286
|
+
"filter": "item.title && !item.deleted && !item.dead"
|
|
4287
|
+
},
|
|
4288
|
+
{
|
|
4289
|
+
"map": {
|
|
4290
|
+
"rank": "${{ index + 1 }}",
|
|
4291
|
+
"title": "${{ item.title }}",
|
|
4292
|
+
"score": "${{ item.score }}",
|
|
4293
|
+
"author": "${{ item.by }}",
|
|
4294
|
+
"comments": "${{ item.descendants }}",
|
|
4295
|
+
"url": "${{ item.url }}"
|
|
4296
|
+
}
|
|
4297
|
+
},
|
|
4298
|
+
{
|
|
4299
|
+
"limit": "${{ args.limit }}"
|
|
3981
4300
|
}
|
|
3982
4301
|
],
|
|
3983
4302
|
"type": "yaml"
|
|
3984
4303
|
},
|
|
3985
4304
|
{
|
|
3986
|
-
"site": "
|
|
3987
|
-
"name": "
|
|
3988
|
-
"description": "
|
|
3989
|
-
"domain": "
|
|
3990
|
-
"strategy": "
|
|
3991
|
-
"browser":
|
|
4305
|
+
"site": "hackernews",
|
|
4306
|
+
"name": "top",
|
|
4307
|
+
"description": "Hacker News top stories",
|
|
4308
|
+
"domain": "news.ycombinator.com",
|
|
4309
|
+
"strategy": "public",
|
|
4310
|
+
"browser": false,
|
|
3992
4311
|
"args": [
|
|
3993
4312
|
{
|
|
3994
|
-
"name": "
|
|
3995
|
-
"type": "str",
|
|
3996
|
-
"required": true,
|
|
3997
|
-
"positional": true,
|
|
3998
|
-
"help": "Username of the post author"
|
|
3999
|
-
},
|
|
4000
|
-
{
|
|
4001
|
-
"name": "index",
|
|
4313
|
+
"name": "limit",
|
|
4002
4314
|
"type": "int",
|
|
4003
|
-
"default":
|
|
4315
|
+
"default": 20,
|
|
4004
4316
|
"required": false,
|
|
4005
|
-
"help": "
|
|
4317
|
+
"help": "Number of stories"
|
|
4006
4318
|
}
|
|
4007
4319
|
],
|
|
4008
4320
|
"columns": [
|
|
4009
|
-
"
|
|
4010
|
-
"
|
|
4011
|
-
"
|
|
4321
|
+
"rank",
|
|
4322
|
+
"title",
|
|
4323
|
+
"score",
|
|
4324
|
+
"author",
|
|
4325
|
+
"comments"
|
|
4012
4326
|
],
|
|
4013
4327
|
"pipeline": [
|
|
4014
4328
|
{
|
|
4015
|
-
"
|
|
4329
|
+
"fetch": {
|
|
4330
|
+
"url": "https://hacker-news.firebaseio.com/v0/topstories.json"
|
|
4331
|
+
}
|
|
4016
4332
|
},
|
|
4017
4333
|
{
|
|
4018
|
-
"
|
|
4334
|
+
"limit": "${{ Math.min((args.limit ? args.limit : 20) + 10, 50) }}"
|
|
4335
|
+
},
|
|
4336
|
+
{
|
|
4337
|
+
"map": {
|
|
4338
|
+
"id": "${{ item }}"
|
|
4339
|
+
}
|
|
4340
|
+
},
|
|
4341
|
+
{
|
|
4342
|
+
"fetch": {
|
|
4343
|
+
"url": "https://hacker-news.firebaseio.com/v0/item/${{ item.id }}.json"
|
|
4344
|
+
}
|
|
4345
|
+
},
|
|
4346
|
+
{
|
|
4347
|
+
"filter": "item.title && !item.deleted && !item.dead"
|
|
4348
|
+
},
|
|
4349
|
+
{
|
|
4350
|
+
"map": {
|
|
4351
|
+
"rank": "${{ index + 1 }}",
|
|
4352
|
+
"title": "${{ item.title }}",
|
|
4353
|
+
"score": "${{ item.score }}",
|
|
4354
|
+
"author": "${{ item.by }}",
|
|
4355
|
+
"comments": "${{ item.descendants }}",
|
|
4356
|
+
"url": "${{ item.url }}"
|
|
4357
|
+
}
|
|
4358
|
+
},
|
|
4359
|
+
{
|
|
4360
|
+
"limit": "${{ args.limit }}"
|
|
4019
4361
|
}
|
|
4020
4362
|
],
|
|
4021
4363
|
"type": "yaml"
|
|
4022
4364
|
},
|
|
4023
4365
|
{
|
|
4024
|
-
"site": "
|
|
4025
|
-
"name": "
|
|
4026
|
-
"description": "
|
|
4027
|
-
"domain": "
|
|
4028
|
-
"strategy": "
|
|
4029
|
-
"browser":
|
|
4366
|
+
"site": "hackernews",
|
|
4367
|
+
"name": "user",
|
|
4368
|
+
"description": "Hacker News user profile",
|
|
4369
|
+
"domain": "news.ycombinator.com",
|
|
4370
|
+
"strategy": "public",
|
|
4371
|
+
"browser": false,
|
|
4030
4372
|
"args": [
|
|
4031
4373
|
{
|
|
4032
4374
|
"name": "username",
|
|
4033
4375
|
"type": "str",
|
|
4034
4376
|
"required": true,
|
|
4035
4377
|
"positional": true,
|
|
4036
|
-
"help": "
|
|
4378
|
+
"help": "HN username"
|
|
4037
4379
|
}
|
|
4038
4380
|
],
|
|
4039
4381
|
"columns": [
|
|
4040
4382
|
"username",
|
|
4041
|
-
"
|
|
4042
|
-
"
|
|
4043
|
-
"
|
|
4044
|
-
"posts",
|
|
4045
|
-
"verified",
|
|
4046
|
-
"bio"
|
|
4383
|
+
"karma",
|
|
4384
|
+
"created",
|
|
4385
|
+
"about"
|
|
4047
4386
|
],
|
|
4048
4387
|
"pipeline": [
|
|
4049
4388
|
{
|
|
4050
|
-
"
|
|
4389
|
+
"fetch": {
|
|
4390
|
+
"url": "https://hacker-news.firebaseio.com/v0/user/${{ args.username }}.json"
|
|
4391
|
+
}
|
|
4051
4392
|
},
|
|
4052
4393
|
{
|
|
4053
|
-
"
|
|
4394
|
+
"map": {
|
|
4395
|
+
"username": "${{ item.id }}",
|
|
4396
|
+
"karma": "${{ item.karma }}",
|
|
4397
|
+
"created": "${{ item.created ? new Date(item.created * 1000).toISOString().slice(0, 10) : '' }}",
|
|
4398
|
+
"about": "${{ item.about }}"
|
|
4399
|
+
}
|
|
4054
4400
|
}
|
|
4055
4401
|
],
|
|
4056
4402
|
"type": "yaml"
|
|
4057
4403
|
},
|
|
4404
|
+
{
|
|
4405
|
+
"site": "hf",
|
|
4406
|
+
"name": "top",
|
|
4407
|
+
"description": "Top upvoted Hugging Face papers",
|
|
4408
|
+
"strategy": "public",
|
|
4409
|
+
"browser": false,
|
|
4410
|
+
"args": [
|
|
4411
|
+
{
|
|
4412
|
+
"name": "limit",
|
|
4413
|
+
"type": "int",
|
|
4414
|
+
"default": 20,
|
|
4415
|
+
"required": false,
|
|
4416
|
+
"help": "Number of papers"
|
|
4417
|
+
},
|
|
4418
|
+
{
|
|
4419
|
+
"name": "all",
|
|
4420
|
+
"type": "bool",
|
|
4421
|
+
"default": false,
|
|
4422
|
+
"required": false,
|
|
4423
|
+
"help": "Return all papers (ignore limit)"
|
|
4424
|
+
},
|
|
4425
|
+
{
|
|
4426
|
+
"name": "date",
|
|
4427
|
+
"type": "str",
|
|
4428
|
+
"required": false,
|
|
4429
|
+
"help": "Date (YYYY-MM-DD), defaults to most recent"
|
|
4430
|
+
},
|
|
4431
|
+
{
|
|
4432
|
+
"name": "period",
|
|
4433
|
+
"type": "str",
|
|
4434
|
+
"default": "daily",
|
|
4435
|
+
"required": false,
|
|
4436
|
+
"help": "Time period: daily, weekly, or monthly",
|
|
4437
|
+
"choices": [
|
|
4438
|
+
"daily",
|
|
4439
|
+
"weekly",
|
|
4440
|
+
"monthly"
|
|
4441
|
+
]
|
|
4442
|
+
}
|
|
4443
|
+
],
|
|
4444
|
+
"type": "ts",
|
|
4445
|
+
"modulePath": "hf/top.js",
|
|
4446
|
+
"domain": "huggingface.co"
|
|
4447
|
+
},
|
|
4058
4448
|
{
|
|
4059
4449
|
"site": "instagram",
|
|
4060
|
-
"name": "
|
|
4061
|
-
"description": "
|
|
4450
|
+
"name": "comment",
|
|
4451
|
+
"description": "Comment on an Instagram post",
|
|
4062
4452
|
"domain": "www.instagram.com",
|
|
4063
4453
|
"strategy": "cookie",
|
|
4064
4454
|
"browser": true,
|
|
@@ -4070,6 +4460,13 @@
|
|
|
4070
4460
|
"positional": true,
|
|
4071
4461
|
"help": "Username of the post author"
|
|
4072
4462
|
},
|
|
4463
|
+
{
|
|
4464
|
+
"name": "text",
|
|
4465
|
+
"type": "str",
|
|
4466
|
+
"required": true,
|
|
4467
|
+
"positional": true,
|
|
4468
|
+
"help": "Comment text"
|
|
4469
|
+
},
|
|
4073
4470
|
{
|
|
4074
4471
|
"name": "index",
|
|
4075
4472
|
"type": "int",
|
|
@@ -4081,22 +4478,22 @@
|
|
|
4081
4478
|
"columns": [
|
|
4082
4479
|
"status",
|
|
4083
4480
|
"user",
|
|
4084
|
-
"
|
|
4481
|
+
"text"
|
|
4085
4482
|
],
|
|
4086
4483
|
"pipeline": [
|
|
4087
4484
|
{
|
|
4088
4485
|
"navigate": "https://www.instagram.com"
|
|
4089
4486
|
},
|
|
4090
4487
|
{
|
|
4091
|
-
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const idx = ${{ args.index }} - 1;\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch('https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username), opts);\n if (!r1.ok) throw new Error('User not found: ' + username);\n const userId = (await r1.json())?.data?.user?.id;\n\n const r2 = await fetch('https://www.instagram.com/api/v1/feed/user/' + userId + '/?count=' + (idx + 1), opts);\n const posts = (await r2.json())?.items || [];\n if (idx >= posts.length) throw new Error('Post index ' + (idx + 1) + ' not found');\n const pk = posts[idx].pk;\n
|
|
4488
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const commentText = ${{ args.text | json }};\n const idx = ${{ args.index }} - 1;\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch('https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username), opts);\n if (!r1.ok) throw new Error('User not found: ' + username);\n const userId = (await r1.json())?.data?.user?.id;\n\n const r2 = await fetch('https://www.instagram.com/api/v1/feed/user/' + userId + '/?count=' + (idx + 1), opts);\n const posts = (await r2.json())?.items || [];\n if (idx >= posts.length) throw new Error('Post index ' + (idx + 1) + ' not found');\n const pk = posts[idx].pk;\n\n const csrf = document.cookie.match(/csrftoken=([^;]+)/)?.[1] || '';\n const r3 = await fetch('https://www.instagram.com/api/v1/web/comments/' + pk + '/add/', {\n method: 'POST', credentials: 'include',\n headers: { ...headers, 'X-CSRFToken': csrf, 'Content-Type': 'application/x-www-form-urlencoded' },\n body: 'comment_text=' + encodeURIComponent(commentText),\n });\n if (!r3.ok) throw new Error('Failed to comment: HTTP ' + r3.status);\n return [{ status: 'Commented', user: username, text: commentText }];\n})()\n"
|
|
4092
4489
|
}
|
|
4093
4490
|
],
|
|
4094
4491
|
"type": "yaml"
|
|
4095
4492
|
},
|
|
4096
4493
|
{
|
|
4097
4494
|
"site": "instagram",
|
|
4098
|
-
"name": "
|
|
4099
|
-
"description": "
|
|
4495
|
+
"name": "explore",
|
|
4496
|
+
"description": "Instagram explore/discover trending posts",
|
|
4100
4497
|
"domain": "www.instagram.com",
|
|
4101
4498
|
"strategy": "cookie",
|
|
4102
4499
|
"browser": true,
|
|
@@ -4106,11 +4503,11 @@
|
|
|
4106
4503
|
"type": "int",
|
|
4107
4504
|
"default": 20,
|
|
4108
4505
|
"required": false,
|
|
4109
|
-
"help": "Number of
|
|
4506
|
+
"help": "Number of posts"
|
|
4110
4507
|
}
|
|
4111
4508
|
],
|
|
4112
4509
|
"columns": [
|
|
4113
|
-
"
|
|
4510
|
+
"rank",
|
|
4114
4511
|
"user",
|
|
4115
4512
|
"caption",
|
|
4116
4513
|
"likes",
|
|
@@ -4122,55 +4519,45 @@
|
|
|
4122
4519
|
"navigate": "https://www.instagram.com"
|
|
4123
4520
|
},
|
|
4124
4521
|
{
|
|
4125
|
-
"evaluate": "(async () => {\n const limit = ${{ args.limit }};\n const res = await fetch(\n 'https://www.instagram.com/api/v1/
|
|
4522
|
+
"evaluate": "(async () => {\n const limit = ${{ args.limit }};\n const res = await fetch(\n 'https://www.instagram.com/api/v1/discover/web/explore_grid/',\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 posts = [];\n for (const sec of (data?.sectional_items || [])) {\n for (const m of (sec?.layout_content?.medias || [])) {\n const media = m?.media;\n if (media) posts.push({\n user: media.user?.username || '',\n caption: (media.caption?.text || '').replace(/\\n/g, ' ').substring(0, 100),\n likes: media.like_count ?? 0,\n comments: media.comment_count ?? 0,\n type: media.media_type === 1 ? 'photo' : media.media_type === 2 ? 'video' : 'carousel',\n });\n }\n }\n return posts.slice(0, limit).map((p, i) => ({ rank: i + 1, ...p }));\n})()\n"
|
|
4126
4523
|
}
|
|
4127
4524
|
],
|
|
4128
4525
|
"type": "yaml"
|
|
4129
4526
|
},
|
|
4130
4527
|
{
|
|
4131
4528
|
"site": "instagram",
|
|
4132
|
-
"name": "
|
|
4133
|
-
"description": "
|
|
4529
|
+
"name": "follow",
|
|
4530
|
+
"description": "Follow an Instagram user",
|
|
4134
4531
|
"domain": "www.instagram.com",
|
|
4135
4532
|
"strategy": "cookie",
|
|
4136
4533
|
"browser": true,
|
|
4137
4534
|
"args": [
|
|
4138
4535
|
{
|
|
4139
|
-
"name": "
|
|
4536
|
+
"name": "username",
|
|
4140
4537
|
"type": "str",
|
|
4141
4538
|
"required": true,
|
|
4142
4539
|
"positional": true,
|
|
4143
|
-
"help": "
|
|
4144
|
-
},
|
|
4145
|
-
{
|
|
4146
|
-
"name": "limit",
|
|
4147
|
-
"type": "int",
|
|
4148
|
-
"default": 10,
|
|
4149
|
-
"required": false,
|
|
4150
|
-
"help": "Number of results"
|
|
4540
|
+
"help": "Instagram username to follow"
|
|
4151
4541
|
}
|
|
4152
4542
|
],
|
|
4153
4543
|
"columns": [
|
|
4154
|
-
"
|
|
4155
|
-
"username"
|
|
4156
|
-
"name",
|
|
4157
|
-
"verified",
|
|
4158
|
-
"private"
|
|
4544
|
+
"status",
|
|
4545
|
+
"username"
|
|
4159
4546
|
],
|
|
4160
4547
|
"pipeline": [
|
|
4161
4548
|
{
|
|
4162
4549
|
"navigate": "https://www.instagram.com"
|
|
4163
4550
|
},
|
|
4164
4551
|
{
|
|
4165
|
-
"evaluate": "(async () => {\n const
|
|
4552
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n // Get user ID\n const r1 = await fetch('https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username), opts);\n if (!r1.ok) throw new Error('User not found: ' + username);\n const d1 = await r1.json();\n const userId = d1?.data?.user?.id;\n if (!userId) throw new Error('User not found: ' + username);\n\n const csrf = document.cookie.match(/csrftoken=([^;]+)/)?.[1] || '';\n const r2 = await fetch('https://www.instagram.com/api/v1/friendships/create/' + userId + '/', {\n method: 'POST',\n credentials: 'include',\n headers: { ...headers, 'X-CSRFToken': csrf, 'Content-Type': 'application/x-www-form-urlencoded' },\n });\n if (!r2.ok) throw new Error('Failed to follow: HTTP ' + r2.status);\n const d2 = await r2.json();\n const status = d2?.friendship_status?.following ? 'Following' : d2?.friendship_status?.outgoing_request ? 'Request sent' : 'Followed';\n return [{ status, username }];\n})()\n"
|
|
4166
4553
|
}
|
|
4167
4554
|
],
|
|
4168
4555
|
"type": "yaml"
|
|
4169
4556
|
},
|
|
4170
4557
|
{
|
|
4171
4558
|
"site": "instagram",
|
|
4172
|
-
"name": "
|
|
4173
|
-
"description": "
|
|
4559
|
+
"name": "followers",
|
|
4560
|
+
"description": "List followers of an Instagram user",
|
|
4174
4561
|
"domain": "www.instagram.com",
|
|
4175
4562
|
"strategy": "cookie",
|
|
4176
4563
|
"browser": true,
|
|
@@ -4180,27 +4567,37 @@
|
|
|
4180
4567
|
"type": "str",
|
|
4181
4568
|
"required": true,
|
|
4182
4569
|
"positional": true,
|
|
4183
|
-
"help": "Instagram username
|
|
4570
|
+
"help": "Instagram username"
|
|
4571
|
+
},
|
|
4572
|
+
{
|
|
4573
|
+
"name": "limit",
|
|
4574
|
+
"type": "int",
|
|
4575
|
+
"default": 20,
|
|
4576
|
+
"required": false,
|
|
4577
|
+
"help": "Number of followers"
|
|
4184
4578
|
}
|
|
4185
4579
|
],
|
|
4186
4580
|
"columns": [
|
|
4187
|
-
"
|
|
4188
|
-
"username"
|
|
4581
|
+
"rank",
|
|
4582
|
+
"username",
|
|
4583
|
+
"name",
|
|
4584
|
+
"verified",
|
|
4585
|
+
"private"
|
|
4189
4586
|
],
|
|
4190
4587
|
"pipeline": [
|
|
4191
4588
|
{
|
|
4192
4589
|
"navigate": "https://www.instagram.com"
|
|
4193
4590
|
},
|
|
4194
4591
|
{
|
|
4195
|
-
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch('https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username)
|
|
4592
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const limit = ${{ args.limit }};\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch(\n 'https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username),\n opts\n );\n if (!r1.ok) throw new Error('HTTP ' + r1.status + ' - make sure you are logged in to Instagram');\n const d1 = await r1.json();\n const userId = d1?.data?.user?.id;\n if (!userId) throw new Error('User not found: ' + username);\n\n const r2 = await fetch(\n 'https://www.instagram.com/api/v1/friendships/' + userId + '/followers/?count=' + limit,\n opts\n );\n if (!r2.ok) throw new Error('Failed to fetch followers: HTTP ' + r2.status);\n const d2 = await r2.json();\n return (d2?.users || []).slice(0, limit).map((u, i) => ({\n rank: i + 1,\n username: u.username || '',\n name: u.full_name || '',\n verified: u.is_verified ? 'Yes' : 'No',\n private: u.is_private ? 'Yes' : 'No',\n }));\n})()\n"
|
|
4196
4593
|
}
|
|
4197
4594
|
],
|
|
4198
4595
|
"type": "yaml"
|
|
4199
4596
|
},
|
|
4200
4597
|
{
|
|
4201
4598
|
"site": "instagram",
|
|
4202
|
-
"name": "
|
|
4203
|
-
"description": "
|
|
4599
|
+
"name": "following",
|
|
4600
|
+
"description": "List accounts an Instagram user is following",
|
|
4204
4601
|
"domain": "www.instagram.com",
|
|
4205
4602
|
"strategy": "cookie",
|
|
4206
4603
|
"browser": true,
|
|
@@ -4210,35 +4607,37 @@
|
|
|
4210
4607
|
"type": "str",
|
|
4211
4608
|
"required": true,
|
|
4212
4609
|
"positional": true,
|
|
4213
|
-
"help": "
|
|
4610
|
+
"help": "Instagram username"
|
|
4214
4611
|
},
|
|
4215
4612
|
{
|
|
4216
|
-
"name": "
|
|
4613
|
+
"name": "limit",
|
|
4217
4614
|
"type": "int",
|
|
4218
|
-
"default":
|
|
4615
|
+
"default": 20,
|
|
4219
4616
|
"required": false,
|
|
4220
|
-
"help": "
|
|
4617
|
+
"help": "Number of accounts"
|
|
4221
4618
|
}
|
|
4222
4619
|
],
|
|
4223
4620
|
"columns": [
|
|
4224
|
-
"
|
|
4225
|
-
"
|
|
4226
|
-
"
|
|
4621
|
+
"rank",
|
|
4622
|
+
"username",
|
|
4623
|
+
"name",
|
|
4624
|
+
"verified",
|
|
4625
|
+
"private"
|
|
4227
4626
|
],
|
|
4228
4627
|
"pipeline": [
|
|
4229
4628
|
{
|
|
4230
4629
|
"navigate": "https://www.instagram.com"
|
|
4231
4630
|
},
|
|
4232
4631
|
{
|
|
4233
|
-
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const
|
|
4632
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const limit = ${{ args.limit }};\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch(\n 'https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username),\n opts\n );\n if (!r1.ok) throw new Error('HTTP ' + r1.status + ' - make sure you are logged in to Instagram');\n const d1 = await r1.json();\n const userId = d1?.data?.user?.id;\n if (!userId) throw new Error('User not found: ' + username);\n\n const r2 = await fetch(\n 'https://www.instagram.com/api/v1/friendships/' + userId + '/following/?count=' + limit,\n opts\n );\n if (!r2.ok) throw new Error('Failed to fetch following: HTTP ' + r2.status);\n const d2 = await r2.json();\n return (d2?.users || []).slice(0, limit).map((u, i) => ({\n rank: i + 1,\n username: u.username || '',\n name: u.full_name || '',\n verified: u.is_verified ? 'Yes' : 'No',\n private: u.is_private ? 'Yes' : 'No',\n }));\n})()\n"
|
|
4234
4633
|
}
|
|
4235
4634
|
],
|
|
4236
4635
|
"type": "yaml"
|
|
4237
4636
|
},
|
|
4238
4637
|
{
|
|
4239
4638
|
"site": "instagram",
|
|
4240
|
-
"name": "
|
|
4241
|
-
"description": "
|
|
4639
|
+
"name": "like",
|
|
4640
|
+
"description": "Like an Instagram post",
|
|
4242
4641
|
"domain": "www.instagram.com",
|
|
4243
4642
|
"strategy": "cookie",
|
|
4244
4643
|
"browser": true,
|
|
@@ -4268,15 +4667,15 @@
|
|
|
4268
4667
|
"navigate": "https://www.instagram.com"
|
|
4269
4668
|
},
|
|
4270
4669
|
{
|
|
4271
|
-
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const idx = ${{ args.index }} - 1;\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch('https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username), opts);\n if (!r1.ok) throw new Error('User not found: ' + username);\n const userId = (await r1.json())?.data?.user?.id;\n\n const r2 = await fetch('https://www.instagram.com/api/v1/feed/user/' + userId + '/?count=' + (idx + 1), opts);\n const posts = (await r2.json())?.items || [];\n if (idx >= posts.length) throw new Error('Post index ' + (idx + 1) + ' not found');\n const pk = posts[idx].pk;\n const caption = (posts[idx].caption?.text || '').substring(0, 60);\n\n const csrf = document.cookie.match(/csrftoken=([^;]+)/)?.[1] || '';\n const r3 = await fetch('https://www.instagram.com/api/v1/web/
|
|
4670
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const idx = ${{ args.index }} - 1;\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch('https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username), opts);\n if (!r1.ok) throw new Error('User not found: ' + username);\n const userId = (await r1.json())?.data?.user?.id;\n\n const r2 = await fetch('https://www.instagram.com/api/v1/feed/user/' + userId + '/?count=' + (idx + 1), opts);\n const posts = (await r2.json())?.items || [];\n if (idx >= posts.length) throw new Error('Post index ' + (idx + 1) + ' not found, user has ' + posts.length + ' recent posts');\n const pk = posts[idx].pk;\n const caption = (posts[idx].caption?.text || '').substring(0, 60);\n\n const csrf = document.cookie.match(/csrftoken=([^;]+)/)?.[1] || '';\n const r3 = await fetch('https://www.instagram.com/api/v1/web/likes/' + pk + '/like/', {\n method: 'POST', credentials: 'include',\n headers: { ...headers, 'X-CSRFToken': csrf, 'Content-Type': 'application/x-www-form-urlencoded' },\n });\n if (!r3.ok) throw new Error('Failed to like: HTTP ' + r3.status);\n return [{ status: 'Liked', user: username, post: caption || '(post #' + (idx+1) + ')' }];\n})()\n"
|
|
4272
4671
|
}
|
|
4273
4672
|
],
|
|
4274
4673
|
"type": "yaml"
|
|
4275
4674
|
},
|
|
4276
4675
|
{
|
|
4277
4676
|
"site": "instagram",
|
|
4278
|
-
"name": "
|
|
4279
|
-
"description": "Get
|
|
4677
|
+
"name": "profile",
|
|
4678
|
+
"description": "Get Instagram user profile info",
|
|
4280
4679
|
"domain": "www.instagram.com",
|
|
4281
4680
|
"strategy": "cookie",
|
|
4282
4681
|
"browser": true,
|
|
@@ -4287,90 +4686,70 @@
|
|
|
4287
4686
|
"required": true,
|
|
4288
4687
|
"positional": true,
|
|
4289
4688
|
"help": "Instagram username"
|
|
4290
|
-
},
|
|
4291
|
-
{
|
|
4292
|
-
"name": "limit",
|
|
4293
|
-
"type": "int",
|
|
4294
|
-
"default": 12,
|
|
4295
|
-
"required": false,
|
|
4296
|
-
"help": "Number of posts"
|
|
4297
4689
|
}
|
|
4298
4690
|
],
|
|
4299
4691
|
"columns": [
|
|
4300
|
-
"
|
|
4301
|
-
"
|
|
4302
|
-
"
|
|
4303
|
-
"
|
|
4304
|
-
"
|
|
4305
|
-
"
|
|
4692
|
+
"username",
|
|
4693
|
+
"name",
|
|
4694
|
+
"followers",
|
|
4695
|
+
"following",
|
|
4696
|
+
"posts",
|
|
4697
|
+
"verified",
|
|
4698
|
+
"bio"
|
|
4306
4699
|
],
|
|
4307
4700
|
"pipeline": [
|
|
4308
4701
|
{
|
|
4309
4702
|
"navigate": "https://www.instagram.com"
|
|
4310
4703
|
},
|
|
4311
4704
|
{
|
|
4312
|
-
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const
|
|
4705
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const res = await fetch(\n 'https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username),\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 u = data?.data?.user;\n if (!u) throw new Error('User not found: ' + username);\n return [{\n username: u.username,\n name: u.full_name || '',\n bio: (u.biography || '').replace(/\\n/g, ' ').substring(0, 120),\n followers: u.edge_followed_by?.count ?? 0,\n following: u.edge_follow?.count ?? 0,\n posts: u.edge_owner_to_timeline_media?.count ?? 0,\n verified: u.is_verified ? 'Yes' : 'No',\n url: 'https://www.instagram.com/' + u.username,\n }];\n})()\n"
|
|
4313
4706
|
}
|
|
4314
4707
|
],
|
|
4315
4708
|
"type": "yaml"
|
|
4316
4709
|
},
|
|
4317
4710
|
{
|
|
4318
|
-
"site": "
|
|
4319
|
-
"name": "
|
|
4320
|
-
"description": "
|
|
4321
|
-
"
|
|
4711
|
+
"site": "instagram",
|
|
4712
|
+
"name": "save",
|
|
4713
|
+
"description": "Save (bookmark) an Instagram post",
|
|
4714
|
+
"domain": "www.instagram.com",
|
|
4715
|
+
"strategy": "cookie",
|
|
4322
4716
|
"browser": true,
|
|
4323
4717
|
"args": [
|
|
4324
4718
|
{
|
|
4325
|
-
"name": "
|
|
4326
|
-
"type": "
|
|
4327
|
-
"required": true,
|
|
4719
|
+
"name": "username",
|
|
4720
|
+
"type": "str",
|
|
4721
|
+
"required": true,
|
|
4328
4722
|
"positional": true,
|
|
4329
|
-
"help": "
|
|
4723
|
+
"help": "Username of the post author"
|
|
4330
4724
|
},
|
|
4331
4725
|
{
|
|
4332
|
-
"name": "
|
|
4333
|
-
"type": "
|
|
4334
|
-
"
|
|
4335
|
-
"
|
|
4336
|
-
"help": "
|
|
4726
|
+
"name": "index",
|
|
4727
|
+
"type": "int",
|
|
4728
|
+
"default": 1,
|
|
4729
|
+
"required": false,
|
|
4730
|
+
"help": "Post index (1 = most recent)"
|
|
4337
4731
|
}
|
|
4338
4732
|
],
|
|
4339
|
-
"type": "ts",
|
|
4340
|
-
"modulePath": "jike/comment.js",
|
|
4341
|
-
"domain": "web.okjike.com",
|
|
4342
4733
|
"columns": [
|
|
4343
4734
|
"status",
|
|
4344
|
-
"
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
"site": "jike",
|
|
4349
|
-
"name": "create",
|
|
4350
|
-
"description": "发布即刻动态",
|
|
4351
|
-
"strategy": "ui",
|
|
4352
|
-
"browser": true,
|
|
4353
|
-
"args": [
|
|
4735
|
+
"user",
|
|
4736
|
+
"post"
|
|
4737
|
+
],
|
|
4738
|
+
"pipeline": [
|
|
4354
4739
|
{
|
|
4355
|
-
"
|
|
4356
|
-
|
|
4357
|
-
|
|
4358
|
-
"
|
|
4359
|
-
"help": "动态正文内容"
|
|
4740
|
+
"navigate": "https://www.instagram.com"
|
|
4741
|
+
},
|
|
4742
|
+
{
|
|
4743
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const idx = ${{ args.index }} - 1;\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch('https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username), opts);\n if (!r1.ok) throw new Error('User not found: ' + username);\n const userId = (await r1.json())?.data?.user?.id;\n\n const r2 = await fetch('https://www.instagram.com/api/v1/feed/user/' + userId + '/?count=' + (idx + 1), opts);\n const posts = (await r2.json())?.items || [];\n if (idx >= posts.length) throw new Error('Post index ' + (idx + 1) + ' not found');\n const pk = posts[idx].pk;\n const caption = (posts[idx].caption?.text || '').substring(0, 60);\n\n const csrf = document.cookie.match(/csrftoken=([^;]+)/)?.[1] || '';\n const r3 = await fetch('https://www.instagram.com/api/v1/web/save/' + pk + '/save/', {\n method: 'POST', credentials: 'include',\n headers: { ...headers, 'X-CSRFToken': csrf, 'Content-Type': 'application/x-www-form-urlencoded' },\n });\n if (!r3.ok) throw new Error('Failed to save: HTTP ' + r3.status);\n return [{ status: 'Saved', user: username, post: caption || '(post #' + (idx+1) + ')' }];\n})()\n"
|
|
4360
4744
|
}
|
|
4361
4745
|
],
|
|
4362
|
-
"type": "
|
|
4363
|
-
"modulePath": "jike/create.js",
|
|
4364
|
-
"domain": "web.okjike.com",
|
|
4365
|
-
"columns": [
|
|
4366
|
-
"status",
|
|
4367
|
-
"message"
|
|
4368
|
-
]
|
|
4746
|
+
"type": "yaml"
|
|
4369
4747
|
},
|
|
4370
4748
|
{
|
|
4371
|
-
"site": "
|
|
4372
|
-
"name": "
|
|
4373
|
-
"description": "
|
|
4749
|
+
"site": "instagram",
|
|
4750
|
+
"name": "saved",
|
|
4751
|
+
"description": "Get your saved Instagram posts",
|
|
4752
|
+
"domain": "www.instagram.com",
|
|
4374
4753
|
"strategy": "cookie",
|
|
4375
4754
|
"browser": true,
|
|
4376
4755
|
"args": [
|
|
@@ -4379,507 +4758,494 @@
|
|
|
4379
4758
|
"type": "int",
|
|
4380
4759
|
"default": 20,
|
|
4381
4760
|
"required": false,
|
|
4382
|
-
"help": ""
|
|
4761
|
+
"help": "Number of saved posts"
|
|
4383
4762
|
}
|
|
4384
4763
|
],
|
|
4385
|
-
"type": "ts",
|
|
4386
|
-
"modulePath": "jike/feed.js",
|
|
4387
|
-
"domain": "web.okjike.com",
|
|
4388
4764
|
"columns": [
|
|
4389
|
-
"
|
|
4390
|
-
"
|
|
4765
|
+
"index",
|
|
4766
|
+
"user",
|
|
4767
|
+
"caption",
|
|
4391
4768
|
"likes",
|
|
4392
4769
|
"comments",
|
|
4393
|
-
"
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
},
|
|
4397
|
-
{
|
|
4398
|
-
"site": "jike",
|
|
4399
|
-
"name": "like",
|
|
4400
|
-
"description": "点赞即刻帖子",
|
|
4401
|
-
"strategy": "ui",
|
|
4402
|
-
"browser": true,
|
|
4403
|
-
"args": [
|
|
4770
|
+
"type"
|
|
4771
|
+
],
|
|
4772
|
+
"pipeline": [
|
|
4404
4773
|
{
|
|
4405
|
-
"
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
"
|
|
4409
|
-
"help": "帖子 ID"
|
|
4774
|
+
"navigate": "https://www.instagram.com"
|
|
4775
|
+
},
|
|
4776
|
+
{
|
|
4777
|
+
"evaluate": "(async () => {\n const limit = ${{ args.limit }};\n const res = await fetch(\n 'https://www.instagram.com/api/v1/feed/saved/posts/',\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 return (data?.items || []).slice(0, limit).map((item, i) => {\n const m = item?.media;\n return {\n index: i + 1,\n user: m?.user?.username || '',\n caption: (m?.caption?.text || '').replace(/\\n/g, ' ').substring(0, 100),\n likes: m?.like_count ?? 0,\n comments: m?.comment_count ?? 0,\n type: m?.media_type === 1 ? 'photo' : m?.media_type === 2 ? 'video' : 'carousel',\n };\n });\n})()\n"
|
|
4410
4778
|
}
|
|
4411
4779
|
],
|
|
4412
|
-
"type": "
|
|
4413
|
-
"modulePath": "jike/like.js",
|
|
4414
|
-
"domain": "web.okjike.com",
|
|
4415
|
-
"columns": [
|
|
4416
|
-
"status",
|
|
4417
|
-
"message"
|
|
4418
|
-
]
|
|
4780
|
+
"type": "yaml"
|
|
4419
4781
|
},
|
|
4420
4782
|
{
|
|
4421
|
-
"site": "
|
|
4422
|
-
"name": "
|
|
4423
|
-
"description": "
|
|
4783
|
+
"site": "instagram",
|
|
4784
|
+
"name": "search",
|
|
4785
|
+
"description": "Search Instagram users",
|
|
4786
|
+
"domain": "www.instagram.com",
|
|
4424
4787
|
"strategy": "cookie",
|
|
4425
4788
|
"browser": true,
|
|
4426
4789
|
"args": [
|
|
4790
|
+
{
|
|
4791
|
+
"name": "query",
|
|
4792
|
+
"type": "str",
|
|
4793
|
+
"required": true,
|
|
4794
|
+
"positional": true,
|
|
4795
|
+
"help": "Search query"
|
|
4796
|
+
},
|
|
4427
4797
|
{
|
|
4428
4798
|
"name": "limit",
|
|
4429
4799
|
"type": "int",
|
|
4430
|
-
"default":
|
|
4800
|
+
"default": 10,
|
|
4431
4801
|
"required": false,
|
|
4432
|
-
"help": ""
|
|
4802
|
+
"help": "Number of results"
|
|
4433
4803
|
}
|
|
4434
4804
|
],
|
|
4435
|
-
"type": "ts",
|
|
4436
|
-
"modulePath": "jike/notifications.js",
|
|
4437
|
-
"domain": "web.okjike.com",
|
|
4438
4805
|
"columns": [
|
|
4439
|
-
"
|
|
4440
|
-
"
|
|
4441
|
-
"
|
|
4442
|
-
"
|
|
4443
|
-
|
|
4806
|
+
"rank",
|
|
4807
|
+
"username",
|
|
4808
|
+
"name",
|
|
4809
|
+
"verified",
|
|
4810
|
+
"private"
|
|
4811
|
+
],
|
|
4812
|
+
"pipeline": [
|
|
4813
|
+
{
|
|
4814
|
+
"navigate": "https://www.instagram.com"
|
|
4815
|
+
},
|
|
4816
|
+
{
|
|
4817
|
+
"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"
|
|
4818
|
+
}
|
|
4819
|
+
],
|
|
4820
|
+
"type": "yaml"
|
|
4444
4821
|
},
|
|
4445
4822
|
{
|
|
4446
|
-
"site": "
|
|
4447
|
-
"name": "
|
|
4448
|
-
"description": "
|
|
4449
|
-
"domain": "
|
|
4823
|
+
"site": "instagram",
|
|
4824
|
+
"name": "unfollow",
|
|
4825
|
+
"description": "Unfollow an Instagram user",
|
|
4826
|
+
"domain": "www.instagram.com",
|
|
4450
4827
|
"strategy": "cookie",
|
|
4451
4828
|
"browser": true,
|
|
4452
4829
|
"args": [
|
|
4453
4830
|
{
|
|
4454
|
-
"name": "
|
|
4455
|
-
"type": "
|
|
4831
|
+
"name": "username",
|
|
4832
|
+
"type": "str",
|
|
4456
4833
|
"required": true,
|
|
4457
4834
|
"positional": true,
|
|
4458
|
-
"help": "
|
|
4835
|
+
"help": "Instagram username to unfollow"
|
|
4459
4836
|
}
|
|
4460
4837
|
],
|
|
4461
4838
|
"columns": [
|
|
4462
|
-
"
|
|
4463
|
-
"
|
|
4464
|
-
"content",
|
|
4465
|
-
"likes",
|
|
4466
|
-
"time"
|
|
4839
|
+
"status",
|
|
4840
|
+
"username"
|
|
4467
4841
|
],
|
|
4468
4842
|
"pipeline": [
|
|
4469
4843
|
{
|
|
4470
|
-
"navigate": "https://
|
|
4471
|
-
},
|
|
4472
|
-
{
|
|
4473
|
-
"evaluate": "(() => {\n try {\n const el = document.querySelector('script[type=\"application/json\"]');\n if (!el) return [];\n const data = JSON.parse(el.textContent);\n const pageProps = data?.props?.pageProps || {};\n const post = pageProps.post || {};\n const comments = pageProps.comments || [];\n\n const result = [{\n type: 'post',\n author: post.user?.screenName || '',\n content: post.content || '',\n likes: post.likeCount || 0,\n time: post.createdAt || '',\n }];\n\n for (const c of comments) {\n result.push({\n type: 'comment',\n author: c.user?.screenName || '',\n content: (c.content || '').replace(/\\n/g, ' '),\n likes: c.likeCount || 0,\n time: c.createdAt || '',\n });\n }\n\n return result;\n } catch (e) {\n return [];\n }\n})()\n"
|
|
4844
|
+
"navigate": "https://www.instagram.com"
|
|
4474
4845
|
},
|
|
4475
4846
|
{
|
|
4476
|
-
"
|
|
4477
|
-
"type": "${{ item.type }}",
|
|
4478
|
-
"author": "${{ item.author }}",
|
|
4479
|
-
"content": "${{ item.content }}",
|
|
4480
|
-
"likes": "${{ item.likes }}",
|
|
4481
|
-
"time": "${{ item.time }}"
|
|
4482
|
-
}
|
|
4847
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch('https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username), opts);\n if (!r1.ok) throw new Error('User not found: ' + username);\n const d1 = await r1.json();\n const userId = d1?.data?.user?.id;\n if (!userId) throw new Error('User not found: ' + username);\n\n const csrf = document.cookie.match(/csrftoken=([^;]+)/)?.[1] || '';\n const r2 = await fetch('https://www.instagram.com/api/v1/friendships/destroy/' + userId + '/', {\n method: 'POST',\n credentials: 'include',\n headers: { ...headers, 'X-CSRFToken': csrf, 'Content-Type': 'application/x-www-form-urlencoded' },\n });\n if (!r2.ok) throw new Error('Failed to unfollow: HTTP ' + r2.status);\n return [{ status: 'Unfollowed', username }];\n})()\n"
|
|
4483
4848
|
}
|
|
4484
4849
|
],
|
|
4485
4850
|
"type": "yaml"
|
|
4486
4851
|
},
|
|
4487
4852
|
{
|
|
4488
|
-
"site": "
|
|
4489
|
-
"name": "
|
|
4490
|
-
"description": "
|
|
4491
|
-
"
|
|
4853
|
+
"site": "instagram",
|
|
4854
|
+
"name": "unlike",
|
|
4855
|
+
"description": "Unlike an Instagram post",
|
|
4856
|
+
"domain": "www.instagram.com",
|
|
4857
|
+
"strategy": "cookie",
|
|
4492
4858
|
"browser": true,
|
|
4493
4859
|
"args": [
|
|
4494
4860
|
{
|
|
4495
|
-
"name": "
|
|
4496
|
-
"type": "
|
|
4861
|
+
"name": "username",
|
|
4862
|
+
"type": "str",
|
|
4497
4863
|
"required": true,
|
|
4498
4864
|
"positional": true,
|
|
4499
|
-
"help": "
|
|
4865
|
+
"help": "Username of the post author"
|
|
4500
4866
|
},
|
|
4501
4867
|
{
|
|
4502
|
-
"name": "
|
|
4503
|
-
"type": "
|
|
4868
|
+
"name": "index",
|
|
4869
|
+
"type": "int",
|
|
4870
|
+
"default": 1,
|
|
4504
4871
|
"required": false,
|
|
4505
|
-
"
|
|
4506
|
-
"help": "转发附言(可选)"
|
|
4872
|
+
"help": "Post index (1 = most recent)"
|
|
4507
4873
|
}
|
|
4508
4874
|
],
|
|
4509
|
-
"type": "ts",
|
|
4510
|
-
"modulePath": "jike/repost.js",
|
|
4511
|
-
"domain": "web.okjike.com",
|
|
4512
4875
|
"columns": [
|
|
4513
4876
|
"status",
|
|
4514
|
-
"
|
|
4515
|
-
|
|
4516
|
-
|
|
4517
|
-
|
|
4518
|
-
"site": "jike",
|
|
4519
|
-
"name": "search",
|
|
4520
|
-
"description": "搜索即刻帖子",
|
|
4521
|
-
"strategy": "cookie",
|
|
4522
|
-
"browser": true,
|
|
4523
|
-
"args": [
|
|
4877
|
+
"user",
|
|
4878
|
+
"post"
|
|
4879
|
+
],
|
|
4880
|
+
"pipeline": [
|
|
4524
4881
|
{
|
|
4525
|
-
"
|
|
4526
|
-
"type": "string",
|
|
4527
|
-
"required": true,
|
|
4528
|
-
"positional": true,
|
|
4529
|
-
"help": ""
|
|
4882
|
+
"navigate": "https://www.instagram.com"
|
|
4530
4883
|
},
|
|
4531
4884
|
{
|
|
4532
|
-
"
|
|
4533
|
-
"type": "int",
|
|
4534
|
-
"default": 20,
|
|
4535
|
-
"required": false,
|
|
4536
|
-
"help": ""
|
|
4885
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const idx = ${{ args.index }} - 1;\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch('https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username), opts);\n if (!r1.ok) throw new Error('User not found: ' + username);\n const userId = (await r1.json())?.data?.user?.id;\n\n const r2 = await fetch('https://www.instagram.com/api/v1/feed/user/' + userId + '/?count=' + (idx + 1), opts);\n const posts = (await r2.json())?.items || [];\n if (idx >= posts.length) throw new Error('Post index ' + (idx + 1) + ' not found');\n const pk = posts[idx].pk;\n const caption = (posts[idx].caption?.text || '').substring(0, 60);\n\n const csrf = document.cookie.match(/csrftoken=([^;]+)/)?.[1] || '';\n const r3 = await fetch('https://www.instagram.com/api/v1/web/likes/' + pk + '/unlike/', {\n method: 'POST', credentials: 'include',\n headers: { ...headers, 'X-CSRFToken': csrf, 'Content-Type': 'application/x-www-form-urlencoded' },\n });\n if (!r3.ok) throw new Error('Failed to unlike: HTTP ' + r3.status);\n return [{ status: 'Unliked', user: username, post: caption || '(post #' + (idx+1) + ')' }];\n})()\n"
|
|
4537
4886
|
}
|
|
4538
4887
|
],
|
|
4539
|
-
"type": "
|
|
4540
|
-
"modulePath": "jike/search.js",
|
|
4541
|
-
"domain": "web.okjike.com",
|
|
4542
|
-
"columns": [
|
|
4543
|
-
"author",
|
|
4544
|
-
"content",
|
|
4545
|
-
"likes",
|
|
4546
|
-
"comments",
|
|
4547
|
-
"time",
|
|
4548
|
-
"url"
|
|
4549
|
-
]
|
|
4888
|
+
"type": "yaml"
|
|
4550
4889
|
},
|
|
4551
4890
|
{
|
|
4552
|
-
"site": "
|
|
4553
|
-
"name": "
|
|
4554
|
-
"description": "
|
|
4555
|
-
"domain": "
|
|
4891
|
+
"site": "instagram",
|
|
4892
|
+
"name": "unsave",
|
|
4893
|
+
"description": "Unsave (remove bookmark) an Instagram post",
|
|
4894
|
+
"domain": "www.instagram.com",
|
|
4556
4895
|
"strategy": "cookie",
|
|
4557
4896
|
"browser": true,
|
|
4558
4897
|
"args": [
|
|
4559
4898
|
{
|
|
4560
|
-
"name": "
|
|
4561
|
-
"type": "
|
|
4899
|
+
"name": "username",
|
|
4900
|
+
"type": "str",
|
|
4562
4901
|
"required": true,
|
|
4563
4902
|
"positional": true,
|
|
4564
|
-
"help": "
|
|
4903
|
+
"help": "Username of the post author"
|
|
4565
4904
|
},
|
|
4566
4905
|
{
|
|
4567
|
-
"name": "
|
|
4906
|
+
"name": "index",
|
|
4568
4907
|
"type": "int",
|
|
4569
|
-
"default":
|
|
4908
|
+
"default": 1,
|
|
4570
4909
|
"required": false,
|
|
4571
|
-
"help": "
|
|
4910
|
+
"help": "Post index (1 = most recent)"
|
|
4572
4911
|
}
|
|
4573
4912
|
],
|
|
4574
4913
|
"columns": [
|
|
4575
|
-
"
|
|
4576
|
-
"
|
|
4577
|
-
"
|
|
4578
|
-
"comments",
|
|
4579
|
-
"time",
|
|
4580
|
-
"url"
|
|
4914
|
+
"status",
|
|
4915
|
+
"user",
|
|
4916
|
+
"post"
|
|
4581
4917
|
],
|
|
4582
4918
|
"pipeline": [
|
|
4583
4919
|
{
|
|
4584
|
-
"navigate": "https://
|
|
4585
|
-
},
|
|
4586
|
-
{
|
|
4587
|
-
"evaluate": "(() => {\n try {\n const el = document.querySelector('script[type=\"application/json\"]');\n if (!el) return [];\n const data = JSON.parse(el.textContent);\n const pageProps = data?.props?.pageProps || {};\n const posts = pageProps.posts || [];\n return posts.map(p => ({\n content: (p.content || '').replace(/\\n/g, ' ').slice(0, 80),\n author: p.user?.screenName || '',\n likes: p.likeCount || 0,\n comments: p.commentCount || 0,\n time: p.actionTime || p.createdAt || '',\n id: p.id || '',\n }));\n } catch (e) {\n return [];\n }\n})()\n"
|
|
4588
|
-
},
|
|
4589
|
-
{
|
|
4590
|
-
"map": {
|
|
4591
|
-
"content": "${{ item.content }}",
|
|
4592
|
-
"author": "${{ item.author }}",
|
|
4593
|
-
"likes": "${{ item.likes }}",
|
|
4594
|
-
"comments": "${{ item.comments }}",
|
|
4595
|
-
"time": "${{ item.time }}",
|
|
4596
|
-
"url": "https://web.okjike.com/originalPost/${{ item.id }}"
|
|
4597
|
-
}
|
|
4920
|
+
"navigate": "https://www.instagram.com"
|
|
4598
4921
|
},
|
|
4599
4922
|
{
|
|
4600
|
-
"
|
|
4923
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const idx = ${{ args.index }} - 1;\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n const r1 = await fetch('https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username), opts);\n if (!r1.ok) throw new Error('User not found: ' + username);\n const userId = (await r1.json())?.data?.user?.id;\n\n const r2 = await fetch('https://www.instagram.com/api/v1/feed/user/' + userId + '/?count=' + (idx + 1), opts);\n const posts = (await r2.json())?.items || [];\n if (idx >= posts.length) throw new Error('Post index ' + (idx + 1) + ' not found');\n const pk = posts[idx].pk;\n const caption = (posts[idx].caption?.text || '').substring(0, 60);\n\n const csrf = document.cookie.match(/csrftoken=([^;]+)/)?.[1] || '';\n const r3 = await fetch('https://www.instagram.com/api/v1/web/save/' + pk + '/unsave/', {\n method: 'POST', credentials: 'include',\n headers: { ...headers, 'X-CSRFToken': csrf, 'Content-Type': 'application/x-www-form-urlencoded' },\n });\n if (!r3.ok) throw new Error('Failed to unsave: HTTP ' + r3.status);\n return [{ status: 'Unsaved', user: username, post: caption || '(post #' + (idx+1) + ')' }];\n})()\n"
|
|
4601
4924
|
}
|
|
4602
4925
|
],
|
|
4603
4926
|
"type": "yaml"
|
|
4604
4927
|
},
|
|
4605
4928
|
{
|
|
4606
|
-
"site": "
|
|
4929
|
+
"site": "instagram",
|
|
4607
4930
|
"name": "user",
|
|
4608
|
-
"description": "
|
|
4609
|
-
"domain": "
|
|
4931
|
+
"description": "Get recent posts from an Instagram user",
|
|
4932
|
+
"domain": "www.instagram.com",
|
|
4610
4933
|
"strategy": "cookie",
|
|
4611
4934
|
"browser": true,
|
|
4612
4935
|
"args": [
|
|
4613
4936
|
{
|
|
4614
4937
|
"name": "username",
|
|
4615
|
-
"type": "
|
|
4938
|
+
"type": "str",
|
|
4616
4939
|
"required": true,
|
|
4617
4940
|
"positional": true,
|
|
4618
|
-
"help": "
|
|
4941
|
+
"help": "Instagram username"
|
|
4619
4942
|
},
|
|
4620
4943
|
{
|
|
4621
4944
|
"name": "limit",
|
|
4622
4945
|
"type": "int",
|
|
4623
|
-
"default":
|
|
4946
|
+
"default": 12,
|
|
4624
4947
|
"required": false,
|
|
4625
4948
|
"help": "Number of posts"
|
|
4626
4949
|
}
|
|
4627
4950
|
],
|
|
4628
4951
|
"columns": [
|
|
4629
|
-
"
|
|
4630
|
-
"
|
|
4952
|
+
"index",
|
|
4953
|
+
"caption",
|
|
4631
4954
|
"likes",
|
|
4632
4955
|
"comments",
|
|
4633
|
-
"
|
|
4634
|
-
"
|
|
4956
|
+
"type",
|
|
4957
|
+
"date"
|
|
4635
4958
|
],
|
|
4636
4959
|
"pipeline": [
|
|
4637
4960
|
{
|
|
4638
|
-
"navigate": "https://
|
|
4639
|
-
},
|
|
4640
|
-
{
|
|
4641
|
-
"evaluate": "(() => {\n try {\n const el = document.querySelector('script[type=\"application/json\"]');\n if (!el) return [];\n const data = JSON.parse(el.textContent);\n const posts = data?.props?.pageProps?.posts || [];\n return posts.map(p => ({\n content: (p.content || '').replace(/\\n/g, ' ').slice(0, 80),\n type: p.type === 'ORIGINAL_POST' ? 'post' : p.type === 'REPOST' ? 'repost' : p.type || '',\n likes: p.likeCount || 0,\n comments: p.commentCount || 0,\n time: p.actionTime || p.createdAt || '',\n id: p.id || '',\n }));\n } catch (e) {\n return [];\n }\n})()\n"
|
|
4642
|
-
},
|
|
4643
|
-
{
|
|
4644
|
-
"map": {
|
|
4645
|
-
"content": "${{ item.content }}",
|
|
4646
|
-
"type": "${{ item.type }}",
|
|
4647
|
-
"likes": "${{ item.likes }}",
|
|
4648
|
-
"comments": "${{ item.comments }}",
|
|
4649
|
-
"time": "${{ item.time }}",
|
|
4650
|
-
"url": "https://web.okjike.com/originalPost/${{ item.id }}"
|
|
4651
|
-
}
|
|
4961
|
+
"navigate": "https://www.instagram.com"
|
|
4652
4962
|
},
|
|
4653
4963
|
{
|
|
4654
|
-
"
|
|
4964
|
+
"evaluate": "(async () => {\n const username = ${{ args.username | json }};\n const limit = ${{ args.limit }};\n const headers = { 'X-IG-App-ID': '936619743392459' };\n const opts = { credentials: 'include', headers };\n\n // Get user ID first\n const r1 = await fetch(\n 'https://www.instagram.com/api/v1/users/web_profile_info/?username=' + encodeURIComponent(username),\n opts\n );\n if (!r1.ok) throw new Error('HTTP ' + r1.status + ' - make sure you are logged in to Instagram');\n const d1 = await r1.json();\n const userId = d1?.data?.user?.id;\n if (!userId) throw new Error('User not found: ' + username);\n\n // Get user feed\n const r2 = await fetch(\n 'https://www.instagram.com/api/v1/feed/user/' + userId + '/?count=' + limit,\n opts\n );\n if (!r2.ok) throw new Error('Failed to fetch user feed: HTTP ' + r2.status);\n const d2 = await r2.json();\n return (d2?.items || []).slice(0, limit).map((p, i) => ({\n index: i + 1,\n caption: (p.caption?.text || '').replace(/\\n/g, ' ').substring(0, 100),\n likes: p.like_count ?? 0,\n comments: p.comment_count ?? 0,\n type: p.media_type === 1 ? 'photo' : p.media_type === 2 ? 'video' : 'carousel',\n date: p.taken_at ? new Date(p.taken_at * 1000).toLocaleDateString() : '',\n }));\n})()\n"
|
|
4655
4965
|
}
|
|
4656
4966
|
],
|
|
4657
4967
|
"type": "yaml"
|
|
4658
4968
|
},
|
|
4659
4969
|
{
|
|
4660
|
-
"site": "
|
|
4661
|
-
"name": "
|
|
4662
|
-
"description": "
|
|
4663
|
-
"
|
|
4664
|
-
"strategy": "cookie",
|
|
4970
|
+
"site": "jike",
|
|
4971
|
+
"name": "comment",
|
|
4972
|
+
"description": "评论即刻帖子",
|
|
4973
|
+
"strategy": "ui",
|
|
4665
4974
|
"browser": true,
|
|
4666
4975
|
"args": [
|
|
4667
4976
|
{
|
|
4668
|
-
"name": "
|
|
4977
|
+
"name": "id",
|
|
4669
4978
|
"type": "string",
|
|
4670
4979
|
"required": true,
|
|
4671
4980
|
"positional": true,
|
|
4672
|
-
"help": "
|
|
4981
|
+
"help": "帖子 ID"
|
|
4673
4982
|
},
|
|
4674
4983
|
{
|
|
4675
|
-
"name": "
|
|
4984
|
+
"name": "text",
|
|
4676
4985
|
"type": "string",
|
|
4677
|
-
"
|
|
4678
|
-
"
|
|
4679
|
-
"help": "
|
|
4680
|
-
},
|
|
4681
|
-
{
|
|
4682
|
-
"name": "wait",
|
|
4683
|
-
"type": "int",
|
|
4684
|
-
"default": 40,
|
|
4685
|
-
"required": false,
|
|
4686
|
-
"help": "等待生成完成的秒数"
|
|
4986
|
+
"required": true,
|
|
4987
|
+
"positional": true,
|
|
4988
|
+
"help": "评论内容"
|
|
4687
4989
|
}
|
|
4688
4990
|
],
|
|
4991
|
+
"type": "ts",
|
|
4992
|
+
"modulePath": "jike/comment.js",
|
|
4993
|
+
"domain": "web.okjike.com",
|
|
4689
4994
|
"columns": [
|
|
4690
4995
|
"status",
|
|
4691
|
-
"
|
|
4692
|
-
|
|
4693
|
-
|
|
4694
|
-
|
|
4695
|
-
"
|
|
4696
|
-
|
|
4697
|
-
|
|
4698
|
-
|
|
4996
|
+
"message"
|
|
4997
|
+
]
|
|
4998
|
+
},
|
|
4999
|
+
{
|
|
5000
|
+
"site": "jike",
|
|
5001
|
+
"name": "create",
|
|
5002
|
+
"description": "发布即刻动态",
|
|
5003
|
+
"strategy": "ui",
|
|
5004
|
+
"browser": true,
|
|
5005
|
+
"args": [
|
|
4699
5006
|
{
|
|
4700
|
-
"
|
|
4701
|
-
|
|
5007
|
+
"name": "text",
|
|
5008
|
+
"type": "string",
|
|
5009
|
+
"required": true,
|
|
5010
|
+
"positional": true,
|
|
5011
|
+
"help": "动态正文内容"
|
|
5012
|
+
}
|
|
5013
|
+
],
|
|
5014
|
+
"type": "ts",
|
|
5015
|
+
"modulePath": "jike/create.js",
|
|
5016
|
+
"domain": "web.okjike.com",
|
|
5017
|
+
"columns": [
|
|
5018
|
+
"status",
|
|
5019
|
+
"message"
|
|
5020
|
+
]
|
|
5021
|
+
},
|
|
5022
|
+
{
|
|
5023
|
+
"site": "jike",
|
|
5024
|
+
"name": "feed",
|
|
5025
|
+
"description": "即刻首页动态流",
|
|
5026
|
+
"strategy": "cookie",
|
|
5027
|
+
"browser": true,
|
|
5028
|
+
"args": [
|
|
4702
5029
|
{
|
|
4703
|
-
"
|
|
4704
|
-
|
|
5030
|
+
"name": "limit",
|
|
5031
|
+
"type": "int",
|
|
5032
|
+
"default": 20,
|
|
5033
|
+
"required": false,
|
|
5034
|
+
"help": ""
|
|
5035
|
+
}
|
|
5036
|
+
],
|
|
5037
|
+
"type": "ts",
|
|
5038
|
+
"modulePath": "jike/feed.js",
|
|
5039
|
+
"domain": "web.okjike.com",
|
|
5040
|
+
"columns": [
|
|
5041
|
+
"author",
|
|
5042
|
+
"content",
|
|
5043
|
+
"likes",
|
|
5044
|
+
"comments",
|
|
5045
|
+
"time",
|
|
5046
|
+
"url"
|
|
5047
|
+
]
|
|
5048
|
+
},
|
|
5049
|
+
{
|
|
5050
|
+
"site": "jike",
|
|
5051
|
+
"name": "like",
|
|
5052
|
+
"description": "点赞即刻帖子",
|
|
5053
|
+
"strategy": "ui",
|
|
5054
|
+
"browser": true,
|
|
5055
|
+
"args": [
|
|
4705
5056
|
{
|
|
4706
|
-
"
|
|
4707
|
-
|
|
4708
|
-
|
|
4709
|
-
|
|
4710
|
-
|
|
4711
|
-
}
|
|
5057
|
+
"name": "id",
|
|
5058
|
+
"type": "string",
|
|
5059
|
+
"required": true,
|
|
5060
|
+
"positional": true,
|
|
5061
|
+
"help": "帖子 ID"
|
|
4712
5062
|
}
|
|
4713
5063
|
],
|
|
4714
|
-
"type": "
|
|
5064
|
+
"type": "ts",
|
|
5065
|
+
"modulePath": "jike/like.js",
|
|
5066
|
+
"domain": "web.okjike.com",
|
|
5067
|
+
"columns": [
|
|
5068
|
+
"status",
|
|
5069
|
+
"message"
|
|
5070
|
+
]
|
|
4715
5071
|
},
|
|
4716
5072
|
{
|
|
4717
|
-
"site": "
|
|
4718
|
-
"name": "
|
|
4719
|
-
"description": "
|
|
4720
|
-
"domain": "jimeng.jianying.com",
|
|
5073
|
+
"site": "jike",
|
|
5074
|
+
"name": "notifications",
|
|
5075
|
+
"description": "即刻通知",
|
|
4721
5076
|
"strategy": "cookie",
|
|
4722
5077
|
"browser": true,
|
|
4723
5078
|
"args": [
|
|
4724
5079
|
{
|
|
4725
5080
|
"name": "limit",
|
|
4726
5081
|
"type": "int",
|
|
4727
|
-
"default":
|
|
5082
|
+
"default": 20,
|
|
4728
5083
|
"required": false,
|
|
4729
5084
|
"help": ""
|
|
4730
5085
|
}
|
|
4731
5086
|
],
|
|
5087
|
+
"type": "ts",
|
|
5088
|
+
"modulePath": "jike/notifications.js",
|
|
5089
|
+
"domain": "web.okjike.com",
|
|
4732
5090
|
"columns": [
|
|
4733
|
-
"
|
|
4734
|
-
"
|
|
4735
|
-
"
|
|
4736
|
-
"
|
|
4737
|
-
|
|
5091
|
+
"type",
|
|
5092
|
+
"user",
|
|
5093
|
+
"content",
|
|
5094
|
+
"time"
|
|
5095
|
+
]
|
|
5096
|
+
},
|
|
5097
|
+
{
|
|
5098
|
+
"site": "jike",
|
|
5099
|
+
"name": "post",
|
|
5100
|
+
"description": "即刻帖子详情及评论",
|
|
5101
|
+
"domain": "m.okjike.com",
|
|
5102
|
+
"strategy": "cookie",
|
|
5103
|
+
"browser": true,
|
|
5104
|
+
"args": [
|
|
5105
|
+
{
|
|
5106
|
+
"name": "id",
|
|
5107
|
+
"type": "string",
|
|
5108
|
+
"required": true,
|
|
5109
|
+
"positional": true,
|
|
5110
|
+
"help": "Post ID (from post URL)"
|
|
5111
|
+
}
|
|
5112
|
+
],
|
|
5113
|
+
"columns": [
|
|
5114
|
+
"type",
|
|
5115
|
+
"author",
|
|
5116
|
+
"content",
|
|
5117
|
+
"likes",
|
|
5118
|
+
"time"
|
|
4738
5119
|
],
|
|
4739
5120
|
"pipeline": [
|
|
4740
5121
|
{
|
|
4741
|
-
"navigate": "https://
|
|
5122
|
+
"navigate": "https://m.okjike.com/originalPosts/${{ args.id }}"
|
|
4742
5123
|
},
|
|
4743
5124
|
{
|
|
4744
|
-
"evaluate": "(
|
|
5125
|
+
"evaluate": "(() => {\n try {\n const el = document.querySelector('script[type=\"application/json\"]');\n if (!el) return [];\n const data = JSON.parse(el.textContent);\n const pageProps = data?.props?.pageProps || {};\n const post = pageProps.post || {};\n const comments = pageProps.comments || [];\n\n const result = [{\n type: 'post',\n author: post.user?.screenName || '',\n content: post.content || '',\n likes: post.likeCount || 0,\n time: post.createdAt || '',\n }];\n\n for (const c of comments) {\n result.push({\n type: 'comment',\n author: c.user?.screenName || '',\n content: (c.content || '').replace(/\\n/g, ' '),\n likes: c.likeCount || 0,\n time: c.createdAt || '',\n });\n }\n\n return result;\n } catch (e) {\n return [];\n }\n})()\n"
|
|
4745
5126
|
},
|
|
4746
5127
|
{
|
|
4747
5128
|
"map": {
|
|
4748
|
-
"
|
|
4749
|
-
"
|
|
4750
|
-
"
|
|
4751
|
-
"
|
|
4752
|
-
"
|
|
5129
|
+
"type": "${{ item.type }}",
|
|
5130
|
+
"author": "${{ item.author }}",
|
|
5131
|
+
"content": "${{ item.content }}",
|
|
5132
|
+
"likes": "${{ item.likes }}",
|
|
5133
|
+
"time": "${{ item.time }}"
|
|
4753
5134
|
}
|
|
4754
|
-
},
|
|
4755
|
-
{
|
|
4756
|
-
"limit": "${{ args.limit }}"
|
|
4757
5135
|
}
|
|
4758
5136
|
],
|
|
4759
5137
|
"type": "yaml"
|
|
4760
5138
|
},
|
|
4761
5139
|
{
|
|
4762
|
-
"site": "
|
|
4763
|
-
"name": "
|
|
4764
|
-
"description": "",
|
|
4765
|
-
"strategy": "
|
|
5140
|
+
"site": "jike",
|
|
5141
|
+
"name": "repost",
|
|
5142
|
+
"description": "转发即刻帖子",
|
|
5143
|
+
"strategy": "ui",
|
|
4766
5144
|
"browser": true,
|
|
4767
5145
|
"args": [
|
|
4768
5146
|
{
|
|
4769
|
-
"name": "
|
|
5147
|
+
"name": "id",
|
|
4770
5148
|
"type": "string",
|
|
4771
5149
|
"required": true,
|
|
4772
5150
|
"positional": true,
|
|
4773
|
-
"help": "
|
|
4774
|
-
},
|
|
4775
|
-
{
|
|
4776
|
-
"name": "location",
|
|
4777
|
-
"type": "string",
|
|
4778
|
-
"required": false,
|
|
4779
|
-
"help": "Location text such as San Francisco Bay Area"
|
|
4780
|
-
},
|
|
4781
|
-
{
|
|
4782
|
-
"name": "limit",
|
|
4783
|
-
"type": "int",
|
|
4784
|
-
"default": 10,
|
|
4785
|
-
"required": false,
|
|
4786
|
-
"help": "Number of jobs to return (max 100)"
|
|
4787
|
-
},
|
|
4788
|
-
{
|
|
4789
|
-
"name": "start",
|
|
4790
|
-
"type": "int",
|
|
4791
|
-
"default": 0,
|
|
4792
|
-
"required": false,
|
|
4793
|
-
"help": "Result offset for pagination"
|
|
4794
|
-
},
|
|
4795
|
-
{
|
|
4796
|
-
"name": "details",
|
|
4797
|
-
"type": "bool",
|
|
4798
|
-
"default": false,
|
|
4799
|
-
"required": false,
|
|
4800
|
-
"help": "Include full job description and apply URL (slower)"
|
|
4801
|
-
},
|
|
4802
|
-
{
|
|
4803
|
-
"name": "company",
|
|
4804
|
-
"type": "string",
|
|
4805
|
-
"required": false,
|
|
4806
|
-
"help": "Comma-separated company names or LinkedIn company IDs"
|
|
4807
|
-
},
|
|
4808
|
-
{
|
|
4809
|
-
"name": "experience-level",
|
|
4810
|
-
"type": "string",
|
|
4811
|
-
"required": false,
|
|
4812
|
-
"help": "Comma-separated: internship, entry, associate, mid-senior, director, executive"
|
|
5151
|
+
"help": "帖子 ID"
|
|
4813
5152
|
},
|
|
4814
5153
|
{
|
|
4815
|
-
"name": "
|
|
5154
|
+
"name": "text",
|
|
4816
5155
|
"type": "string",
|
|
4817
5156
|
"required": false,
|
|
4818
|
-
"
|
|
4819
|
-
|
|
5157
|
+
"positional": true,
|
|
5158
|
+
"help": "转发附言(可选)"
|
|
5159
|
+
}
|
|
5160
|
+
],
|
|
5161
|
+
"type": "ts",
|
|
5162
|
+
"modulePath": "jike/repost.js",
|
|
5163
|
+
"domain": "web.okjike.com",
|
|
5164
|
+
"columns": [
|
|
5165
|
+
"status",
|
|
5166
|
+
"message"
|
|
5167
|
+
]
|
|
5168
|
+
},
|
|
5169
|
+
{
|
|
5170
|
+
"site": "jike",
|
|
5171
|
+
"name": "search",
|
|
5172
|
+
"description": "搜索即刻帖子",
|
|
5173
|
+
"strategy": "cookie",
|
|
5174
|
+
"browser": true,
|
|
5175
|
+
"args": [
|
|
4820
5176
|
{
|
|
4821
|
-
"name": "
|
|
5177
|
+
"name": "query",
|
|
4822
5178
|
"type": "string",
|
|
4823
|
-
"required":
|
|
4824
|
-
"
|
|
5179
|
+
"required": true,
|
|
5180
|
+
"positional": true,
|
|
5181
|
+
"help": ""
|
|
4825
5182
|
},
|
|
4826
5183
|
{
|
|
4827
|
-
"name": "
|
|
4828
|
-
"type": "
|
|
5184
|
+
"name": "limit",
|
|
5185
|
+
"type": "int",
|
|
5186
|
+
"default": 20,
|
|
4829
5187
|
"required": false,
|
|
4830
|
-
"help": "
|
|
5188
|
+
"help": ""
|
|
4831
5189
|
}
|
|
4832
5190
|
],
|
|
4833
5191
|
"type": "ts",
|
|
4834
|
-
"modulePath": "
|
|
4835
|
-
"domain": "
|
|
5192
|
+
"modulePath": "jike/search.js",
|
|
5193
|
+
"domain": "web.okjike.com",
|
|
4836
5194
|
"columns": [
|
|
4837
|
-
"
|
|
4838
|
-
"
|
|
4839
|
-
"
|
|
4840
|
-
"
|
|
4841
|
-
"
|
|
4842
|
-
"salary",
|
|
5195
|
+
"author",
|
|
5196
|
+
"content",
|
|
5197
|
+
"likes",
|
|
5198
|
+
"comments",
|
|
5199
|
+
"time",
|
|
4843
5200
|
"url"
|
|
4844
5201
|
]
|
|
4845
5202
|
},
|
|
4846
5203
|
{
|
|
4847
|
-
"site": "
|
|
4848
|
-
"name": "
|
|
4849
|
-
"description": "
|
|
4850
|
-
"domain": "
|
|
5204
|
+
"site": "jike",
|
|
5205
|
+
"name": "topic",
|
|
5206
|
+
"description": "即刻话题/圈子帖子",
|
|
5207
|
+
"domain": "m.okjike.com",
|
|
4851
5208
|
"strategy": "cookie",
|
|
4852
5209
|
"browser": true,
|
|
4853
5210
|
"args": [
|
|
5211
|
+
{
|
|
5212
|
+
"name": "id",
|
|
5213
|
+
"type": "string",
|
|
5214
|
+
"required": true,
|
|
5215
|
+
"positional": true,
|
|
5216
|
+
"help": "Topic ID (from topic URL, e.g. 553870e8e4b0cafb0a1bef68)"
|
|
5217
|
+
},
|
|
4854
5218
|
{
|
|
4855
5219
|
"name": "limit",
|
|
4856
5220
|
"type": "int",
|
|
4857
5221
|
"default": 20,
|
|
4858
5222
|
"required": false,
|
|
4859
|
-
"help": "Number of
|
|
5223
|
+
"help": "Number of posts"
|
|
4860
5224
|
}
|
|
4861
5225
|
],
|
|
4862
5226
|
"columns": [
|
|
4863
|
-
"
|
|
4864
|
-
"
|
|
4865
|
-
"
|
|
4866
|
-
"
|
|
4867
|
-
"
|
|
5227
|
+
"content",
|
|
5228
|
+
"author",
|
|
5229
|
+
"likes",
|
|
5230
|
+
"comments",
|
|
5231
|
+
"time",
|
|
5232
|
+
"url"
|
|
4868
5233
|
],
|
|
4869
5234
|
"pipeline": [
|
|
4870
5235
|
{
|
|
4871
|
-
"navigate": "https://
|
|
5236
|
+
"navigate": "https://m.okjike.com/topics/${{ args.id }}"
|
|
4872
5237
|
},
|
|
4873
5238
|
{
|
|
4874
|
-
"evaluate": "(
|
|
5239
|
+
"evaluate": "(() => {\n try {\n const el = document.querySelector('script[type=\"application/json\"]');\n if (!el) return [];\n const data = JSON.parse(el.textContent);\n const pageProps = data?.props?.pageProps || {};\n const posts = pageProps.posts || [];\n return posts.map(p => ({\n content: (p.content || '').replace(/\\n/g, ' ').slice(0, 80),\n author: p.user?.screenName || '',\n likes: p.likeCount || 0,\n comments: p.commentCount || 0,\n time: p.actionTime || p.createdAt || '',\n id: p.id || '',\n }));\n } catch (e) {\n return [];\n }\n})()\n"
|
|
4875
5240
|
},
|
|
4876
5241
|
{
|
|
4877
5242
|
"map": {
|
|
4878
|
-
"
|
|
4879
|
-
"
|
|
4880
|
-
"
|
|
4881
|
-
"
|
|
4882
|
-
"
|
|
5243
|
+
"content": "${{ item.content }}",
|
|
5244
|
+
"author": "${{ item.author }}",
|
|
5245
|
+
"likes": "${{ item.likes }}",
|
|
5246
|
+
"comments": "${{ item.comments }}",
|
|
5247
|
+
"time": "${{ item.time }}",
|
|
5248
|
+
"url": "https://web.okjike.com/originalPost/${{ item.id }}"
|
|
4883
5249
|
}
|
|
4884
5250
|
},
|
|
4885
5251
|
{
|
|
@@ -4889,56 +5255,51 @@
|
|
|
4889
5255
|
"type": "yaml"
|
|
4890
5256
|
},
|
|
4891
5257
|
{
|
|
4892
|
-
"site": "
|
|
4893
|
-
"name": "
|
|
4894
|
-
"description": "
|
|
4895
|
-
"domain": "
|
|
5258
|
+
"site": "jike",
|
|
5259
|
+
"name": "user",
|
|
5260
|
+
"description": "即刻用户动态",
|
|
5261
|
+
"domain": "m.okjike.com",
|
|
4896
5262
|
"strategy": "cookie",
|
|
4897
5263
|
"browser": true,
|
|
4898
5264
|
"args": [
|
|
4899
5265
|
{
|
|
4900
|
-
"name": "
|
|
4901
|
-
"type": "
|
|
4902
|
-
"required": true,
|
|
4903
|
-
"positional": true,
|
|
4904
|
-
"help": "Category slug (use 'categories' command to find)"
|
|
4905
|
-
},
|
|
4906
|
-
{
|
|
4907
|
-
"name": "id",
|
|
4908
|
-
"type": "int",
|
|
5266
|
+
"name": "username",
|
|
5267
|
+
"type": "string",
|
|
4909
5268
|
"required": true,
|
|
4910
5269
|
"positional": true,
|
|
4911
|
-
"help": "
|
|
5270
|
+
"help": "Username from profile URL (e.g. wenhao1996)"
|
|
4912
5271
|
},
|
|
4913
5272
|
{
|
|
4914
5273
|
"name": "limit",
|
|
4915
5274
|
"type": "int",
|
|
4916
5275
|
"default": 20,
|
|
4917
5276
|
"required": false,
|
|
4918
|
-
"help": "Number of
|
|
5277
|
+
"help": "Number of posts"
|
|
4919
5278
|
}
|
|
4920
5279
|
],
|
|
4921
5280
|
"columns": [
|
|
4922
|
-
"
|
|
4923
|
-
"
|
|
4924
|
-
"
|
|
4925
|
-
"
|
|
4926
|
-
"
|
|
5281
|
+
"content",
|
|
5282
|
+
"type",
|
|
5283
|
+
"likes",
|
|
5284
|
+
"comments",
|
|
5285
|
+
"time",
|
|
5286
|
+
"url"
|
|
4927
5287
|
],
|
|
4928
5288
|
"pipeline": [
|
|
4929
5289
|
{
|
|
4930
|
-
"navigate": "https://
|
|
5290
|
+
"navigate": "https://m.okjike.com/users/${{ args.username }}"
|
|
4931
5291
|
},
|
|
4932
5292
|
{
|
|
4933
|
-
"evaluate": "(
|
|
5293
|
+
"evaluate": "(() => {\n try {\n const el = document.querySelector('script[type=\"application/json\"]');\n if (!el) return [];\n const data = JSON.parse(el.textContent);\n const posts = data?.props?.pageProps?.posts || [];\n return posts.map(p => ({\n content: (p.content || '').replace(/\\n/g, ' ').slice(0, 80),\n type: p.type === 'ORIGINAL_POST' ? 'post' : p.type === 'REPOST' ? 'repost' : p.type || '',\n likes: p.likeCount || 0,\n comments: p.commentCount || 0,\n time: p.actionTime || p.createdAt || '',\n id: p.id || '',\n }));\n } catch (e) {\n return [];\n }\n})()\n"
|
|
4934
5294
|
},
|
|
4935
5295
|
{
|
|
4936
5296
|
"map": {
|
|
4937
|
-
"
|
|
4938
|
-
"
|
|
4939
|
-
"
|
|
4940
|
-
"
|
|
4941
|
-
"
|
|
5297
|
+
"content": "${{ item.content }}",
|
|
5298
|
+
"type": "${{ item.type }}",
|
|
5299
|
+
"likes": "${{ item.likes }}",
|
|
5300
|
+
"comments": "${{ item.comments }}",
|
|
5301
|
+
"time": "${{ item.time }}",
|
|
5302
|
+
"url": "https://web.okjike.com/originalPost/${{ item.id }}"
|
|
4942
5303
|
}
|
|
4943
5304
|
},
|
|
4944
5305
|
{
|
|
@@ -4948,103 +5309,99 @@
|
|
|
4948
5309
|
"type": "yaml"
|
|
4949
5310
|
},
|
|
4950
5311
|
{
|
|
4951
|
-
"site": "
|
|
4952
|
-
"name": "
|
|
4953
|
-
"description": "
|
|
4954
|
-
"domain": "
|
|
5312
|
+
"site": "jimeng",
|
|
5313
|
+
"name": "generate",
|
|
5314
|
+
"description": "即梦AI 文生图 — 输入 prompt 生成图片",
|
|
5315
|
+
"domain": "jimeng.jianying.com",
|
|
4955
5316
|
"strategy": "cookie",
|
|
4956
5317
|
"browser": true,
|
|
4957
5318
|
"args": [
|
|
4958
5319
|
{
|
|
4959
|
-
"name": "
|
|
4960
|
-
"type": "
|
|
4961
|
-
"
|
|
5320
|
+
"name": "prompt",
|
|
5321
|
+
"type": "string",
|
|
5322
|
+
"required": true,
|
|
5323
|
+
"positional": true,
|
|
5324
|
+
"help": "图片描述 prompt"
|
|
5325
|
+
},
|
|
5326
|
+
{
|
|
5327
|
+
"name": "model",
|
|
5328
|
+
"type": "string",
|
|
5329
|
+
"default": "high_aes_general_v50",
|
|
4962
5330
|
"required": false,
|
|
4963
|
-
"help": "
|
|
5331
|
+
"help": "模型: high_aes_general_v50 (5.0 Lite), high_aes_general_v42 (4.6), high_aes_general_v40 (4.0)"
|
|
4964
5332
|
},
|
|
4965
5333
|
{
|
|
4966
|
-
"name": "
|
|
4967
|
-
"type": "
|
|
4968
|
-
"default":
|
|
5334
|
+
"name": "wait",
|
|
5335
|
+
"type": "int",
|
|
5336
|
+
"default": 40,
|
|
4969
5337
|
"required": false,
|
|
4970
|
-
"help": "
|
|
4971
|
-
"choices": [
|
|
4972
|
-
"all",
|
|
4973
|
-
"daily",
|
|
4974
|
-
"weekly",
|
|
4975
|
-
"monthly",
|
|
4976
|
-
"yearly"
|
|
4977
|
-
]
|
|
5338
|
+
"help": "等待生成完成的秒数"
|
|
4978
5339
|
}
|
|
4979
5340
|
],
|
|
4980
5341
|
"columns": [
|
|
4981
|
-
"
|
|
4982
|
-
"
|
|
4983
|
-
"
|
|
4984
|
-
"
|
|
4985
|
-
"likes",
|
|
4986
|
-
"category"
|
|
5342
|
+
"status",
|
|
5343
|
+
"prompt",
|
|
5344
|
+
"image_count",
|
|
5345
|
+
"image_urls"
|
|
4987
5346
|
],
|
|
4988
5347
|
"pipeline": [
|
|
4989
5348
|
{
|
|
4990
|
-
"navigate": "https://
|
|
5349
|
+
"navigate": "https://jimeng.jianying.com/ai-tool/generate?type=image&workspace=0"
|
|
4991
5350
|
},
|
|
4992
5351
|
{
|
|
4993
|
-
"
|
|
5352
|
+
"wait": 3
|
|
4994
5353
|
},
|
|
4995
5354
|
{
|
|
4996
|
-
"
|
|
4997
|
-
"rank": "${{ index + 1 }}",
|
|
4998
|
-
"title": "${{ item.title }}",
|
|
4999
|
-
"replies": "${{ item.replies }}",
|
|
5000
|
-
"views": "${{ item.views }}",
|
|
5001
|
-
"likes": "${{ item.likes }}",
|
|
5002
|
-
"category": "${{ item.category }}"
|
|
5003
|
-
}
|
|
5355
|
+
"evaluate": "(async () => {\n const prompt = ${{ args.prompt | json }};\n const waitSec = ${{ args.wait }};\n \n // Step 1: Count existing images before generation\n const beforeImgs = document.querySelectorAll('img[src*=\"dreamina-sign\"], img[src*=\"tb4s082cfz\"]').length;\n \n // Step 2: Clear and set prompt\n const editors = document.querySelectorAll('[contenteditable=\"true\"]');\n const editor = editors[0];\n if (!editor) return [{ status: 'failed', prompt: prompt, image_count: 0, image_urls: 'Editor not found' }];\n \n editor.focus();\n await new Promise(r => setTimeout(r, 200));\n document.execCommand('selectAll');\n await new Promise(r => setTimeout(r, 100));\n document.execCommand('delete');\n await new Promise(r => setTimeout(r, 200));\n document.execCommand('insertText', false, prompt);\n await new Promise(r => setTimeout(r, 500));\n \n // Step 3: Click generate\n const btn = document.querySelector('.lv-btn.lv-btn-primary[class*=\"circle\"]');\n if (!btn) return [{ status: 'failed', prompt: prompt, image_count: 0, image_urls: 'Generate button not found' }];\n btn.click();\n \n // Step 4: Wait for new images to appear\n let newImgs = [];\n for (let i = 0; i < waitSec; i++) {\n await new Promise(r => setTimeout(r, 1000));\n const allImgs = document.querySelectorAll('img[src*=\"dreamina-sign\"], img[src*=\"tb4s082cfz\"]');\n if (allImgs.length > beforeImgs) {\n // New images appeared — generation complete\n newImgs = Array.from(allImgs).slice(0, allImgs.length - beforeImgs);\n break;\n }\n }\n \n if (newImgs.length === 0) {\n return [{ status: 'timeout', prompt: prompt, image_count: 0, image_urls: 'Generation may still be in progress' }];\n }\n \n // Step 5: Extract image URLs (use thumbnail URLs which are accessible)\n const urls = newImgs.map(img => img.src);\n \n return [{ \n status: 'success', \n prompt: prompt.substring(0, 80), \n image_count: urls.length, \n image_urls: urls.join('\\n')\n }];\n})()\n"
|
|
5004
5356
|
},
|
|
5005
5357
|
{
|
|
5006
|
-
"
|
|
5358
|
+
"map": {
|
|
5359
|
+
"status": "${{ item.status }}",
|
|
5360
|
+
"prompt": "${{ item.prompt }}",
|
|
5361
|
+
"image_count": "${{ item.image_count }}",
|
|
5362
|
+
"image_urls": "${{ item.image_urls }}"
|
|
5363
|
+
}
|
|
5007
5364
|
}
|
|
5008
5365
|
],
|
|
5009
5366
|
"type": "yaml"
|
|
5010
5367
|
},
|
|
5011
5368
|
{
|
|
5012
|
-
"site": "
|
|
5013
|
-
"name": "
|
|
5014
|
-
"description": "
|
|
5015
|
-
"domain": "
|
|
5369
|
+
"site": "jimeng",
|
|
5370
|
+
"name": "history",
|
|
5371
|
+
"description": "即梦AI 查看最近生成的作品",
|
|
5372
|
+
"domain": "jimeng.jianying.com",
|
|
5016
5373
|
"strategy": "cookie",
|
|
5017
5374
|
"browser": true,
|
|
5018
5375
|
"args": [
|
|
5019
5376
|
{
|
|
5020
5377
|
"name": "limit",
|
|
5021
5378
|
"type": "int",
|
|
5022
|
-
"default":
|
|
5379
|
+
"default": 5,
|
|
5023
5380
|
"required": false,
|
|
5024
|
-
"help": "
|
|
5381
|
+
"help": ""
|
|
5025
5382
|
}
|
|
5026
5383
|
],
|
|
5027
5384
|
"columns": [
|
|
5028
|
-
"
|
|
5029
|
-
"
|
|
5030
|
-
"
|
|
5031
|
-
"
|
|
5032
|
-
"
|
|
5385
|
+
"prompt",
|
|
5386
|
+
"model",
|
|
5387
|
+
"status",
|
|
5388
|
+
"image_url",
|
|
5389
|
+
"created_at"
|
|
5033
5390
|
],
|
|
5034
5391
|
"pipeline": [
|
|
5035
5392
|
{
|
|
5036
|
-
"navigate": "https://
|
|
5393
|
+
"navigate": "https://jimeng.jianying.com/ai-tool/generate?type=image&workspace=0"
|
|
5037
5394
|
},
|
|
5038
5395
|
{
|
|
5039
|
-
"evaluate": "(async () => {\n const res = await fetch('/
|
|
5396
|
+
"evaluate": "(async () => {\n const limit = ${{ args.limit }};\n const res = await fetch('/mweb/v1/get_history?aid=513695&device_platform=web®ion=cn&da_version=3.3.11&web_version=7.5.0&aigc_features=app_lip_sync', {\n method: 'POST',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ cursor: '', count: limit, need_page_item: true, need_aigc_data: true, aigc_mode_list: ['workbench'] })\n });\n const data = await res.json();\n const items = data?.data?.history_list || [];\n return items.slice(0, limit).map(item => {\n const params = item.aigc_image_params?.text2image_params || {};\n const images = item.image?.large_images || [];\n return {\n prompt: params.prompt || item.common_attr?.title || 'N/A',\n model: params.model_config?.model_name || 'unknown',\n status: item.common_attr?.status === 102 ? 'completed' : 'pending',\n image_url: images[0]?.image_url || '',\n created_at: new Date((item.common_attr?.create_time || 0) * 1000).toLocaleString('zh-CN'),\n };\n });\n})()\n"
|
|
5040
5397
|
},
|
|
5041
5398
|
{
|
|
5042
5399
|
"map": {
|
|
5043
|
-
"
|
|
5044
|
-
"
|
|
5045
|
-
"
|
|
5046
|
-
"
|
|
5047
|
-
"
|
|
5400
|
+
"prompt": "${{ item.prompt }}",
|
|
5401
|
+
"model": "${{ item.model }}",
|
|
5402
|
+
"status": "${{ item.status }}",
|
|
5403
|
+
"image_url": "${{ item.image_url }}",
|
|
5404
|
+
"created_at": "${{ item.created_at }}"
|
|
5048
5405
|
}
|
|
5049
5406
|
},
|
|
5050
5407
|
{
|
|
@@ -5054,49 +5411,127 @@
|
|
|
5054
5411
|
"type": "yaml"
|
|
5055
5412
|
},
|
|
5056
5413
|
{
|
|
5057
|
-
"site": "
|
|
5414
|
+
"site": "linkedin",
|
|
5058
5415
|
"name": "search",
|
|
5059
|
-
"description": "
|
|
5060
|
-
"
|
|
5061
|
-
"strategy": "cookie",
|
|
5416
|
+
"description": "",
|
|
5417
|
+
"strategy": "header",
|
|
5062
5418
|
"browser": true,
|
|
5063
5419
|
"args": [
|
|
5064
5420
|
{
|
|
5065
5421
|
"name": "query",
|
|
5066
|
-
"type": "
|
|
5422
|
+
"type": "string",
|
|
5067
5423
|
"required": true,
|
|
5068
5424
|
"positional": true,
|
|
5069
|
-
"help": "
|
|
5425
|
+
"help": "Job search keywords"
|
|
5426
|
+
},
|
|
5427
|
+
{
|
|
5428
|
+
"name": "location",
|
|
5429
|
+
"type": "string",
|
|
5430
|
+
"required": false,
|
|
5431
|
+
"help": "Location text such as San Francisco Bay Area"
|
|
5070
5432
|
},
|
|
5071
5433
|
{
|
|
5072
5434
|
"name": "limit",
|
|
5073
5435
|
"type": "int",
|
|
5074
|
-
"default":
|
|
5436
|
+
"default": 10,
|
|
5075
5437
|
"required": false,
|
|
5076
|
-
"help": "Number of
|
|
5438
|
+
"help": "Number of jobs to return (max 100)"
|
|
5439
|
+
},
|
|
5440
|
+
{
|
|
5441
|
+
"name": "start",
|
|
5442
|
+
"type": "int",
|
|
5443
|
+
"default": 0,
|
|
5444
|
+
"required": false,
|
|
5445
|
+
"help": "Result offset for pagination"
|
|
5446
|
+
},
|
|
5447
|
+
{
|
|
5448
|
+
"name": "details",
|
|
5449
|
+
"type": "bool",
|
|
5450
|
+
"default": false,
|
|
5451
|
+
"required": false,
|
|
5452
|
+
"help": "Include full job description and apply URL (slower)"
|
|
5453
|
+
},
|
|
5454
|
+
{
|
|
5455
|
+
"name": "company",
|
|
5456
|
+
"type": "string",
|
|
5457
|
+
"required": false,
|
|
5458
|
+
"help": "Comma-separated company names or LinkedIn company IDs"
|
|
5459
|
+
},
|
|
5460
|
+
{
|
|
5461
|
+
"name": "experience-level",
|
|
5462
|
+
"type": "string",
|
|
5463
|
+
"required": false,
|
|
5464
|
+
"help": "Comma-separated: internship, entry, associate, mid-senior, director, executive"
|
|
5465
|
+
},
|
|
5466
|
+
{
|
|
5467
|
+
"name": "job-type",
|
|
5468
|
+
"type": "string",
|
|
5469
|
+
"required": false,
|
|
5470
|
+
"help": "Comma-separated: full-time, part-time, contract, temporary, volunteer, internship, other"
|
|
5471
|
+
},
|
|
5472
|
+
{
|
|
5473
|
+
"name": "date-posted",
|
|
5474
|
+
"type": "string",
|
|
5475
|
+
"required": false,
|
|
5476
|
+
"help": "One of: any, month, week, 24h"
|
|
5477
|
+
},
|
|
5478
|
+
{
|
|
5479
|
+
"name": "remote",
|
|
5480
|
+
"type": "string",
|
|
5481
|
+
"required": false,
|
|
5482
|
+
"help": "Comma-separated: on-site, hybrid, remote"
|
|
5077
5483
|
}
|
|
5078
5484
|
],
|
|
5485
|
+
"type": "ts",
|
|
5486
|
+
"modulePath": "linkedin/search.js",
|
|
5487
|
+
"domain": "www.linkedin.com",
|
|
5079
5488
|
"columns": [
|
|
5080
5489
|
"rank",
|
|
5081
5490
|
"title",
|
|
5082
|
-
"
|
|
5083
|
-
"
|
|
5084
|
-
"
|
|
5491
|
+
"company",
|
|
5492
|
+
"location",
|
|
5493
|
+
"listed",
|
|
5494
|
+
"salary",
|
|
5495
|
+
"url"
|
|
5496
|
+
]
|
|
5497
|
+
},
|
|
5498
|
+
{
|
|
5499
|
+
"site": "linux-do",
|
|
5500
|
+
"name": "categories",
|
|
5501
|
+
"description": "linux.do 分类列表",
|
|
5502
|
+
"domain": "linux.do",
|
|
5503
|
+
"strategy": "cookie",
|
|
5504
|
+
"browser": true,
|
|
5505
|
+
"args": [
|
|
5506
|
+
{
|
|
5507
|
+
"name": "limit",
|
|
5508
|
+
"type": "int",
|
|
5509
|
+
"default": 20,
|
|
5510
|
+
"required": false,
|
|
5511
|
+
"help": "Number of categories"
|
|
5512
|
+
}
|
|
5513
|
+
],
|
|
5514
|
+
"columns": [
|
|
5515
|
+
"name",
|
|
5516
|
+
"slug",
|
|
5517
|
+
"id",
|
|
5518
|
+
"topics",
|
|
5519
|
+
"description"
|
|
5085
5520
|
],
|
|
5086
5521
|
"pipeline": [
|
|
5087
5522
|
{
|
|
5088
5523
|
"navigate": "https://linux.do"
|
|
5089
5524
|
},
|
|
5090
5525
|
{
|
|
5091
|
-
"evaluate": "(async () => {\n const
|
|
5526
|
+
"evaluate": "(async () => {\n const res = await fetch('/categories.json', { 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 cats = data?.category_list?.categories || [];\n return cats.slice(0, ${{ args.limit }}).map(c => ({\n name: c.name,\n slug: c.slug,\n id: c.id,\n topics: c.topic_count,\n description: (c.description_text || '').slice(0, 80),\n }));\n})()\n"
|
|
5092
5527
|
},
|
|
5093
5528
|
{
|
|
5094
5529
|
"map": {
|
|
5095
|
-
"
|
|
5096
|
-
"
|
|
5097
|
-
"
|
|
5098
|
-
"
|
|
5099
|
-
"
|
|
5530
|
+
"name": "${{ item.name }}",
|
|
5531
|
+
"slug": "${{ item.slug }}",
|
|
5532
|
+
"id": "${{ item.id }}",
|
|
5533
|
+
"topics": "${{ item.topics }}",
|
|
5534
|
+
"description": "${{ item.description }}"
|
|
5100
5535
|
}
|
|
5101
5536
|
},
|
|
5102
5537
|
{
|
|
@@ -5107,83 +5542,116 @@
|
|
|
5107
5542
|
},
|
|
5108
5543
|
{
|
|
5109
5544
|
"site": "linux-do",
|
|
5110
|
-
"name": "
|
|
5111
|
-
"description": "linux.do
|
|
5545
|
+
"name": "category",
|
|
5546
|
+
"description": "linux.do 分类内话题",
|
|
5112
5547
|
"domain": "linux.do",
|
|
5113
5548
|
"strategy": "cookie",
|
|
5114
5549
|
"browser": true,
|
|
5115
5550
|
"args": [
|
|
5551
|
+
{
|
|
5552
|
+
"name": "slug",
|
|
5553
|
+
"type": "str",
|
|
5554
|
+
"required": true,
|
|
5555
|
+
"positional": true,
|
|
5556
|
+
"help": "Category slug (use 'categories' command to find)"
|
|
5557
|
+
},
|
|
5116
5558
|
{
|
|
5117
5559
|
"name": "id",
|
|
5118
5560
|
"type": "int",
|
|
5119
5561
|
"required": true,
|
|
5120
5562
|
"positional": true,
|
|
5121
|
-
"help": "
|
|
5563
|
+
"help": "Category ID (use 'categories' command to find)"
|
|
5564
|
+
},
|
|
5565
|
+
{
|
|
5566
|
+
"name": "limit",
|
|
5567
|
+
"type": "int",
|
|
5568
|
+
"default": 20,
|
|
5569
|
+
"required": false,
|
|
5570
|
+
"help": "Number of topics"
|
|
5122
5571
|
}
|
|
5123
5572
|
],
|
|
5124
5573
|
"columns": [
|
|
5125
|
-
"
|
|
5126
|
-
"
|
|
5127
|
-
"
|
|
5128
|
-
"
|
|
5574
|
+
"rank",
|
|
5575
|
+
"title",
|
|
5576
|
+
"replies",
|
|
5577
|
+
"views",
|
|
5578
|
+
"likes"
|
|
5129
5579
|
],
|
|
5130
5580
|
"pipeline": [
|
|
5131
5581
|
{
|
|
5132
5582
|
"navigate": "https://linux.do"
|
|
5133
5583
|
},
|
|
5134
5584
|
{
|
|
5135
|
-
"evaluate": "(async () => {\n const res = await fetch('/
|
|
5585
|
+
"evaluate": "(async () => {\n const slug = ${{ args.slug | json }};\n const res = await fetch('/c/' + encodeURIComponent(slug) + '/${{ args.id }}.json', { 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?.topic_list?.topics || [];\n return topics.slice(0, ${{ args.limit }}).map(t => ({\n title: t.title,\n replies: (t.posts_count || 1) - 1,\n views: t.views,\n likes: t.like_count,\n }));\n})()\n"
|
|
5136
5586
|
},
|
|
5137
5587
|
{
|
|
5138
5588
|
"map": {
|
|
5139
|
-
"
|
|
5140
|
-
"
|
|
5141
|
-
"
|
|
5142
|
-
"
|
|
5589
|
+
"rank": "${{ index + 1 }}",
|
|
5590
|
+
"title": "${{ item.title }}",
|
|
5591
|
+
"replies": "${{ item.replies }}",
|
|
5592
|
+
"views": "${{ item.views }}",
|
|
5593
|
+
"likes": "${{ item.likes }}"
|
|
5143
5594
|
}
|
|
5595
|
+
},
|
|
5596
|
+
{
|
|
5597
|
+
"limit": "${{ args.limit }}"
|
|
5144
5598
|
}
|
|
5145
5599
|
],
|
|
5146
5600
|
"type": "yaml"
|
|
5147
5601
|
},
|
|
5148
5602
|
{
|
|
5149
|
-
"site": "
|
|
5150
|
-
"name": "
|
|
5151
|
-
"description": "
|
|
5152
|
-
"domain": "
|
|
5153
|
-
"strategy": "
|
|
5154
|
-
"browser":
|
|
5603
|
+
"site": "linux-do",
|
|
5604
|
+
"name": "hot",
|
|
5605
|
+
"description": "linux.do 热门话题",
|
|
5606
|
+
"domain": "linux.do",
|
|
5607
|
+
"strategy": "cookie",
|
|
5608
|
+
"browser": true,
|
|
5155
5609
|
"args": [
|
|
5156
5610
|
{
|
|
5157
5611
|
"name": "limit",
|
|
5158
5612
|
"type": "int",
|
|
5159
5613
|
"default": 20,
|
|
5160
5614
|
"required": false,
|
|
5161
|
-
"help": "Number of
|
|
5615
|
+
"help": "Number of topics"
|
|
5616
|
+
},
|
|
5617
|
+
{
|
|
5618
|
+
"name": "period",
|
|
5619
|
+
"type": "str",
|
|
5620
|
+
"default": "weekly",
|
|
5621
|
+
"required": false,
|
|
5622
|
+
"help": "Time period",
|
|
5623
|
+
"choices": [
|
|
5624
|
+
"all",
|
|
5625
|
+
"daily",
|
|
5626
|
+
"weekly",
|
|
5627
|
+
"monthly",
|
|
5628
|
+
"yearly"
|
|
5629
|
+
]
|
|
5162
5630
|
}
|
|
5163
5631
|
],
|
|
5164
5632
|
"columns": [
|
|
5165
5633
|
"rank",
|
|
5166
5634
|
"title",
|
|
5167
|
-
"
|
|
5168
|
-
"
|
|
5169
|
-
"
|
|
5170
|
-
"
|
|
5635
|
+
"replies",
|
|
5636
|
+
"views",
|
|
5637
|
+
"likes",
|
|
5638
|
+
"category"
|
|
5171
5639
|
],
|
|
5172
5640
|
"pipeline": [
|
|
5173
5641
|
{
|
|
5174
|
-
"
|
|
5175
|
-
|
|
5176
|
-
|
|
5642
|
+
"navigate": "https://linux.do"
|
|
5643
|
+
},
|
|
5644
|
+
{
|
|
5645
|
+
"evaluate": "(async () => {\n const period = ${{ args.period | json }};\n const res = await fetch('/top.json?period=' + encodeURIComponent(period), { 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?.topic_list?.topics || [];\n const cats = data?.topic_list?.categories || data?.categories || [];\n const catMap = Object.fromEntries(cats.map(c => [c.id, c.name]));\n return topics.slice(0, ${{ args.limit }}).map(t => ({\n title: t.title,\n replies: (t.posts_count || 1) - 1,\n views: t.views,\n likes: t.like_count,\n category: catMap[t.category_id] || String(t.category_id),\n }));\n})()\n"
|
|
5177
5646
|
},
|
|
5178
5647
|
{
|
|
5179
5648
|
"map": {
|
|
5180
5649
|
"rank": "${{ index + 1 }}",
|
|
5181
5650
|
"title": "${{ item.title }}",
|
|
5182
|
-
"
|
|
5183
|
-
"
|
|
5184
|
-
"
|
|
5185
|
-
"
|
|
5186
|
-
"url": "${{ item.comments_url }}"
|
|
5651
|
+
"replies": "${{ item.replies }}",
|
|
5652
|
+
"views": "${{ item.views }}",
|
|
5653
|
+
"likes": "${{ item.likes }}",
|
|
5654
|
+
"category": "${{ item.category }}"
|
|
5187
5655
|
}
|
|
5188
5656
|
},
|
|
5189
5657
|
{
|
|
@@ -5193,27 +5661,211 @@
|
|
|
5193
5661
|
"type": "yaml"
|
|
5194
5662
|
},
|
|
5195
5663
|
{
|
|
5196
|
-
"site": "
|
|
5197
|
-
"name": "
|
|
5198
|
-
"description": "
|
|
5199
|
-
"domain": "
|
|
5200
|
-
"strategy": "
|
|
5201
|
-
"browser":
|
|
5664
|
+
"site": "linux-do",
|
|
5665
|
+
"name": "latest",
|
|
5666
|
+
"description": "linux.do 最新话题",
|
|
5667
|
+
"domain": "linux.do",
|
|
5668
|
+
"strategy": "cookie",
|
|
5669
|
+
"browser": true,
|
|
5202
5670
|
"args": [
|
|
5203
5671
|
{
|
|
5204
5672
|
"name": "limit",
|
|
5205
5673
|
"type": "int",
|
|
5206
5674
|
"default": 20,
|
|
5207
5675
|
"required": false,
|
|
5208
|
-
"help": "Number of
|
|
5676
|
+
"help": "Number of topics"
|
|
5209
5677
|
}
|
|
5210
5678
|
],
|
|
5211
5679
|
"columns": [
|
|
5212
5680
|
"rank",
|
|
5213
5681
|
"title",
|
|
5214
|
-
"
|
|
5215
|
-
"
|
|
5216
|
-
"
|
|
5682
|
+
"replies",
|
|
5683
|
+
"views",
|
|
5684
|
+
"likes"
|
|
5685
|
+
],
|
|
5686
|
+
"pipeline": [
|
|
5687
|
+
{
|
|
5688
|
+
"navigate": "https://linux.do"
|
|
5689
|
+
},
|
|
5690
|
+
{
|
|
5691
|
+
"evaluate": "(async () => {\n const res = await fetch('/latest.json', { 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?.topic_list?.topics || [];\n return topics.slice(0, ${{ args.limit }}).map(t => ({\n title: t.title,\n replies: (t.posts_count || 1) - 1,\n views: t.views,\n likes: t.like_count,\n }));\n})()\n"
|
|
5692
|
+
},
|
|
5693
|
+
{
|
|
5694
|
+
"map": {
|
|
5695
|
+
"rank": "${{ index + 1 }}",
|
|
5696
|
+
"title": "${{ item.title }}",
|
|
5697
|
+
"replies": "${{ item.replies }}",
|
|
5698
|
+
"views": "${{ item.views }}",
|
|
5699
|
+
"likes": "${{ item.likes }}"
|
|
5700
|
+
}
|
|
5701
|
+
},
|
|
5702
|
+
{
|
|
5703
|
+
"limit": "${{ args.limit }}"
|
|
5704
|
+
}
|
|
5705
|
+
],
|
|
5706
|
+
"type": "yaml"
|
|
5707
|
+
},
|
|
5708
|
+
{
|
|
5709
|
+
"site": "linux-do",
|
|
5710
|
+
"name": "search",
|
|
5711
|
+
"description": "搜索 linux.do",
|
|
5712
|
+
"domain": "linux.do",
|
|
5713
|
+
"strategy": "cookie",
|
|
5714
|
+
"browser": true,
|
|
5715
|
+
"args": [
|
|
5716
|
+
{
|
|
5717
|
+
"name": "query",
|
|
5718
|
+
"type": "str",
|
|
5719
|
+
"required": true,
|
|
5720
|
+
"positional": true,
|
|
5721
|
+
"help": "Search query"
|
|
5722
|
+
},
|
|
5723
|
+
{
|
|
5724
|
+
"name": "limit",
|
|
5725
|
+
"type": "int",
|
|
5726
|
+
"default": 20,
|
|
5727
|
+
"required": false,
|
|
5728
|
+
"help": "Number of results"
|
|
5729
|
+
}
|
|
5730
|
+
],
|
|
5731
|
+
"columns": [
|
|
5732
|
+
"rank",
|
|
5733
|
+
"title",
|
|
5734
|
+
"views",
|
|
5735
|
+
"likes",
|
|
5736
|
+
"replies"
|
|
5737
|
+
],
|
|
5738
|
+
"pipeline": [
|
|
5739
|
+
{
|
|
5740
|
+
"navigate": "https://linux.do"
|
|
5741
|
+
},
|
|
5742
|
+
{
|
|
5743
|
+
"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"
|
|
5744
|
+
},
|
|
5745
|
+
{
|
|
5746
|
+
"map": {
|
|
5747
|
+
"rank": "${{ index + 1 }}",
|
|
5748
|
+
"title": "${{ item.title }}",
|
|
5749
|
+
"views": "${{ item.views }}",
|
|
5750
|
+
"likes": "${{ item.likes }}",
|
|
5751
|
+
"replies": "${{ item.replies }}"
|
|
5752
|
+
}
|
|
5753
|
+
},
|
|
5754
|
+
{
|
|
5755
|
+
"limit": "${{ args.limit }}"
|
|
5756
|
+
}
|
|
5757
|
+
],
|
|
5758
|
+
"type": "yaml"
|
|
5759
|
+
},
|
|
5760
|
+
{
|
|
5761
|
+
"site": "linux-do",
|
|
5762
|
+
"name": "topic",
|
|
5763
|
+
"description": "linux.do 帖子详情和回复(首页)",
|
|
5764
|
+
"domain": "linux.do",
|
|
5765
|
+
"strategy": "cookie",
|
|
5766
|
+
"browser": true,
|
|
5767
|
+
"args": [
|
|
5768
|
+
{
|
|
5769
|
+
"name": "id",
|
|
5770
|
+
"type": "int",
|
|
5771
|
+
"required": true,
|
|
5772
|
+
"positional": true,
|
|
5773
|
+
"help": "Topic ID"
|
|
5774
|
+
}
|
|
5775
|
+
],
|
|
5776
|
+
"columns": [
|
|
5777
|
+
"author",
|
|
5778
|
+
"content",
|
|
5779
|
+
"likes",
|
|
5780
|
+
"created_at"
|
|
5781
|
+
],
|
|
5782
|
+
"pipeline": [
|
|
5783
|
+
{
|
|
5784
|
+
"navigate": "https://linux.do"
|
|
5785
|
+
},
|
|
5786
|
+
{
|
|
5787
|
+
"evaluate": "(async () => {\n const res = await fetch('/t/${{ args.id }}.json', { 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 strip = (html) => (html || '').replace(/<br\\s*\\/?>/gi, ' ').replace(/<\\/(p|div|li|blockquote|h[1-6])>/gi, ' ').replace(/<[^>]+>/g, '').replace(/ /g, ' ').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').replace(/&#(?:(\\d+)|x([0-9a-fA-F]+));/g, (_, dec, hex) => { try { return String.fromCodePoint(dec !== undefined ? Number(dec) : parseInt(hex, 16)); } catch { return ''; } }).replace(/\\s+/g, ' ').trim();\n const posts = data?.post_stream?.posts || [];\n return posts.map(p => ({\n author: p.username,\n content: strip(p.cooked).slice(0, 200),\n likes: p.like_count,\n created_at: p.created_at,\n }));\n})()\n"
|
|
5788
|
+
},
|
|
5789
|
+
{
|
|
5790
|
+
"map": {
|
|
5791
|
+
"author": "${{ item.author }}",
|
|
5792
|
+
"content": "${{ item.content }}",
|
|
5793
|
+
"likes": "${{ item.likes }}",
|
|
5794
|
+
"created_at": "${{ item.created_at }}"
|
|
5795
|
+
}
|
|
5796
|
+
}
|
|
5797
|
+
],
|
|
5798
|
+
"type": "yaml"
|
|
5799
|
+
},
|
|
5800
|
+
{
|
|
5801
|
+
"site": "lobsters",
|
|
5802
|
+
"name": "active",
|
|
5803
|
+
"description": "Lobste.rs most active discussions",
|
|
5804
|
+
"domain": "lobste.rs",
|
|
5805
|
+
"strategy": "public",
|
|
5806
|
+
"browser": false,
|
|
5807
|
+
"args": [
|
|
5808
|
+
{
|
|
5809
|
+
"name": "limit",
|
|
5810
|
+
"type": "int",
|
|
5811
|
+
"default": 20,
|
|
5812
|
+
"required": false,
|
|
5813
|
+
"help": "Number of stories"
|
|
5814
|
+
}
|
|
5815
|
+
],
|
|
5816
|
+
"columns": [
|
|
5817
|
+
"rank",
|
|
5818
|
+
"title",
|
|
5819
|
+
"score",
|
|
5820
|
+
"author",
|
|
5821
|
+
"comments",
|
|
5822
|
+
"tags"
|
|
5823
|
+
],
|
|
5824
|
+
"pipeline": [
|
|
5825
|
+
{
|
|
5826
|
+
"fetch": {
|
|
5827
|
+
"url": "https://lobste.rs/active.json"
|
|
5828
|
+
}
|
|
5829
|
+
},
|
|
5830
|
+
{
|
|
5831
|
+
"map": {
|
|
5832
|
+
"rank": "${{ index + 1 }}",
|
|
5833
|
+
"title": "${{ item.title }}",
|
|
5834
|
+
"score": "${{ item.score }}",
|
|
5835
|
+
"author": "${{ item.submitter_user }}",
|
|
5836
|
+
"comments": "${{ item.comment_count }}",
|
|
5837
|
+
"tags": "${{ item.tags | join(', ') }}",
|
|
5838
|
+
"url": "${{ item.comments_url }}"
|
|
5839
|
+
}
|
|
5840
|
+
},
|
|
5841
|
+
{
|
|
5842
|
+
"limit": "${{ args.limit }}"
|
|
5843
|
+
}
|
|
5844
|
+
],
|
|
5845
|
+
"type": "yaml"
|
|
5846
|
+
},
|
|
5847
|
+
{
|
|
5848
|
+
"site": "lobsters",
|
|
5849
|
+
"name": "hot",
|
|
5850
|
+
"description": "Lobste.rs hottest stories",
|
|
5851
|
+
"domain": "lobste.rs",
|
|
5852
|
+
"strategy": "public",
|
|
5853
|
+
"browser": false,
|
|
5854
|
+
"args": [
|
|
5855
|
+
{
|
|
5856
|
+
"name": "limit",
|
|
5857
|
+
"type": "int",
|
|
5858
|
+
"default": 20,
|
|
5859
|
+
"required": false,
|
|
5860
|
+
"help": "Number of stories"
|
|
5861
|
+
}
|
|
5862
|
+
],
|
|
5863
|
+
"columns": [
|
|
5864
|
+
"rank",
|
|
5865
|
+
"title",
|
|
5866
|
+
"score",
|
|
5867
|
+
"author",
|
|
5868
|
+
"comments",
|
|
5217
5869
|
"tags"
|
|
5218
5870
|
],
|
|
5219
5871
|
"pipeline": [
|
|
@@ -8169,46 +8821,77 @@
|
|
|
8169
8821
|
},
|
|
8170
8822
|
{
|
|
8171
8823
|
"site": "v2ex",
|
|
8172
|
-
"name": "
|
|
8173
|
-
"description": "V2EX
|
|
8174
|
-
"
|
|
8175
|
-
"
|
|
8824
|
+
"name": "member",
|
|
8825
|
+
"description": "V2EX 用户资料",
|
|
8826
|
+
"domain": "www.v2ex.com",
|
|
8827
|
+
"strategy": "public",
|
|
8828
|
+
"browser": false,
|
|
8176
8829
|
"args": [
|
|
8177
8830
|
{
|
|
8178
|
-
"name": "
|
|
8179
|
-
"type": "
|
|
8180
|
-
"
|
|
8181
|
-
"
|
|
8182
|
-
"help": "
|
|
8831
|
+
"name": "username",
|
|
8832
|
+
"type": "str",
|
|
8833
|
+
"required": true,
|
|
8834
|
+
"positional": true,
|
|
8835
|
+
"help": "Username"
|
|
8183
8836
|
}
|
|
8184
8837
|
],
|
|
8185
|
-
"type": "ts",
|
|
8186
|
-
"modulePath": "v2ex/notifications.js",
|
|
8187
|
-
"domain": "www.v2ex.com",
|
|
8188
8838
|
"columns": [
|
|
8189
|
-
"
|
|
8190
|
-
"
|
|
8191
|
-
"
|
|
8192
|
-
|
|
8839
|
+
"username",
|
|
8840
|
+
"tagline",
|
|
8841
|
+
"website",
|
|
8842
|
+
"github",
|
|
8843
|
+
"twitter",
|
|
8844
|
+
"location"
|
|
8845
|
+
],
|
|
8846
|
+
"pipeline": [
|
|
8847
|
+
{
|
|
8848
|
+
"fetch": {
|
|
8849
|
+
"url": "https://www.v2ex.com/api/members/show.json",
|
|
8850
|
+
"params": {
|
|
8851
|
+
"username": "${{ args.username }}"
|
|
8852
|
+
}
|
|
8853
|
+
}
|
|
8854
|
+
},
|
|
8855
|
+
{
|
|
8856
|
+
"map": {
|
|
8857
|
+
"username": "${{ item.username }}",
|
|
8858
|
+
"tagline": "${{ item.tagline }}",
|
|
8859
|
+
"website": "${{ item.website }}",
|
|
8860
|
+
"github": "${{ item.github }}",
|
|
8861
|
+
"twitter": "${{ item.twitter }}",
|
|
8862
|
+
"location": "${{ item.location }}"
|
|
8863
|
+
}
|
|
8864
|
+
}
|
|
8865
|
+
],
|
|
8866
|
+
"type": "yaml"
|
|
8193
8867
|
},
|
|
8194
8868
|
{
|
|
8195
8869
|
"site": "v2ex",
|
|
8196
|
-
"name": "
|
|
8197
|
-
"description": "V2EX
|
|
8870
|
+
"name": "node",
|
|
8871
|
+
"description": "V2EX 节点话题列表",
|
|
8198
8872
|
"domain": "www.v2ex.com",
|
|
8199
8873
|
"strategy": "public",
|
|
8200
8874
|
"browser": false,
|
|
8201
8875
|
"args": [
|
|
8202
8876
|
{
|
|
8203
|
-
"name": "
|
|
8877
|
+
"name": "name",
|
|
8204
8878
|
"type": "str",
|
|
8205
8879
|
"required": true,
|
|
8206
8880
|
"positional": true,
|
|
8207
|
-
"help": "
|
|
8881
|
+
"help": "Node name (e.g. python, javascript, apple)"
|
|
8882
|
+
},
|
|
8883
|
+
{
|
|
8884
|
+
"name": "limit",
|
|
8885
|
+
"type": "int",
|
|
8886
|
+
"default": 10,
|
|
8887
|
+
"required": false,
|
|
8888
|
+
"help": "Number of topics (API returns max 20)"
|
|
8208
8889
|
}
|
|
8209
8890
|
],
|
|
8210
8891
|
"columns": [
|
|
8892
|
+
"rank",
|
|
8211
8893
|
"title",
|
|
8894
|
+
"author",
|
|
8212
8895
|
"replies",
|
|
8213
8896
|
"url"
|
|
8214
8897
|
],
|
|
@@ -8217,201 +8900,282 @@
|
|
|
8217
8900
|
"fetch": {
|
|
8218
8901
|
"url": "https://www.v2ex.com/api/topics/show.json",
|
|
8219
8902
|
"params": {
|
|
8220
|
-
"
|
|
8903
|
+
"node_name": "${{ args.name }}"
|
|
8221
8904
|
}
|
|
8222
8905
|
}
|
|
8223
8906
|
},
|
|
8224
8907
|
{
|
|
8225
8908
|
"map": {
|
|
8909
|
+
"rank": "${{ index + 1 }}",
|
|
8226
8910
|
"title": "${{ item.title }}",
|
|
8911
|
+
"author": "${{ item.member.username }}",
|
|
8227
8912
|
"replies": "${{ item.replies }}",
|
|
8228
8913
|
"url": "${{ item.url }}"
|
|
8229
8914
|
}
|
|
8230
8915
|
},
|
|
8231
8916
|
{
|
|
8232
|
-
"limit":
|
|
8917
|
+
"limit": "${{ args.limit }}"
|
|
8233
8918
|
}
|
|
8234
8919
|
],
|
|
8235
8920
|
"type": "yaml"
|
|
8236
8921
|
},
|
|
8237
8922
|
{
|
|
8238
|
-
"site": "
|
|
8239
|
-
"name": "
|
|
8240
|
-
"description": "
|
|
8241
|
-
"
|
|
8242
|
-
"
|
|
8923
|
+
"site": "v2ex",
|
|
8924
|
+
"name": "nodes",
|
|
8925
|
+
"description": "V2EX 所有节点列表",
|
|
8926
|
+
"domain": "www.v2ex.com",
|
|
8927
|
+
"strategy": "public",
|
|
8928
|
+
"browser": false,
|
|
8243
8929
|
"args": [
|
|
8244
8930
|
{
|
|
8245
8931
|
"name": "limit",
|
|
8246
8932
|
"type": "int",
|
|
8247
8933
|
"default": 30,
|
|
8248
8934
|
"required": false,
|
|
8249
|
-
"help": "Number of
|
|
8935
|
+
"help": "Number of nodes"
|
|
8250
8936
|
}
|
|
8251
8937
|
],
|
|
8252
|
-
"type": "ts",
|
|
8253
|
-
"modulePath": "weibo/hot.js",
|
|
8254
|
-
"domain": "weibo.com",
|
|
8255
8938
|
"columns": [
|
|
8256
8939
|
"rank",
|
|
8257
|
-
"
|
|
8258
|
-
"
|
|
8259
|
-
"
|
|
8260
|
-
"
|
|
8261
|
-
|
|
8262
|
-
|
|
8940
|
+
"name",
|
|
8941
|
+
"title",
|
|
8942
|
+
"topics",
|
|
8943
|
+
"stars"
|
|
8944
|
+
],
|
|
8945
|
+
"pipeline": [
|
|
8946
|
+
{
|
|
8947
|
+
"fetch": {
|
|
8948
|
+
"url": "https://www.v2ex.com/api/nodes/all.json"
|
|
8949
|
+
}
|
|
8950
|
+
},
|
|
8951
|
+
{
|
|
8952
|
+
"sort": {
|
|
8953
|
+
"by": "topics",
|
|
8954
|
+
"order": "desc"
|
|
8955
|
+
}
|
|
8956
|
+
},
|
|
8957
|
+
{
|
|
8958
|
+
"map": {
|
|
8959
|
+
"rank": "${{ index + 1 }}",
|
|
8960
|
+
"name": "${{ item.name }}",
|
|
8961
|
+
"title": "${{ item.title }}",
|
|
8962
|
+
"topics": "${{ item.topics }}",
|
|
8963
|
+
"stars": "${{ item.stars }}"
|
|
8964
|
+
}
|
|
8965
|
+
},
|
|
8966
|
+
{
|
|
8967
|
+
"limit": "${{ args.limit }}"
|
|
8968
|
+
}
|
|
8969
|
+
],
|
|
8970
|
+
"type": "yaml"
|
|
8263
8971
|
},
|
|
8264
8972
|
{
|
|
8265
|
-
"site": "
|
|
8266
|
-
"name": "
|
|
8267
|
-
"description": "
|
|
8973
|
+
"site": "v2ex",
|
|
8974
|
+
"name": "notifications",
|
|
8975
|
+
"description": "V2EX 获取提醒 (回复/由于)",
|
|
8268
8976
|
"strategy": "cookie",
|
|
8269
8977
|
"browser": true,
|
|
8270
8978
|
"args": [
|
|
8271
8979
|
{
|
|
8272
|
-
"name": "
|
|
8273
|
-
"type": "
|
|
8274
|
-
"
|
|
8275
|
-
"
|
|
8276
|
-
"help": "
|
|
8980
|
+
"name": "limit",
|
|
8981
|
+
"type": "int",
|
|
8982
|
+
"default": 20,
|
|
8983
|
+
"required": false,
|
|
8984
|
+
"help": "Number of notifications"
|
|
8277
8985
|
}
|
|
8278
8986
|
],
|
|
8279
8987
|
"type": "ts",
|
|
8280
|
-
"modulePath": "
|
|
8281
|
-
"domain": "
|
|
8988
|
+
"modulePath": "v2ex/notifications.js",
|
|
8989
|
+
"domain": "www.v2ex.com",
|
|
8282
8990
|
"columns": [
|
|
8283
|
-
"
|
|
8284
|
-
"
|
|
8285
|
-
"
|
|
8286
|
-
"intro",
|
|
8287
|
-
"category",
|
|
8288
|
-
"rating"
|
|
8991
|
+
"type",
|
|
8992
|
+
"content",
|
|
8993
|
+
"time"
|
|
8289
8994
|
]
|
|
8290
8995
|
},
|
|
8291
8996
|
{
|
|
8292
|
-
"site": "
|
|
8293
|
-
"name": "
|
|
8294
|
-
"description": "
|
|
8295
|
-
"
|
|
8296
|
-
"
|
|
8997
|
+
"site": "v2ex",
|
|
8998
|
+
"name": "replies",
|
|
8999
|
+
"description": "V2EX 主题回复列表",
|
|
9000
|
+
"domain": "www.v2ex.com",
|
|
9001
|
+
"strategy": "public",
|
|
9002
|
+
"browser": false,
|
|
8297
9003
|
"args": [
|
|
8298
9004
|
{
|
|
8299
|
-
"name": "
|
|
9005
|
+
"name": "id",
|
|
8300
9006
|
"type": "str",
|
|
8301
9007
|
"required": true,
|
|
8302
9008
|
"positional": true,
|
|
8303
|
-
"help": "
|
|
9009
|
+
"help": "Topic ID"
|
|
8304
9010
|
},
|
|
8305
9011
|
{
|
|
8306
9012
|
"name": "limit",
|
|
8307
9013
|
"type": "int",
|
|
8308
9014
|
"default": 20,
|
|
8309
9015
|
"required": false,
|
|
8310
|
-
"help": "
|
|
9016
|
+
"help": "Number of replies"
|
|
8311
9017
|
}
|
|
8312
9018
|
],
|
|
8313
|
-
"type": "ts",
|
|
8314
|
-
"modulePath": "weread/highlights.js",
|
|
8315
|
-
"domain": "weread.qq.com",
|
|
8316
9019
|
"columns": [
|
|
8317
|
-
"
|
|
8318
|
-
"
|
|
8319
|
-
"
|
|
8320
|
-
]
|
|
9020
|
+
"floor",
|
|
9021
|
+
"author",
|
|
9022
|
+
"content"
|
|
9023
|
+
],
|
|
9024
|
+
"pipeline": [
|
|
9025
|
+
{
|
|
9026
|
+
"fetch": {
|
|
9027
|
+
"url": "https://www.v2ex.com/api/replies/show.json",
|
|
9028
|
+
"params": {
|
|
9029
|
+
"topic_id": "${{ args.id }}"
|
|
9030
|
+
}
|
|
9031
|
+
}
|
|
9032
|
+
},
|
|
9033
|
+
{
|
|
9034
|
+
"map": {
|
|
9035
|
+
"floor": "${{ index + 1 }}",
|
|
9036
|
+
"author": "${{ item.member.username }}",
|
|
9037
|
+
"content": "${{ item.content }}"
|
|
9038
|
+
}
|
|
9039
|
+
},
|
|
9040
|
+
{
|
|
9041
|
+
"limit": "${{ args.limit }}"
|
|
9042
|
+
}
|
|
9043
|
+
],
|
|
9044
|
+
"type": "yaml"
|
|
8321
9045
|
},
|
|
8322
9046
|
{
|
|
8323
|
-
"site": "
|
|
8324
|
-
"name": "
|
|
8325
|
-
"description": "
|
|
8326
|
-
"
|
|
8327
|
-
"
|
|
8328
|
-
"
|
|
8329
|
-
"
|
|
8330
|
-
|
|
8331
|
-
|
|
9047
|
+
"site": "v2ex",
|
|
9048
|
+
"name": "topic",
|
|
9049
|
+
"description": "V2EX 主题详情和回复",
|
|
9050
|
+
"domain": "www.v2ex.com",
|
|
9051
|
+
"strategy": "public",
|
|
9052
|
+
"browser": false,
|
|
9053
|
+
"args": [
|
|
9054
|
+
{
|
|
9055
|
+
"name": "id",
|
|
9056
|
+
"type": "str",
|
|
9057
|
+
"required": true,
|
|
9058
|
+
"positional": true,
|
|
9059
|
+
"help": "Topic ID"
|
|
9060
|
+
}
|
|
9061
|
+
],
|
|
8332
9062
|
"columns": [
|
|
8333
9063
|
"title",
|
|
8334
|
-
"
|
|
8335
|
-
"
|
|
8336
|
-
|
|
8337
|
-
|
|
9064
|
+
"replies",
|
|
9065
|
+
"url"
|
|
9066
|
+
],
|
|
9067
|
+
"pipeline": [
|
|
9068
|
+
{
|
|
9069
|
+
"fetch": {
|
|
9070
|
+
"url": "https://www.v2ex.com/api/topics/show.json",
|
|
9071
|
+
"params": {
|
|
9072
|
+
"id": "${{ args.id }}"
|
|
9073
|
+
}
|
|
9074
|
+
}
|
|
9075
|
+
},
|
|
9076
|
+
{
|
|
9077
|
+
"map": {
|
|
9078
|
+
"title": "${{ item.title }}",
|
|
9079
|
+
"replies": "${{ item.replies }}",
|
|
9080
|
+
"url": "${{ item.url }}"
|
|
9081
|
+
}
|
|
9082
|
+
},
|
|
9083
|
+
{
|
|
9084
|
+
"limit": 1
|
|
9085
|
+
}
|
|
9086
|
+
],
|
|
9087
|
+
"type": "yaml"
|
|
8338
9088
|
},
|
|
8339
9089
|
{
|
|
8340
|
-
"site": "
|
|
8341
|
-
"name": "
|
|
8342
|
-
"description": "
|
|
8343
|
-
"
|
|
8344
|
-
"
|
|
9090
|
+
"site": "v2ex",
|
|
9091
|
+
"name": "user",
|
|
9092
|
+
"description": "V2EX 用户发帖列表",
|
|
9093
|
+
"domain": "www.v2ex.com",
|
|
9094
|
+
"strategy": "public",
|
|
9095
|
+
"browser": false,
|
|
8345
9096
|
"args": [
|
|
8346
9097
|
{
|
|
8347
|
-
"name": "
|
|
9098
|
+
"name": "username",
|
|
8348
9099
|
"type": "str",
|
|
8349
9100
|
"required": true,
|
|
8350
9101
|
"positional": true,
|
|
8351
|
-
"help": "
|
|
9102
|
+
"help": "Username"
|
|
8352
9103
|
},
|
|
8353
9104
|
{
|
|
8354
9105
|
"name": "limit",
|
|
8355
9106
|
"type": "int",
|
|
8356
|
-
"default":
|
|
9107
|
+
"default": 10,
|
|
8357
9108
|
"required": false,
|
|
8358
|
-
"help": "
|
|
9109
|
+
"help": "Number of topics (API returns max 20)"
|
|
8359
9110
|
}
|
|
8360
9111
|
],
|
|
8361
|
-
"type": "ts",
|
|
8362
|
-
"modulePath": "weread/notes.js",
|
|
8363
|
-
"domain": "weread.qq.com",
|
|
8364
9112
|
"columns": [
|
|
8365
|
-
"
|
|
8366
|
-
"
|
|
8367
|
-
"
|
|
8368
|
-
"
|
|
8369
|
-
|
|
9113
|
+
"rank",
|
|
9114
|
+
"title",
|
|
9115
|
+
"node",
|
|
9116
|
+
"replies",
|
|
9117
|
+
"url"
|
|
9118
|
+
],
|
|
9119
|
+
"pipeline": [
|
|
9120
|
+
{
|
|
9121
|
+
"fetch": {
|
|
9122
|
+
"url": "https://www.v2ex.com/api/topics/show.json",
|
|
9123
|
+
"params": {
|
|
9124
|
+
"username": "${{ args.username }}"
|
|
9125
|
+
}
|
|
9126
|
+
}
|
|
9127
|
+
},
|
|
9128
|
+
{
|
|
9129
|
+
"map": {
|
|
9130
|
+
"rank": "${{ index + 1 }}",
|
|
9131
|
+
"title": "${{ item.title }}",
|
|
9132
|
+
"node": "${{ item.node.title }}",
|
|
9133
|
+
"replies": "${{ item.replies }}",
|
|
9134
|
+
"url": "${{ item.url }}"
|
|
9135
|
+
}
|
|
9136
|
+
},
|
|
9137
|
+
{
|
|
9138
|
+
"limit": "${{ args.limit }}"
|
|
9139
|
+
}
|
|
9140
|
+
],
|
|
9141
|
+
"type": "yaml"
|
|
8370
9142
|
},
|
|
8371
9143
|
{
|
|
8372
|
-
"site": "
|
|
8373
|
-
"name": "
|
|
8374
|
-
"description": "
|
|
8375
|
-
"strategy": "
|
|
8376
|
-
"browser":
|
|
9144
|
+
"site": "weibo",
|
|
9145
|
+
"name": "hot",
|
|
9146
|
+
"description": "微博热搜",
|
|
9147
|
+
"strategy": "cookie",
|
|
9148
|
+
"browser": true,
|
|
8377
9149
|
"args": [
|
|
8378
|
-
{
|
|
8379
|
-
"name": "category",
|
|
8380
|
-
"type": "str",
|
|
8381
|
-
"default": "all",
|
|
8382
|
-
"required": false,
|
|
8383
|
-
"positional": true,
|
|
8384
|
-
"help": "Category: all (default), rising, or numeric category ID"
|
|
8385
|
-
},
|
|
8386
9150
|
{
|
|
8387
9151
|
"name": "limit",
|
|
8388
9152
|
"type": "int",
|
|
8389
|
-
"default":
|
|
9153
|
+
"default": 30,
|
|
8390
9154
|
"required": false,
|
|
8391
|
-
"help": "
|
|
9155
|
+
"help": "Number of items (max 50)"
|
|
8392
9156
|
}
|
|
8393
9157
|
],
|
|
8394
9158
|
"type": "ts",
|
|
8395
|
-
"modulePath": "
|
|
8396
|
-
"domain": "
|
|
9159
|
+
"modulePath": "weibo/hot.js",
|
|
9160
|
+
"domain": "weibo.com",
|
|
8397
9161
|
"columns": [
|
|
8398
9162
|
"rank",
|
|
8399
|
-
"
|
|
8400
|
-
"
|
|
9163
|
+
"word",
|
|
9164
|
+
"hot_value",
|
|
8401
9165
|
"category",
|
|
8402
|
-
"
|
|
8403
|
-
"
|
|
9166
|
+
"label",
|
|
9167
|
+
"url"
|
|
8404
9168
|
]
|
|
8405
9169
|
},
|
|
8406
9170
|
{
|
|
8407
|
-
"site": "
|
|
9171
|
+
"site": "weibo",
|
|
8408
9172
|
"name": "search",
|
|
8409
|
-
"description": "
|
|
8410
|
-
"strategy": "
|
|
8411
|
-
"browser":
|
|
9173
|
+
"description": "搜索微博",
|
|
9174
|
+
"strategy": "cookie",
|
|
9175
|
+
"browser": true,
|
|
8412
9176
|
"args": [
|
|
8413
9177
|
{
|
|
8414
|
-
"name": "
|
|
9178
|
+
"name": "keyword",
|
|
8415
9179
|
"type": "str",
|
|
8416
9180
|
"required": true,
|
|
8417
9181
|
"positional": true,
|
|
@@ -8422,28 +9186,242 @@
|
|
|
8422
9186
|
"type": "int",
|
|
8423
9187
|
"default": 10,
|
|
8424
9188
|
"required": false,
|
|
8425
|
-
"help": "
|
|
9189
|
+
"help": "Number of results (max 50)"
|
|
8426
9190
|
}
|
|
8427
9191
|
],
|
|
8428
9192
|
"type": "ts",
|
|
8429
|
-
"modulePath": "
|
|
8430
|
-
"domain": "
|
|
9193
|
+
"modulePath": "weibo/search.js",
|
|
9194
|
+
"domain": "weibo.com",
|
|
8431
9195
|
"columns": [
|
|
8432
9196
|
"rank",
|
|
8433
9197
|
"title",
|
|
8434
9198
|
"author",
|
|
8435
|
-
"
|
|
9199
|
+
"time",
|
|
9200
|
+
"url"
|
|
8436
9201
|
]
|
|
8437
9202
|
},
|
|
8438
9203
|
{
|
|
8439
|
-
"site": "
|
|
8440
|
-
"name": "
|
|
8441
|
-
"description": "
|
|
9204
|
+
"site": "weixin",
|
|
9205
|
+
"name": "download",
|
|
9206
|
+
"description": "下载微信公众号文章为 Markdown 格式",
|
|
8442
9207
|
"strategy": "cookie",
|
|
8443
9208
|
"browser": true,
|
|
8444
9209
|
"args": [
|
|
8445
9210
|
{
|
|
8446
|
-
"name": "
|
|
9211
|
+
"name": "url",
|
|
9212
|
+
"type": "str",
|
|
9213
|
+
"required": true,
|
|
9214
|
+
"help": "WeChat article URL (mp.weixin.qq.com/s/xxx)"
|
|
9215
|
+
},
|
|
9216
|
+
{
|
|
9217
|
+
"name": "output",
|
|
9218
|
+
"type": "str",
|
|
9219
|
+
"default": "./weixin-articles",
|
|
9220
|
+
"required": false,
|
|
9221
|
+
"help": "Output directory"
|
|
9222
|
+
},
|
|
9223
|
+
{
|
|
9224
|
+
"name": "download-images",
|
|
9225
|
+
"type": "boolean",
|
|
9226
|
+
"default": true,
|
|
9227
|
+
"required": false,
|
|
9228
|
+
"help": "Download images locally"
|
|
9229
|
+
}
|
|
9230
|
+
],
|
|
9231
|
+
"type": "ts",
|
|
9232
|
+
"modulePath": "weixin/download.js",
|
|
9233
|
+
"domain": "mp.weixin.qq.com",
|
|
9234
|
+
"columns": [
|
|
9235
|
+
"title",
|
|
9236
|
+
"author",
|
|
9237
|
+
"publish_time",
|
|
9238
|
+
"status",
|
|
9239
|
+
"size"
|
|
9240
|
+
]
|
|
9241
|
+
},
|
|
9242
|
+
{
|
|
9243
|
+
"site": "weread",
|
|
9244
|
+
"name": "book",
|
|
9245
|
+
"description": "View book details on WeRead",
|
|
9246
|
+
"strategy": "cookie",
|
|
9247
|
+
"browser": true,
|
|
9248
|
+
"args": [
|
|
9249
|
+
{
|
|
9250
|
+
"name": "book-id",
|
|
9251
|
+
"type": "str",
|
|
9252
|
+
"required": true,
|
|
9253
|
+
"positional": true,
|
|
9254
|
+
"help": "Book ID (numeric, from search or shelf results)"
|
|
9255
|
+
}
|
|
9256
|
+
],
|
|
9257
|
+
"type": "ts",
|
|
9258
|
+
"modulePath": "weread/book.js",
|
|
9259
|
+
"domain": "weread.qq.com",
|
|
9260
|
+
"columns": [
|
|
9261
|
+
"title",
|
|
9262
|
+
"author",
|
|
9263
|
+
"publisher",
|
|
9264
|
+
"intro",
|
|
9265
|
+
"category",
|
|
9266
|
+
"rating"
|
|
9267
|
+
]
|
|
9268
|
+
},
|
|
9269
|
+
{
|
|
9270
|
+
"site": "weread",
|
|
9271
|
+
"name": "highlights",
|
|
9272
|
+
"description": "List your highlights (underlines) in a book",
|
|
9273
|
+
"strategy": "cookie",
|
|
9274
|
+
"browser": true,
|
|
9275
|
+
"args": [
|
|
9276
|
+
{
|
|
9277
|
+
"name": "book-id",
|
|
9278
|
+
"type": "str",
|
|
9279
|
+
"required": true,
|
|
9280
|
+
"positional": true,
|
|
9281
|
+
"help": "Book ID (from shelf or search results)"
|
|
9282
|
+
},
|
|
9283
|
+
{
|
|
9284
|
+
"name": "limit",
|
|
9285
|
+
"type": "int",
|
|
9286
|
+
"default": 20,
|
|
9287
|
+
"required": false,
|
|
9288
|
+
"help": "Max results"
|
|
9289
|
+
}
|
|
9290
|
+
],
|
|
9291
|
+
"type": "ts",
|
|
9292
|
+
"modulePath": "weread/highlights.js",
|
|
9293
|
+
"domain": "weread.qq.com",
|
|
9294
|
+
"columns": [
|
|
9295
|
+
"chapter",
|
|
9296
|
+
"text",
|
|
9297
|
+
"createTime"
|
|
9298
|
+
]
|
|
9299
|
+
},
|
|
9300
|
+
{
|
|
9301
|
+
"site": "weread",
|
|
9302
|
+
"name": "notebooks",
|
|
9303
|
+
"description": "List books that have highlights or notes",
|
|
9304
|
+
"strategy": "cookie",
|
|
9305
|
+
"browser": true,
|
|
9306
|
+
"args": [],
|
|
9307
|
+
"type": "ts",
|
|
9308
|
+
"modulePath": "weread/notebooks.js",
|
|
9309
|
+
"domain": "weread.qq.com",
|
|
9310
|
+
"columns": [
|
|
9311
|
+
"title",
|
|
9312
|
+
"author",
|
|
9313
|
+
"noteCount",
|
|
9314
|
+
"bookId"
|
|
9315
|
+
]
|
|
9316
|
+
},
|
|
9317
|
+
{
|
|
9318
|
+
"site": "weread",
|
|
9319
|
+
"name": "notes",
|
|
9320
|
+
"description": "List your notes (thoughts) on a book",
|
|
9321
|
+
"strategy": "cookie",
|
|
9322
|
+
"browser": true,
|
|
9323
|
+
"args": [
|
|
9324
|
+
{
|
|
9325
|
+
"name": "book-id",
|
|
9326
|
+
"type": "str",
|
|
9327
|
+
"required": true,
|
|
9328
|
+
"positional": true,
|
|
9329
|
+
"help": "Book ID (from shelf or search results)"
|
|
9330
|
+
},
|
|
9331
|
+
{
|
|
9332
|
+
"name": "limit",
|
|
9333
|
+
"type": "int",
|
|
9334
|
+
"default": 20,
|
|
9335
|
+
"required": false,
|
|
9336
|
+
"help": "Max results"
|
|
9337
|
+
}
|
|
9338
|
+
],
|
|
9339
|
+
"type": "ts",
|
|
9340
|
+
"modulePath": "weread/notes.js",
|
|
9341
|
+
"domain": "weread.qq.com",
|
|
9342
|
+
"columns": [
|
|
9343
|
+
"chapter",
|
|
9344
|
+
"text",
|
|
9345
|
+
"review",
|
|
9346
|
+
"createTime"
|
|
9347
|
+
]
|
|
9348
|
+
},
|
|
9349
|
+
{
|
|
9350
|
+
"site": "weread",
|
|
9351
|
+
"name": "ranking",
|
|
9352
|
+
"description": "WeRead book rankings by category",
|
|
9353
|
+
"strategy": "public",
|
|
9354
|
+
"browser": false,
|
|
9355
|
+
"args": [
|
|
9356
|
+
{
|
|
9357
|
+
"name": "category",
|
|
9358
|
+
"type": "str",
|
|
9359
|
+
"default": "all",
|
|
9360
|
+
"required": false,
|
|
9361
|
+
"positional": true,
|
|
9362
|
+
"help": "Category: all (default), rising, or numeric category ID"
|
|
9363
|
+
},
|
|
9364
|
+
{
|
|
9365
|
+
"name": "limit",
|
|
9366
|
+
"type": "int",
|
|
9367
|
+
"default": 20,
|
|
9368
|
+
"required": false,
|
|
9369
|
+
"help": "Max results"
|
|
9370
|
+
}
|
|
9371
|
+
],
|
|
9372
|
+
"type": "ts",
|
|
9373
|
+
"modulePath": "weread/ranking.js",
|
|
9374
|
+
"domain": "weread.qq.com",
|
|
9375
|
+
"columns": [
|
|
9376
|
+
"rank",
|
|
9377
|
+
"title",
|
|
9378
|
+
"author",
|
|
9379
|
+
"category",
|
|
9380
|
+
"readingCount",
|
|
9381
|
+
"bookId"
|
|
9382
|
+
]
|
|
9383
|
+
},
|
|
9384
|
+
{
|
|
9385
|
+
"site": "weread",
|
|
9386
|
+
"name": "search",
|
|
9387
|
+
"description": "Search books on WeRead",
|
|
9388
|
+
"strategy": "public",
|
|
9389
|
+
"browser": false,
|
|
9390
|
+
"args": [
|
|
9391
|
+
{
|
|
9392
|
+
"name": "query",
|
|
9393
|
+
"type": "str",
|
|
9394
|
+
"required": true,
|
|
9395
|
+
"positional": true,
|
|
9396
|
+
"help": "Search keyword"
|
|
9397
|
+
},
|
|
9398
|
+
{
|
|
9399
|
+
"name": "limit",
|
|
9400
|
+
"type": "int",
|
|
9401
|
+
"default": 10,
|
|
9402
|
+
"required": false,
|
|
9403
|
+
"help": "Max results"
|
|
9404
|
+
}
|
|
9405
|
+
],
|
|
9406
|
+
"type": "ts",
|
|
9407
|
+
"modulePath": "weread/search.js",
|
|
9408
|
+
"domain": "weread.qq.com",
|
|
9409
|
+
"columns": [
|
|
9410
|
+
"rank",
|
|
9411
|
+
"title",
|
|
9412
|
+
"author",
|
|
9413
|
+
"bookId"
|
|
9414
|
+
]
|
|
9415
|
+
},
|
|
9416
|
+
{
|
|
9417
|
+
"site": "weread",
|
|
9418
|
+
"name": "shelf",
|
|
9419
|
+
"description": "List books on your WeRead bookshelf",
|
|
9420
|
+
"strategy": "cookie",
|
|
9421
|
+
"browser": true,
|
|
9422
|
+
"args": [
|
|
9423
|
+
{
|
|
9424
|
+
"name": "limit",
|
|
8447
9425
|
"type": "int",
|
|
8448
9426
|
"default": 20,
|
|
8449
9427
|
"required": false,
|
|
@@ -8862,6 +9840,54 @@
|
|
|
8862
9840
|
],
|
|
8863
9841
|
"type": "yaml"
|
|
8864
9842
|
},
|
|
9843
|
+
{
|
|
9844
|
+
"site": "xiaohongshu",
|
|
9845
|
+
"name": "publish",
|
|
9846
|
+
"description": "小红书发布图文笔记 (creator center UI automation)",
|
|
9847
|
+
"strategy": "cookie",
|
|
9848
|
+
"browser": true,
|
|
9849
|
+
"args": [
|
|
9850
|
+
{
|
|
9851
|
+
"name": "title",
|
|
9852
|
+
"type": "str",
|
|
9853
|
+
"required": true,
|
|
9854
|
+
"help": "笔记标题 (最多20字)"
|
|
9855
|
+
},
|
|
9856
|
+
{
|
|
9857
|
+
"name": "content",
|
|
9858
|
+
"type": "str",
|
|
9859
|
+
"required": true,
|
|
9860
|
+
"positional": true,
|
|
9861
|
+
"help": "笔记正文"
|
|
9862
|
+
},
|
|
9863
|
+
{
|
|
9864
|
+
"name": "images",
|
|
9865
|
+
"type": "str",
|
|
9866
|
+
"required": false,
|
|
9867
|
+
"help": "图片路径,逗号分隔,最多9张 (jpg/png/gif/webp)"
|
|
9868
|
+
},
|
|
9869
|
+
{
|
|
9870
|
+
"name": "topics",
|
|
9871
|
+
"type": "str",
|
|
9872
|
+
"required": false,
|
|
9873
|
+
"help": "话题标签,逗号分隔,不含 # 号"
|
|
9874
|
+
},
|
|
9875
|
+
{
|
|
9876
|
+
"name": "draft",
|
|
9877
|
+
"type": "bool",
|
|
9878
|
+
"default": false,
|
|
9879
|
+
"required": false,
|
|
9880
|
+
"help": "保存为草稿,不直接发布"
|
|
9881
|
+
}
|
|
9882
|
+
],
|
|
9883
|
+
"type": "ts",
|
|
9884
|
+
"modulePath": "xiaohongshu/publish.js",
|
|
9885
|
+
"domain": "creator.xiaohongshu.com",
|
|
9886
|
+
"columns": [
|
|
9887
|
+
"status",
|
|
9888
|
+
"detail"
|
|
9889
|
+
]
|
|
9890
|
+
},
|
|
8865
9891
|
{
|
|
8866
9892
|
"site": "xiaohongshu",
|
|
8867
9893
|
"name": "search",
|
|
@@ -8891,7 +9917,8 @@
|
|
|
8891
9917
|
"rank",
|
|
8892
9918
|
"title",
|
|
8893
9919
|
"author",
|
|
8894
|
-
"likes"
|
|
9920
|
+
"likes",
|
|
9921
|
+
"url"
|
|
8895
9922
|
]
|
|
8896
9923
|
},
|
|
8897
9924
|
{
|
|
@@ -9174,226 +10201,783 @@
|
|
|
9174
10201
|
"limit": "${{ args.limit }}"
|
|
9175
10202
|
}
|
|
9176
10203
|
],
|
|
9177
|
-
"type": "yaml"
|
|
10204
|
+
"type": "yaml"
|
|
10205
|
+
},
|
|
10206
|
+
{
|
|
10207
|
+
"site": "xueqiu",
|
|
10208
|
+
"name": "hot",
|
|
10209
|
+
"description": "获取雪球热门动态",
|
|
10210
|
+
"domain": "xueqiu.com",
|
|
10211
|
+
"strategy": "cookie",
|
|
10212
|
+
"browser": true,
|
|
10213
|
+
"args": [
|
|
10214
|
+
{
|
|
10215
|
+
"name": "limit",
|
|
10216
|
+
"type": "int",
|
|
10217
|
+
"default": 20,
|
|
10218
|
+
"required": false,
|
|
10219
|
+
"help": "返回数量,默认 20,最大 50"
|
|
10220
|
+
}
|
|
10221
|
+
],
|
|
10222
|
+
"columns": [
|
|
10223
|
+
"rank",
|
|
10224
|
+
"author",
|
|
10225
|
+
"text",
|
|
10226
|
+
"likes",
|
|
10227
|
+
"url"
|
|
10228
|
+
],
|
|
10229
|
+
"pipeline": [
|
|
10230
|
+
{
|
|
10231
|
+
"navigate": "https://xueqiu.com"
|
|
10232
|
+
},
|
|
10233
|
+
{
|
|
10234
|
+
"evaluate": "(async () => {\n const resp = await fetch('https://xueqiu.com/statuses/hot/listV3.json?source=hot&page=1', {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n const list = d.list || [];\n \n const strip = (html) => (html || '').replace(/<[^>]+>/g, '').replace(/ /g, ' ').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').trim();\n return list.map((item, i) => {\n const user = item.user || {};\n return {\n rank: i + 1,\n text: strip(item.description).substring(0, 200),\n url: 'https://xueqiu.com/' + user.id + '/' + item.id,\n author: user.screen_name,\n likes: item.fav_count,\n retweets: item.retweet_count,\n replies: item.reply_count\n };\n });\n})()\n"
|
|
10235
|
+
},
|
|
10236
|
+
{
|
|
10237
|
+
"map": {
|
|
10238
|
+
"rank": "${{ item.rank }}",
|
|
10239
|
+
"author": "${{ item.author }}",
|
|
10240
|
+
"text": "${{ item.text }}",
|
|
10241
|
+
"likes": "${{ item.likes }}",
|
|
10242
|
+
"url": "${{ item.url }}"
|
|
10243
|
+
}
|
|
10244
|
+
},
|
|
10245
|
+
{
|
|
10246
|
+
"limit": "${{ args.limit }}"
|
|
10247
|
+
}
|
|
10248
|
+
],
|
|
10249
|
+
"type": "yaml"
|
|
10250
|
+
},
|
|
10251
|
+
{
|
|
10252
|
+
"site": "xueqiu",
|
|
10253
|
+
"name": "search",
|
|
10254
|
+
"description": "搜索雪球股票(代码或名称)",
|
|
10255
|
+
"domain": "xueqiu.com",
|
|
10256
|
+
"strategy": "cookie",
|
|
10257
|
+
"browser": true,
|
|
10258
|
+
"args": [
|
|
10259
|
+
{
|
|
10260
|
+
"name": "query",
|
|
10261
|
+
"type": "str",
|
|
10262
|
+
"required": true,
|
|
10263
|
+
"positional": true,
|
|
10264
|
+
"help": "搜索关键词,如 茅台、AAPL、腾讯"
|
|
10265
|
+
},
|
|
10266
|
+
{
|
|
10267
|
+
"name": "limit",
|
|
10268
|
+
"type": "int",
|
|
10269
|
+
"default": 10,
|
|
10270
|
+
"required": false,
|
|
10271
|
+
"help": "返回数量,默认 10"
|
|
10272
|
+
}
|
|
10273
|
+
],
|
|
10274
|
+
"columns": [
|
|
10275
|
+
"symbol",
|
|
10276
|
+
"name",
|
|
10277
|
+
"exchange",
|
|
10278
|
+
"price",
|
|
10279
|
+
"changePercent"
|
|
10280
|
+
],
|
|
10281
|
+
"pipeline": [
|
|
10282
|
+
{
|
|
10283
|
+
"navigate": "https://xueqiu.com"
|
|
10284
|
+
},
|
|
10285
|
+
{
|
|
10286
|
+
"evaluate": "(async () => {\n const query = ${{ args.query | json }};\n const count = ${{ args.limit }};\n const resp = await fetch(`https://xueqiu.com/stock/search.json?code=${encodeURIComponent(query)}&size=${count}`, {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n return (d.stocks || []).map(s => {\n let symbol = '';\n if (s.exchange === 'SH' || s.exchange === 'SZ' || s.exchange === 'BJ') {\n symbol = s.code.startsWith(s.exchange) ? s.code : s.exchange + s.code;\n } else {\n symbol = s.code;\n }\n return {\n symbol: symbol,\n name: s.name,\n exchange: s.exchange,\n price: s.current,\n changePercent: s.percentage != null ? s.percentage.toFixed(2) + '%' : null,\n url: 'https://xueqiu.com/S/' + symbol\n };\n });\n})()\n"
|
|
10287
|
+
},
|
|
10288
|
+
{
|
|
10289
|
+
"map": {
|
|
10290
|
+
"symbol": "${{ item.symbol }}",
|
|
10291
|
+
"name": "${{ item.name }}",
|
|
10292
|
+
"exchange": "${{ item.exchange }}",
|
|
10293
|
+
"price": "${{ item.price }}",
|
|
10294
|
+
"changePercent": "${{ item.changePercent }}"
|
|
10295
|
+
}
|
|
10296
|
+
},
|
|
10297
|
+
{
|
|
10298
|
+
"limit": "${{ args.limit }}"
|
|
10299
|
+
}
|
|
10300
|
+
],
|
|
10301
|
+
"type": "yaml"
|
|
10302
|
+
},
|
|
10303
|
+
{
|
|
10304
|
+
"site": "xueqiu",
|
|
10305
|
+
"name": "stock",
|
|
10306
|
+
"description": "获取雪球股票实时行情",
|
|
10307
|
+
"domain": "xueqiu.com",
|
|
10308
|
+
"strategy": "cookie",
|
|
10309
|
+
"browser": true,
|
|
10310
|
+
"args": [
|
|
10311
|
+
{
|
|
10312
|
+
"name": "symbol",
|
|
10313
|
+
"type": "str",
|
|
10314
|
+
"required": true,
|
|
10315
|
+
"positional": true,
|
|
10316
|
+
"help": "股票代码,如 SH600519、SZ000858、AAPL、00700"
|
|
10317
|
+
}
|
|
10318
|
+
],
|
|
10319
|
+
"columns": [
|
|
10320
|
+
"name",
|
|
10321
|
+
"symbol",
|
|
10322
|
+
"price",
|
|
10323
|
+
"changePercent",
|
|
10324
|
+
"marketCap"
|
|
10325
|
+
],
|
|
10326
|
+
"pipeline": [
|
|
10327
|
+
{
|
|
10328
|
+
"navigate": "https://xueqiu.com"
|
|
10329
|
+
},
|
|
10330
|
+
{
|
|
10331
|
+
"evaluate": "(async () => {\n const symbol = (${{ args.symbol | json }} || '').toUpperCase();\n if (!symbol) throw new Error('Missing argument: symbol');\n const resp = await fetch(`https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=${encodeURIComponent(symbol)}`, {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n if (!d.data || !d.data.items || d.data.items.length === 0) throw new Error('未找到股票: ' + symbol);\n \n function fmtAmount(v) {\n if (v == null) return null;\n if (Math.abs(v) >= 1e12) return (v / 1e12).toFixed(2) + '万亿';\n if (Math.abs(v) >= 1e8) return (v / 1e8).toFixed(2) + '亿';\n if (Math.abs(v) >= 1e4) return (v / 1e4).toFixed(2) + '万';\n return v.toString();\n }\n \n const item = d.data.items[0];\n const q = item.quote || {};\n const m = item.market || {};\n \n return [{\n name: q.name,\n symbol: q.symbol,\n exchange: q.exchange,\n currency: q.currency,\n price: q.current,\n change: q.chg,\n changePercent: q.percent != null ? q.percent.toFixed(2) + '%' : null,\n open: q.open,\n high: q.high,\n low: q.low,\n prevClose: q.last_close,\n amplitude: q.amplitude != null ? q.amplitude.toFixed(2) + '%' : null,\n volume: q.volume,\n amount: fmtAmount(q.amount),\n turnover_rate: q.turnover_rate != null ? q.turnover_rate.toFixed(2) + '%' : null,\n marketCap: fmtAmount(q.market_capital),\n floatMarketCap: fmtAmount(q.float_market_capital),\n ytdPercent: q.current_year_percent != null ? q.current_year_percent.toFixed(2) + '%' : null,\n market_status: m.status || null,\n time: q.timestamp ? new Date(q.timestamp).toISOString() : null,\n url: 'https://xueqiu.com/S/' + q.symbol\n }];\n})()\n"
|
|
10332
|
+
},
|
|
10333
|
+
{
|
|
10334
|
+
"map": {
|
|
10335
|
+
"name": "${{ item.name }}",
|
|
10336
|
+
"symbol": "${{ item.symbol }}",
|
|
10337
|
+
"price": "${{ item.price }}",
|
|
10338
|
+
"changePercent": "${{ item.changePercent }}",
|
|
10339
|
+
"marketCap": "${{ item.marketCap }}"
|
|
10340
|
+
}
|
|
10341
|
+
}
|
|
10342
|
+
],
|
|
10343
|
+
"type": "yaml"
|
|
10344
|
+
},
|
|
10345
|
+
{
|
|
10346
|
+
"site": "xueqiu",
|
|
10347
|
+
"name": "watchlist",
|
|
10348
|
+
"description": "获取雪球自选股列表",
|
|
10349
|
+
"domain": "xueqiu.com",
|
|
10350
|
+
"strategy": "cookie",
|
|
10351
|
+
"browser": true,
|
|
10352
|
+
"args": [
|
|
10353
|
+
{
|
|
10354
|
+
"name": "category",
|
|
10355
|
+
"type": "str",
|
|
10356
|
+
"default": "1",
|
|
10357
|
+
"required": false,
|
|
10358
|
+
"help": "分类:1=自选(默认) 2=持仓 3=关注"
|
|
10359
|
+
},
|
|
10360
|
+
{
|
|
10361
|
+
"name": "limit",
|
|
10362
|
+
"type": "int",
|
|
10363
|
+
"default": 100,
|
|
10364
|
+
"required": false,
|
|
10365
|
+
"help": "默认 100"
|
|
10366
|
+
}
|
|
10367
|
+
],
|
|
10368
|
+
"columns": [
|
|
10369
|
+
"symbol",
|
|
10370
|
+
"name",
|
|
10371
|
+
"price",
|
|
10372
|
+
"changePercent"
|
|
10373
|
+
],
|
|
10374
|
+
"pipeline": [
|
|
10375
|
+
{
|
|
10376
|
+
"navigate": "https://xueqiu.com"
|
|
10377
|
+
},
|
|
10378
|
+
{
|
|
10379
|
+
"evaluate": "(async () => {\n const category = parseInt(${{ args.category | json }}) || 1;\n const resp = await fetch(`https://stock.xueqiu.com/v5/stock/portfolio/stock/list.json?size=100&category=${category}&pid=-1`, {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n if (!d.data || !d.data.stocks) throw new Error('获取失败,可能未登录');\n \n return d.data.stocks.map(s => ({\n symbol: s.symbol,\n name: s.name,\n price: s.current,\n change: s.chg,\n changePercent: s.percent != null ? s.percent.toFixed(2) + '%' : null,\n volume: s.volume,\n url: 'https://xueqiu.com/S/' + s.symbol\n }));\n})()\n"
|
|
10380
|
+
},
|
|
10381
|
+
{
|
|
10382
|
+
"map": {
|
|
10383
|
+
"symbol": "${{ item.symbol }}",
|
|
10384
|
+
"name": "${{ item.name }}",
|
|
10385
|
+
"price": "${{ item.price }}",
|
|
10386
|
+
"changePercent": "${{ item.changePercent }}"
|
|
10387
|
+
}
|
|
10388
|
+
},
|
|
10389
|
+
{
|
|
10390
|
+
"limit": "${{ args.limit }}"
|
|
10391
|
+
}
|
|
10392
|
+
],
|
|
10393
|
+
"type": "yaml"
|
|
10394
|
+
},
|
|
10395
|
+
{
|
|
10396
|
+
"site": "yahoo-finance",
|
|
10397
|
+
"name": "quote",
|
|
10398
|
+
"description": "Yahoo Finance 股票行情",
|
|
10399
|
+
"strategy": "cookie",
|
|
10400
|
+
"browser": true,
|
|
10401
|
+
"args": [
|
|
10402
|
+
{
|
|
10403
|
+
"name": "symbol",
|
|
10404
|
+
"type": "str",
|
|
10405
|
+
"required": true,
|
|
10406
|
+
"positional": true,
|
|
10407
|
+
"help": "Stock ticker (e.g. AAPL, MSFT, TSLA)"
|
|
10408
|
+
}
|
|
10409
|
+
],
|
|
10410
|
+
"type": "ts",
|
|
10411
|
+
"modulePath": "yahoo-finance/quote.js",
|
|
10412
|
+
"domain": "finance.yahoo.com",
|
|
10413
|
+
"columns": [
|
|
10414
|
+
"symbol",
|
|
10415
|
+
"name",
|
|
10416
|
+
"price",
|
|
10417
|
+
"change",
|
|
10418
|
+
"changePercent",
|
|
10419
|
+
"open",
|
|
10420
|
+
"high",
|
|
10421
|
+
"low",
|
|
10422
|
+
"volume",
|
|
10423
|
+
"marketCap"
|
|
10424
|
+
]
|
|
10425
|
+
},
|
|
10426
|
+
{
|
|
10427
|
+
"site": "yollomi",
|
|
10428
|
+
"name": "background",
|
|
10429
|
+
"description": "Generate AI background for a product/object image (5 credits)",
|
|
10430
|
+
"strategy": "cookie",
|
|
10431
|
+
"browser": true,
|
|
10432
|
+
"args": [
|
|
10433
|
+
{
|
|
10434
|
+
"name": "image",
|
|
10435
|
+
"type": "str",
|
|
10436
|
+
"required": true,
|
|
10437
|
+
"positional": true,
|
|
10438
|
+
"help": "Image URL (upload via "
|
|
10439
|
+
},
|
|
10440
|
+
{
|
|
10441
|
+
"name": "prompt",
|
|
10442
|
+
"type": "str",
|
|
10443
|
+
"default": "",
|
|
10444
|
+
"required": false,
|
|
10445
|
+
"help": "Background description (optional)"
|
|
10446
|
+
},
|
|
10447
|
+
{
|
|
10448
|
+
"name": "output",
|
|
10449
|
+
"type": "str",
|
|
10450
|
+
"default": "./yollomi-output",
|
|
10451
|
+
"required": false,
|
|
10452
|
+
"help": "Output directory"
|
|
10453
|
+
},
|
|
10454
|
+
{
|
|
10455
|
+
"name": "no-download",
|
|
10456
|
+
"type": "boolean",
|
|
10457
|
+
"default": false,
|
|
10458
|
+
"required": false,
|
|
10459
|
+
"help": "Only show URL"
|
|
10460
|
+
}
|
|
10461
|
+
],
|
|
10462
|
+
"type": "ts",
|
|
10463
|
+
"modulePath": "yollomi/background.js",
|
|
10464
|
+
"columns": [
|
|
10465
|
+
"status",
|
|
10466
|
+
"file",
|
|
10467
|
+
"size",
|
|
10468
|
+
"url"
|
|
10469
|
+
]
|
|
10470
|
+
},
|
|
10471
|
+
{
|
|
10472
|
+
"site": "yollomi",
|
|
10473
|
+
"name": "edit",
|
|
10474
|
+
"description": "Edit images with AI text prompts (Qwen image edit)",
|
|
10475
|
+
"strategy": "cookie",
|
|
10476
|
+
"browser": true,
|
|
10477
|
+
"args": [
|
|
10478
|
+
{
|
|
10479
|
+
"name": "image",
|
|
10480
|
+
"type": "str",
|
|
10481
|
+
"required": true,
|
|
10482
|
+
"positional": true,
|
|
10483
|
+
"help": "Input image URL (upload via "
|
|
10484
|
+
},
|
|
10485
|
+
{
|
|
10486
|
+
"name": "prompt",
|
|
10487
|
+
"type": "str",
|
|
10488
|
+
"required": true,
|
|
10489
|
+
"positional": true,
|
|
10490
|
+
"help": "Editing instruction (e.g. "
|
|
10491
|
+
},
|
|
10492
|
+
{
|
|
10493
|
+
"name": "model",
|
|
10494
|
+
"type": "str",
|
|
10495
|
+
"default": "qwen-image-edit",
|
|
10496
|
+
"required": false,
|
|
10497
|
+
"help": "Edit model",
|
|
10498
|
+
"choices": [
|
|
10499
|
+
"qwen-image-edit",
|
|
10500
|
+
"qwen-image-edit-plus"
|
|
10501
|
+
]
|
|
10502
|
+
},
|
|
10503
|
+
{
|
|
10504
|
+
"name": "output",
|
|
10505
|
+
"type": "str",
|
|
10506
|
+
"default": "./yollomi-output",
|
|
10507
|
+
"required": false,
|
|
10508
|
+
"help": "Output directory"
|
|
10509
|
+
},
|
|
10510
|
+
{
|
|
10511
|
+
"name": "no-download",
|
|
10512
|
+
"type": "boolean",
|
|
10513
|
+
"default": false,
|
|
10514
|
+
"required": false,
|
|
10515
|
+
"help": "Only show URL"
|
|
10516
|
+
}
|
|
10517
|
+
],
|
|
10518
|
+
"type": "ts",
|
|
10519
|
+
"modulePath": "yollomi/edit.js",
|
|
10520
|
+
"columns": [
|
|
10521
|
+
"status",
|
|
10522
|
+
"file",
|
|
10523
|
+
"size",
|
|
10524
|
+
"credits",
|
|
10525
|
+
"url"
|
|
10526
|
+
]
|
|
10527
|
+
},
|
|
10528
|
+
{
|
|
10529
|
+
"site": "yollomi",
|
|
10530
|
+
"name": "face-swap",
|
|
10531
|
+
"description": "Swap faces between two photos (3 credits)",
|
|
10532
|
+
"strategy": "cookie",
|
|
10533
|
+
"browser": true,
|
|
10534
|
+
"args": [
|
|
10535
|
+
{
|
|
10536
|
+
"name": "source",
|
|
10537
|
+
"type": "str",
|
|
10538
|
+
"required": true,
|
|
10539
|
+
"help": "Source face image URL"
|
|
10540
|
+
},
|
|
10541
|
+
{
|
|
10542
|
+
"name": "target",
|
|
10543
|
+
"type": "str",
|
|
10544
|
+
"required": true,
|
|
10545
|
+
"help": "Target photo URL"
|
|
10546
|
+
},
|
|
10547
|
+
{
|
|
10548
|
+
"name": "output",
|
|
10549
|
+
"type": "str",
|
|
10550
|
+
"default": "./yollomi-output",
|
|
10551
|
+
"required": false,
|
|
10552
|
+
"help": "Output directory"
|
|
10553
|
+
},
|
|
10554
|
+
{
|
|
10555
|
+
"name": "no-download",
|
|
10556
|
+
"type": "boolean",
|
|
10557
|
+
"default": false,
|
|
10558
|
+
"required": false,
|
|
10559
|
+
"help": "Only show URL"
|
|
10560
|
+
}
|
|
10561
|
+
],
|
|
10562
|
+
"type": "ts",
|
|
10563
|
+
"modulePath": "yollomi/face-swap.js",
|
|
10564
|
+
"columns": [
|
|
10565
|
+
"status",
|
|
10566
|
+
"file",
|
|
10567
|
+
"size",
|
|
10568
|
+
"url"
|
|
10569
|
+
]
|
|
10570
|
+
},
|
|
10571
|
+
{
|
|
10572
|
+
"site": "yollomi",
|
|
10573
|
+
"name": "generate",
|
|
10574
|
+
"description": "Generate images with AI (text-to-image or image-to-image)",
|
|
10575
|
+
"strategy": "cookie",
|
|
10576
|
+
"browser": true,
|
|
10577
|
+
"args": [
|
|
10578
|
+
{
|
|
10579
|
+
"name": "prompt",
|
|
10580
|
+
"type": "str",
|
|
10581
|
+
"required": true,
|
|
10582
|
+
"positional": true,
|
|
10583
|
+
"help": "Text prompt describing the image"
|
|
10584
|
+
},
|
|
10585
|
+
{
|
|
10586
|
+
"name": "model",
|
|
10587
|
+
"type": "str",
|
|
10588
|
+
"default": "z-image-turbo",
|
|
10589
|
+
"required": false,
|
|
10590
|
+
"help": "Model ID (z-image-turbo, flux-schnell, nano-banana, flux-2-pro, ...)"
|
|
10591
|
+
},
|
|
10592
|
+
{
|
|
10593
|
+
"name": "ratio",
|
|
10594
|
+
"type": "str",
|
|
10595
|
+
"default": "1:1",
|
|
10596
|
+
"required": false,
|
|
10597
|
+
"help": "Aspect ratio",
|
|
10598
|
+
"choices": [
|
|
10599
|
+
"1:1",
|
|
10600
|
+
"16:9",
|
|
10601
|
+
"9:16",
|
|
10602
|
+
"4:3",
|
|
10603
|
+
"3:4"
|
|
10604
|
+
]
|
|
10605
|
+
},
|
|
10606
|
+
{
|
|
10607
|
+
"name": "image",
|
|
10608
|
+
"type": "str",
|
|
10609
|
+
"required": false,
|
|
10610
|
+
"help": "Input image URL for image-to-image (upload via "
|
|
10611
|
+
},
|
|
10612
|
+
{
|
|
10613
|
+
"name": "output",
|
|
10614
|
+
"type": "str",
|
|
10615
|
+
"default": "./yollomi-output",
|
|
10616
|
+
"required": false,
|
|
10617
|
+
"help": "Output directory"
|
|
10618
|
+
},
|
|
10619
|
+
{
|
|
10620
|
+
"name": "no-download",
|
|
10621
|
+
"type": "boolean",
|
|
10622
|
+
"default": false,
|
|
10623
|
+
"required": false,
|
|
10624
|
+
"help": "Only show URLs, skip download"
|
|
10625
|
+
}
|
|
10626
|
+
],
|
|
10627
|
+
"type": "ts",
|
|
10628
|
+
"modulePath": "yollomi/generate.js",
|
|
10629
|
+
"columns": [
|
|
10630
|
+
"index",
|
|
10631
|
+
"status",
|
|
10632
|
+
"file",
|
|
10633
|
+
"size",
|
|
10634
|
+
"url"
|
|
10635
|
+
]
|
|
10636
|
+
},
|
|
10637
|
+
{
|
|
10638
|
+
"site": "yollomi",
|
|
10639
|
+
"name": "models",
|
|
10640
|
+
"description": "List available Yollomi AI models (image, video, tools)",
|
|
10641
|
+
"strategy": "public",
|
|
10642
|
+
"browser": false,
|
|
10643
|
+
"args": [
|
|
10644
|
+
{
|
|
10645
|
+
"name": "type",
|
|
10646
|
+
"type": "str",
|
|
10647
|
+
"default": "all",
|
|
10648
|
+
"required": false,
|
|
10649
|
+
"help": "Filter by model type",
|
|
10650
|
+
"choices": [
|
|
10651
|
+
"all",
|
|
10652
|
+
"image",
|
|
10653
|
+
"video",
|
|
10654
|
+
"tool"
|
|
10655
|
+
]
|
|
10656
|
+
}
|
|
10657
|
+
],
|
|
10658
|
+
"type": "ts",
|
|
10659
|
+
"modulePath": "yollomi/models.js",
|
|
10660
|
+
"columns": [
|
|
10661
|
+
"type",
|
|
10662
|
+
"model",
|
|
10663
|
+
"credits",
|
|
10664
|
+
"description"
|
|
10665
|
+
]
|
|
10666
|
+
},
|
|
10667
|
+
{
|
|
10668
|
+
"site": "yollomi",
|
|
10669
|
+
"name": "object-remover",
|
|
10670
|
+
"description": "Remove unwanted objects from images (3 credits)",
|
|
10671
|
+
"strategy": "cookie",
|
|
10672
|
+
"browser": true,
|
|
10673
|
+
"args": [
|
|
10674
|
+
{
|
|
10675
|
+
"name": "image",
|
|
10676
|
+
"type": "str",
|
|
10677
|
+
"required": true,
|
|
10678
|
+
"positional": true,
|
|
10679
|
+
"help": "Image URL"
|
|
10680
|
+
},
|
|
10681
|
+
{
|
|
10682
|
+
"name": "mask",
|
|
10683
|
+
"type": "str",
|
|
10684
|
+
"required": true,
|
|
10685
|
+
"positional": true,
|
|
10686
|
+
"help": "Mask image URL (white = area to remove)"
|
|
10687
|
+
},
|
|
10688
|
+
{
|
|
10689
|
+
"name": "output",
|
|
10690
|
+
"type": "str",
|
|
10691
|
+
"default": "./yollomi-output",
|
|
10692
|
+
"required": false,
|
|
10693
|
+
"help": "Output directory"
|
|
10694
|
+
},
|
|
10695
|
+
{
|
|
10696
|
+
"name": "no-download",
|
|
10697
|
+
"type": "boolean",
|
|
10698
|
+
"default": false,
|
|
10699
|
+
"required": false,
|
|
10700
|
+
"help": "Only show URL"
|
|
10701
|
+
}
|
|
10702
|
+
],
|
|
10703
|
+
"type": "ts",
|
|
10704
|
+
"modulePath": "yollomi/object-remover.js",
|
|
10705
|
+
"columns": [
|
|
10706
|
+
"status",
|
|
10707
|
+
"file",
|
|
10708
|
+
"size",
|
|
10709
|
+
"url"
|
|
10710
|
+
]
|
|
9178
10711
|
},
|
|
9179
10712
|
{
|
|
9180
|
-
"site": "
|
|
9181
|
-
"name": "
|
|
9182
|
-
"description": "
|
|
9183
|
-
"domain": "xueqiu.com",
|
|
10713
|
+
"site": "yollomi",
|
|
10714
|
+
"name": "remove-bg",
|
|
10715
|
+
"description": "Remove image background with AI (free)",
|
|
9184
10716
|
"strategy": "cookie",
|
|
9185
10717
|
"browser": true,
|
|
9186
10718
|
"args": [
|
|
9187
10719
|
{
|
|
9188
|
-
"name": "
|
|
9189
|
-
"type": "
|
|
9190
|
-
"
|
|
9191
|
-
"
|
|
9192
|
-
"help": "
|
|
9193
|
-
}
|
|
9194
|
-
],
|
|
9195
|
-
"columns": [
|
|
9196
|
-
"rank",
|
|
9197
|
-
"author",
|
|
9198
|
-
"text",
|
|
9199
|
-
"likes",
|
|
9200
|
-
"url"
|
|
9201
|
-
],
|
|
9202
|
-
"pipeline": [
|
|
9203
|
-
{
|
|
9204
|
-
"navigate": "https://xueqiu.com"
|
|
9205
|
-
},
|
|
9206
|
-
{
|
|
9207
|
-
"evaluate": "(async () => {\n const resp = await fetch('https://xueqiu.com/statuses/hot/listV3.json?source=hot&page=1', {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n const list = d.list || [];\n \n const strip = (html) => (html || '').replace(/<[^>]+>/g, '').replace(/ /g, ' ').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').trim();\n return list.map((item, i) => {\n const user = item.user || {};\n return {\n rank: i + 1,\n text: strip(item.description).substring(0, 200),\n url: 'https://xueqiu.com/' + user.id + '/' + item.id,\n author: user.screen_name,\n likes: item.fav_count,\n retweets: item.retweet_count,\n replies: item.reply_count\n };\n });\n})()\n"
|
|
10720
|
+
"name": "image",
|
|
10721
|
+
"type": "str",
|
|
10722
|
+
"required": true,
|
|
10723
|
+
"positional": true,
|
|
10724
|
+
"help": "Image URL to remove background from"
|
|
9208
10725
|
},
|
|
9209
10726
|
{
|
|
9210
|
-
"
|
|
9211
|
-
|
|
9212
|
-
|
|
9213
|
-
|
|
9214
|
-
|
|
9215
|
-
"url": "${{ item.url }}"
|
|
9216
|
-
}
|
|
10727
|
+
"name": "output",
|
|
10728
|
+
"type": "str",
|
|
10729
|
+
"default": "./yollomi-output",
|
|
10730
|
+
"required": false,
|
|
10731
|
+
"help": "Output directory"
|
|
9217
10732
|
},
|
|
9218
10733
|
{
|
|
9219
|
-
"
|
|
10734
|
+
"name": "no-download",
|
|
10735
|
+
"type": "boolean",
|
|
10736
|
+
"default": false,
|
|
10737
|
+
"required": false,
|
|
10738
|
+
"help": "Only show URL"
|
|
9220
10739
|
}
|
|
9221
10740
|
],
|
|
9222
|
-
"type": "
|
|
10741
|
+
"type": "ts",
|
|
10742
|
+
"modulePath": "yollomi/remove-bg.js",
|
|
10743
|
+
"columns": [
|
|
10744
|
+
"status",
|
|
10745
|
+
"file",
|
|
10746
|
+
"size",
|
|
10747
|
+
"url"
|
|
10748
|
+
]
|
|
9223
10749
|
},
|
|
9224
10750
|
{
|
|
9225
|
-
"site": "
|
|
9226
|
-
"name": "
|
|
9227
|
-
"description": "
|
|
9228
|
-
"domain": "xueqiu.com",
|
|
10751
|
+
"site": "yollomi",
|
|
10752
|
+
"name": "restore",
|
|
10753
|
+
"description": "Restore old or damaged photos with AI (4 credits)",
|
|
9229
10754
|
"strategy": "cookie",
|
|
9230
10755
|
"browser": true,
|
|
9231
10756
|
"args": [
|
|
9232
10757
|
{
|
|
9233
|
-
"name": "
|
|
10758
|
+
"name": "image",
|
|
9234
10759
|
"type": "str",
|
|
9235
10760
|
"required": true,
|
|
9236
10761
|
"positional": true,
|
|
9237
|
-
"help": "
|
|
10762
|
+
"help": "Image URL to restore"
|
|
9238
10763
|
},
|
|
9239
10764
|
{
|
|
9240
|
-
"name": "
|
|
9241
|
-
"type": "
|
|
9242
|
-
"default":
|
|
10765
|
+
"name": "output",
|
|
10766
|
+
"type": "str",
|
|
10767
|
+
"default": "./yollomi-output",
|
|
9243
10768
|
"required": false,
|
|
9244
|
-
"help": "
|
|
10769
|
+
"help": "Output directory"
|
|
10770
|
+
},
|
|
10771
|
+
{
|
|
10772
|
+
"name": "no-download",
|
|
10773
|
+
"type": "boolean",
|
|
10774
|
+
"default": false,
|
|
10775
|
+
"required": false,
|
|
10776
|
+
"help": "Only show URL"
|
|
9245
10777
|
}
|
|
9246
10778
|
],
|
|
10779
|
+
"type": "ts",
|
|
10780
|
+
"modulePath": "yollomi/restore.js",
|
|
9247
10781
|
"columns": [
|
|
9248
|
-
"
|
|
9249
|
-
"
|
|
9250
|
-
"
|
|
9251
|
-
"
|
|
9252
|
-
|
|
9253
|
-
|
|
9254
|
-
|
|
10782
|
+
"status",
|
|
10783
|
+
"file",
|
|
10784
|
+
"size",
|
|
10785
|
+
"url"
|
|
10786
|
+
]
|
|
10787
|
+
},
|
|
10788
|
+
{
|
|
10789
|
+
"site": "yollomi",
|
|
10790
|
+
"name": "try-on",
|
|
10791
|
+
"description": "Virtual try-on — see how clothes look on a person (3 credits)",
|
|
10792
|
+
"strategy": "cookie",
|
|
10793
|
+
"browser": true,
|
|
10794
|
+
"args": [
|
|
9255
10795
|
{
|
|
9256
|
-
"
|
|
10796
|
+
"name": "person",
|
|
10797
|
+
"type": "str",
|
|
10798
|
+
"required": true,
|
|
10799
|
+
"help": "Person photo URL (upload via "
|
|
9257
10800
|
},
|
|
9258
10801
|
{
|
|
9259
|
-
"
|
|
10802
|
+
"name": "cloth",
|
|
10803
|
+
"type": "str",
|
|
10804
|
+
"required": true,
|
|
10805
|
+
"help": "Clothing image URL"
|
|
9260
10806
|
},
|
|
9261
10807
|
{
|
|
9262
|
-
"
|
|
9263
|
-
|
|
9264
|
-
|
|
9265
|
-
|
|
9266
|
-
|
|
9267
|
-
|
|
9268
|
-
|
|
10808
|
+
"name": "cloth-type",
|
|
10809
|
+
"type": "str",
|
|
10810
|
+
"default": "upper",
|
|
10811
|
+
"required": false,
|
|
10812
|
+
"help": "Clothing type",
|
|
10813
|
+
"choices": [
|
|
10814
|
+
"upper",
|
|
10815
|
+
"lower",
|
|
10816
|
+
"overall"
|
|
10817
|
+
]
|
|
9269
10818
|
},
|
|
9270
10819
|
{
|
|
9271
|
-
"
|
|
10820
|
+
"name": "output",
|
|
10821
|
+
"type": "str",
|
|
10822
|
+
"default": "./yollomi-output",
|
|
10823
|
+
"required": false,
|
|
10824
|
+
"help": "Output directory"
|
|
10825
|
+
},
|
|
10826
|
+
{
|
|
10827
|
+
"name": "no-download",
|
|
10828
|
+
"type": "boolean",
|
|
10829
|
+
"default": false,
|
|
10830
|
+
"required": false,
|
|
10831
|
+
"help": "Only show URL"
|
|
9272
10832
|
}
|
|
9273
10833
|
],
|
|
9274
|
-
"type": "
|
|
10834
|
+
"type": "ts",
|
|
10835
|
+
"modulePath": "yollomi/try-on.js",
|
|
10836
|
+
"columns": [
|
|
10837
|
+
"status",
|
|
10838
|
+
"file",
|
|
10839
|
+
"size",
|
|
10840
|
+
"url"
|
|
10841
|
+
]
|
|
9275
10842
|
},
|
|
9276
10843
|
{
|
|
9277
|
-
"site": "
|
|
9278
|
-
"name": "
|
|
9279
|
-
"description": "
|
|
9280
|
-
"domain": "xueqiu.com",
|
|
10844
|
+
"site": "yollomi",
|
|
10845
|
+
"name": "upload",
|
|
10846
|
+
"description": "Upload an image or video to Yollomi (returns URL for other commands)",
|
|
9281
10847
|
"strategy": "cookie",
|
|
9282
10848
|
"browser": true,
|
|
9283
10849
|
"args": [
|
|
9284
10850
|
{
|
|
9285
|
-
"name": "
|
|
10851
|
+
"name": "file",
|
|
9286
10852
|
"type": "str",
|
|
9287
10853
|
"required": true,
|
|
9288
10854
|
"positional": true,
|
|
9289
|
-
"help": "
|
|
10855
|
+
"help": "Local file path to upload"
|
|
9290
10856
|
}
|
|
9291
10857
|
],
|
|
10858
|
+
"type": "ts",
|
|
10859
|
+
"modulePath": "yollomi/upload.js",
|
|
9292
10860
|
"columns": [
|
|
9293
|
-
"
|
|
9294
|
-
"
|
|
9295
|
-
"
|
|
9296
|
-
"
|
|
9297
|
-
|
|
9298
|
-
],
|
|
9299
|
-
"pipeline": [
|
|
9300
|
-
{
|
|
9301
|
-
"navigate": "https://xueqiu.com"
|
|
9302
|
-
},
|
|
9303
|
-
{
|
|
9304
|
-
"evaluate": "(async () => {\n const symbol = (${{ args.symbol | json }} || '').toUpperCase();\n if (!symbol) throw new Error('Missing argument: symbol');\n const resp = await fetch(`https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=${encodeURIComponent(symbol)}`, {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n if (!d.data || !d.data.items || d.data.items.length === 0) throw new Error('未找到股票: ' + symbol);\n \n function fmtAmount(v) {\n if (v == null) return null;\n if (Math.abs(v) >= 1e12) return (v / 1e12).toFixed(2) + '万亿';\n if (Math.abs(v) >= 1e8) return (v / 1e8).toFixed(2) + '亿';\n if (Math.abs(v) >= 1e4) return (v / 1e4).toFixed(2) + '万';\n return v.toString();\n }\n \n const item = d.data.items[0];\n const q = item.quote || {};\n const m = item.market || {};\n \n return [{\n name: q.name,\n symbol: q.symbol,\n exchange: q.exchange,\n currency: q.currency,\n price: q.current,\n change: q.chg,\n changePercent: q.percent != null ? q.percent.toFixed(2) + '%' : null,\n open: q.open,\n high: q.high,\n low: q.low,\n prevClose: q.last_close,\n amplitude: q.amplitude != null ? q.amplitude.toFixed(2) + '%' : null,\n volume: q.volume,\n amount: fmtAmount(q.amount),\n turnover_rate: q.turnover_rate != null ? q.turnover_rate.toFixed(2) + '%' : null,\n marketCap: fmtAmount(q.market_capital),\n floatMarketCap: fmtAmount(q.float_market_capital),\n ytdPercent: q.current_year_percent != null ? q.current_year_percent.toFixed(2) + '%' : null,\n market_status: m.status || null,\n time: q.timestamp ? new Date(q.timestamp).toISOString() : null,\n url: 'https://xueqiu.com/S/' + q.symbol\n }];\n})()\n"
|
|
9305
|
-
},
|
|
9306
|
-
{
|
|
9307
|
-
"map": {
|
|
9308
|
-
"name": "${{ item.name }}",
|
|
9309
|
-
"symbol": "${{ item.symbol }}",
|
|
9310
|
-
"price": "${{ item.price }}",
|
|
9311
|
-
"changePercent": "${{ item.changePercent }}",
|
|
9312
|
-
"marketCap": "${{ item.marketCap }}"
|
|
9313
|
-
}
|
|
9314
|
-
}
|
|
9315
|
-
],
|
|
9316
|
-
"type": "yaml"
|
|
10861
|
+
"status",
|
|
10862
|
+
"file",
|
|
10863
|
+
"size",
|
|
10864
|
+
"url"
|
|
10865
|
+
]
|
|
9317
10866
|
},
|
|
9318
10867
|
{
|
|
9319
|
-
"site": "
|
|
9320
|
-
"name": "
|
|
9321
|
-
"description": "
|
|
9322
|
-
"domain": "xueqiu.com",
|
|
10868
|
+
"site": "yollomi",
|
|
10869
|
+
"name": "upscale",
|
|
10870
|
+
"description": "Upscale image resolution with AI (1 credit)",
|
|
9323
10871
|
"strategy": "cookie",
|
|
9324
10872
|
"browser": true,
|
|
9325
10873
|
"args": [
|
|
9326
10874
|
{
|
|
9327
|
-
"name": "
|
|
10875
|
+
"name": "image",
|
|
9328
10876
|
"type": "str",
|
|
9329
|
-
"
|
|
9330
|
-
"
|
|
9331
|
-
"help": "
|
|
10877
|
+
"required": true,
|
|
10878
|
+
"positional": true,
|
|
10879
|
+
"help": "Image URL to upscale"
|
|
9332
10880
|
},
|
|
9333
10881
|
{
|
|
9334
|
-
"name": "
|
|
9335
|
-
"type": "
|
|
9336
|
-
"default":
|
|
10882
|
+
"name": "scale",
|
|
10883
|
+
"type": "str",
|
|
10884
|
+
"default": "2",
|
|
9337
10885
|
"required": false,
|
|
9338
|
-
"help": "
|
|
9339
|
-
|
|
9340
|
-
|
|
9341
|
-
|
|
9342
|
-
|
|
9343
|
-
"name",
|
|
9344
|
-
"price",
|
|
9345
|
-
"changePercent"
|
|
9346
|
-
],
|
|
9347
|
-
"pipeline": [
|
|
9348
|
-
{
|
|
9349
|
-
"navigate": "https://xueqiu.com"
|
|
9350
|
-
},
|
|
9351
|
-
{
|
|
9352
|
-
"evaluate": "(async () => {\n const category = parseInt(${{ args.category | json }}) || 1;\n const resp = await fetch(`https://stock.xueqiu.com/v5/stock/portfolio/stock/list.json?size=100&category=${category}&pid=-1`, {credentials: 'include'});\n if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');\n const d = await resp.json();\n if (!d.data || !d.data.stocks) throw new Error('获取失败,可能未登录');\n \n return d.data.stocks.map(s => ({\n symbol: s.symbol,\n name: s.name,\n price: s.current,\n change: s.chg,\n changePercent: s.percent != null ? s.percent.toFixed(2) + '%' : null,\n volume: s.volume,\n url: 'https://xueqiu.com/S/' + s.symbol\n }));\n})()\n"
|
|
10886
|
+
"help": "Upscale factor (2 or 4)",
|
|
10887
|
+
"choices": [
|
|
10888
|
+
"2",
|
|
10889
|
+
"4"
|
|
10890
|
+
]
|
|
9353
10891
|
},
|
|
9354
10892
|
{
|
|
9355
|
-
"
|
|
9356
|
-
|
|
9357
|
-
|
|
9358
|
-
|
|
9359
|
-
|
|
9360
|
-
}
|
|
10893
|
+
"name": "output",
|
|
10894
|
+
"type": "str",
|
|
10895
|
+
"default": "./yollomi-output",
|
|
10896
|
+
"required": false,
|
|
10897
|
+
"help": "Output directory"
|
|
9361
10898
|
},
|
|
9362
10899
|
{
|
|
9363
|
-
"
|
|
10900
|
+
"name": "no-download",
|
|
10901
|
+
"type": "boolean",
|
|
10902
|
+
"default": false,
|
|
10903
|
+
"required": false,
|
|
10904
|
+
"help": "Only show URL"
|
|
9364
10905
|
}
|
|
9365
10906
|
],
|
|
9366
|
-
"type": "
|
|
10907
|
+
"type": "ts",
|
|
10908
|
+
"modulePath": "yollomi/upscale.js",
|
|
10909
|
+
"columns": [
|
|
10910
|
+
"status",
|
|
10911
|
+
"file",
|
|
10912
|
+
"size",
|
|
10913
|
+
"scale",
|
|
10914
|
+
"url"
|
|
10915
|
+
]
|
|
9367
10916
|
},
|
|
9368
10917
|
{
|
|
9369
|
-
"site": "
|
|
9370
|
-
"name": "
|
|
9371
|
-
"description": "
|
|
10918
|
+
"site": "yollomi",
|
|
10919
|
+
"name": "video",
|
|
10920
|
+
"description": "Generate videos with AI (text-to-video or image-to-video)",
|
|
9372
10921
|
"strategy": "cookie",
|
|
9373
10922
|
"browser": true,
|
|
9374
10923
|
"args": [
|
|
9375
10924
|
{
|
|
9376
|
-
"name": "
|
|
10925
|
+
"name": "prompt",
|
|
9377
10926
|
"type": "str",
|
|
9378
10927
|
"required": true,
|
|
9379
10928
|
"positional": true,
|
|
9380
|
-
"help": "
|
|
10929
|
+
"help": "Text prompt describing the video"
|
|
10930
|
+
},
|
|
10931
|
+
{
|
|
10932
|
+
"name": "model",
|
|
10933
|
+
"type": "str",
|
|
10934
|
+
"default": "kling-2-1",
|
|
10935
|
+
"required": false,
|
|
10936
|
+
"help": "Model (kling-2-1, openai-sora-2, google-veo-3-1, wan-2-5-t2v, ...)"
|
|
10937
|
+
},
|
|
10938
|
+
{
|
|
10939
|
+
"name": "image",
|
|
10940
|
+
"type": "str",
|
|
10941
|
+
"required": false,
|
|
10942
|
+
"help": "Input image URL for image-to-video"
|
|
10943
|
+
},
|
|
10944
|
+
{
|
|
10945
|
+
"name": "ratio",
|
|
10946
|
+
"type": "str",
|
|
10947
|
+
"default": "16:9",
|
|
10948
|
+
"required": false,
|
|
10949
|
+
"help": "Aspect ratio",
|
|
10950
|
+
"choices": [
|
|
10951
|
+
"1:1",
|
|
10952
|
+
"16:9",
|
|
10953
|
+
"9:16",
|
|
10954
|
+
"4:3",
|
|
10955
|
+
"3:4"
|
|
10956
|
+
]
|
|
10957
|
+
},
|
|
10958
|
+
{
|
|
10959
|
+
"name": "output",
|
|
10960
|
+
"type": "str",
|
|
10961
|
+
"default": "./yollomi-output",
|
|
10962
|
+
"required": false,
|
|
10963
|
+
"help": "Output directory"
|
|
10964
|
+
},
|
|
10965
|
+
{
|
|
10966
|
+
"name": "no-download",
|
|
10967
|
+
"type": "boolean",
|
|
10968
|
+
"default": false,
|
|
10969
|
+
"required": false,
|
|
10970
|
+
"help": "Only show URL, skip download"
|
|
9381
10971
|
}
|
|
9382
10972
|
],
|
|
9383
10973
|
"type": "ts",
|
|
9384
|
-
"modulePath": "
|
|
9385
|
-
"domain": "finance.yahoo.com",
|
|
10974
|
+
"modulePath": "yollomi/video.js",
|
|
9386
10975
|
"columns": [
|
|
9387
|
-
"
|
|
9388
|
-
"
|
|
9389
|
-
"
|
|
9390
|
-
"
|
|
9391
|
-
"
|
|
9392
|
-
"open",
|
|
9393
|
-
"high",
|
|
9394
|
-
"low",
|
|
9395
|
-
"volume",
|
|
9396
|
-
"marketCap"
|
|
10976
|
+
"status",
|
|
10977
|
+
"file",
|
|
10978
|
+
"size",
|
|
10979
|
+
"credits",
|
|
10980
|
+
"url"
|
|
9397
10981
|
]
|
|
9398
10982
|
},
|
|
9399
10983
|
{
|
|
@@ -9496,7 +11080,6 @@
|
|
|
9496
11080
|
"name": "url",
|
|
9497
11081
|
"type": "str",
|
|
9498
11082
|
"required": true,
|
|
9499
|
-
"positional": true,
|
|
9500
11083
|
"help": "Article URL (zhuanlan.zhihu.com/p/xxx)"
|
|
9501
11084
|
},
|
|
9502
11085
|
{
|
|
@@ -9520,6 +11103,7 @@
|
|
|
9520
11103
|
"columns": [
|
|
9521
11104
|
"title",
|
|
9522
11105
|
"author",
|
|
11106
|
+
"publish_time",
|
|
9523
11107
|
"status",
|
|
9524
11108
|
"size"
|
|
9525
11109
|
]
|