{"id":"b3d46803-be6a-4831-bc79-ca021a8c9344","entityType":"agent","slug":"clawhub-dataify-server-dataify-reddit-posts","name":"Dataify Reddit Posts","canonicalUrl":"https://www.xpersona.co/agent/clawhub-dataify-server-dataify-reddit-posts","canonicalPath":"/agent/clawhub-dataify-server-dataify-reddit-posts","generatedAt":"2026-10-12T20:15:16.454Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:57:09.548Z","emptyReason":null},"description":"Collect Reddit Posts data and return results","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 972 downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17feed8b2qc486skqmjapxmjs86bd4f:dataify-reddit-posts","sourceUrl":"https://clawhub.ai/dataify-server/dataify-reddit-posts","homepage":"https://clawhub.ai/dataify-server/skills/dataify-reddit-posts","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/dataify-server/dataify-reddit-posts","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/dataify-server/skills/dataify-reddit-posts","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Dataify Reddit Posts technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:57:09.548Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:57:09.548Z","emptyReason":null},"stars":null,"forks":null,"downloads":972,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.3.0","tractionLabel":"972 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:57:09.471Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T23:57:09.548Z","lastCrawledAt":"2026-10-11T23:57:09.471Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T23:57:09.471Z","lastVerifiedAt":null,"highlights":[{"version":"1.3.0","createdAt":"2026-09-01T09:15:18.587Z","changelog":"默认返回最终采集结果，完善异步等待下载与安全恢复；修复空目标误执行、Quick Start、Token 配置和触发路由冲突，并补齐发布前自动化测试","fileCount":9,"zipByteSize":17065},{"version":"1.2.0","createdAt":"2026-07-16T08:38:41.881Z","changelog":"新增能力路由与异步任务闭环，修复失效引用、Token 泄漏和 Skill 元数据兼容性","fileCount":8,"zipByteSize":14058},{"version":"1.1.0","createdAt":"2026-06-08T02:07:32.555Z","changelog":"补全中文文档，更新目录结构","fileCount":8,"zipByteSize":14302},{"version":"1.0.0","createdAt":"2026-06-01T06:52:37.496Z","changelog":"Initial public release for Dataify Reddit Posts skill: - Provides guided submission of Reddit post collection jobs via three Dataify Builder modes: by post URL, by keyword, or by subreddit URL. - Manages API TOKEN retrieval and handling, including user prompts for token input, local saving instructions, and clear error messaging if missing. - Presents clear mode and parameter selection steps, default values, and options for collecting multiple groups per mode. - Validates user input for all fields (URLs, keywords, counts, and dropdowns) before submitting the Builder request. - Always returns the task ID and status after successful submission, and instructs users to monitor results at dataify.com/dashboard. - Fully supports both English and key Chinese collection/scraping prompts.","fileCount":7,"zipByteSize":9780}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17feed8b2qc486skqmjapxmjs86bd4f:dataify-reddit-posts","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17feed8b2qc486skqmjapxmjs86bd4f:dataify-reddit-posts` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/dataify-server/dataify-reddit-posts before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dataify-server-dataify-reddit-posts/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dataify-server-dataify-reddit-posts/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dataify-server-dataify-reddit-posts/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dataify-server-dataify-reddit-posts/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dataify-server-dataify-reddit-posts/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dataify-server-dataify-reddit-posts/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-12T20:15:16.453Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dataify-server-dataify-reddit-posts/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dataify-server-dataify-reddit-posts/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dataify-server-dataify-reddit-posts/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dataify-server-dataify-reddit-posts/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:57:09.548Z","emptyReason":null},"readme":"Skill: Dataify Reddit Posts\n\nOwner: dataify-server\n\nSummary: Collect Reddit Posts data and return results\n\nTags: latest:1.3.0\n\nVersion history:\n\nv1.3.0 | 2026-09-01T09:15:18.587Z | user\n\n默认返回最终采集结果，完善异步等待下载与安全恢复；修复空目标误执行、Quick Start、Token 配置和触发路由冲突，并补齐发布前自动化测试\n\nv1.2.0 | 2026-07-16T08:38:41.881Z | user\n\n新增能力路由与异步任务闭环，修复失效引用、Token 泄漏和 Skill 元数据兼容性\n\nv1.1.0 | 2026-06-08T02:07:32.555Z | user\n\n补全中文文档，更新目录结构\n\nv1.0.0 | 2026-06-01T06:52:37.496Z | auto\n\nInitial public release for Dataify Reddit Posts skill:\n\n- Provides guided submission of Reddit post collection jobs via three Dataify Builder modes: by post URL, by keyword, or by subreddit URL.\n- Manages API TOKEN retrieval and handling, including user prompts for token input, local saving instructions, and clear error messaging if missing.\n- Presents clear mode and parameter selection steps, default values, and options for collecting multiple groups per mode.\n- Validates user input for all fields (URLs, keywords, counts, and dropdowns) before submitting the Builder request.\n- Always returns the task ID and status after successful submission, and instructs users to monitor results at dataify.com/dashboard.\n- Fully supports both English and key Chinese collection/scraping prompts.\n\nArchive index:\n\nArchive v1.3.0: 9 files, 17065 bytes\n\nFiles: agents/openai.yaml (509b), assets/dataify-reddit-posts-large.svg (652b), assets/dataify-reddit-posts-small.svg (628b), references/modes-and-parameters.md (4072b), scripts/submit_dataify_reddit_posts.py (10245b), skill-card.md (1936b), SKILL.md (11433b), SKILL.zh-CN.md (15934b), _meta.json (139b)\n\nFile v1.3.0:SKILL.md\n\n---\nname: dataify-reddit-posts\ndescription: \"Collect Reddit posts by post URL, keyword, or subreddit URL. Do not use when only comments from a known post are required.\"\n---\n\n# Dataify Reddit Posts\n\nSubmit Reddit post information collection jobs through Dataify Builder. This skill is a guided wrapper for three collection modes:\n\n| Mode | Collector ID | Use For |\n| --- | --- | --- |\n| Post URL | `reddit_posts_by-url` | Collecting one or more Reddit posts by post URL. |\n| Keyword | `reddit_posts_by-keywords` | Collecting Reddit posts by search keyword. |\n| Subreddit URL | `reddit_posts_by-subredditurl` | Collecting Reddit posts from a subreddit URL with sort and time options. |\n\nAfter submission, continue monitoring the returned `task_id` and return the final result by default.\n\n## Quick Start\n\n**Input:** a subreddit keyword.\n\n```bash\npython3 scripts/submit_dataify_reddit_posts.py --mode keywords --keyword \"datascience\" --num-of-posts 10\n```\n\nThe command waits up to 10 minutes and prints the final JSON result. Add `--no-wait` only for submission-only behavior.\n\nIf `DATAIFY_API_TOKEN` is missing, log in or register at https://dashboard.dataify.com/login?utm_source=skill. New accounts receive 50 free credits.\n\n## API TOKEN Handling\n\nUse `DATAIFY_API_TOKEN` as the long-term saved token name.\n\n- If `DATAIFY_API_TOKEN` is saved locally, use it without asking the user to re-enter the token.\n- If the user does not have an API TOKEN, tell them they can register or log in at [Dataify](https://dashboard.dataify.com/login?utm_source=skill) to get one.\n- If the user wants to save it, give the appropriate command for their shell and ask them to run it; do not silently persist tokens without confirmation.\n- Do not call the Builder endpoint without a token.\n- Always call it `API TOKEN` in user-facing instructions. Prefer the environment variable name `DATAIFY_API_TOKEN` for saved local use.\n\nPowerShell examples for saving the token for the current session:\n\n```powershell\n$env:DATAIFY_API_TOKEN = \"YOUR_DATAIFY_API_TOKEN\"\n```\n\nFor a persistent user-level variable on Windows:\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"DATAIFY_API_TOKEN\", \"YOUR_DATAIFY_API_TOKEN\", \"User\")\n```\n\n## Core Workflow\n\n1. First ask the user to choose a collection mode: `url`, `keywords`, or `subredditurl`.\n2. After the user chooses a mode, show only that mode's parameter table and defaults.\n3. If the selected mode has dropdown fields, show the dropdown options as Markdown tables with `Label` and `Value` columns.\n4. Ask whether the user wants to change any value before running the task.\n5. Ask whether the user wants to collect multiple Reddit post groups for the selected mode.\n6. Normalize the final values into a list of parameter objects for the selected mode only.\n9. Validate the selected mode, URLs, numeric values, dropdown values, and file name.\n10. Submit the Builder request with the selected mode's `spider_id`.\n11. Read `data.task_id` from the Builder response and read `data.status` or `status` when present.\n## Mode Selection\n\nWhen the user invokes this skill, first show this Markdown table and ask them to choose one mode:\n\n| Label | Value |\n| --- | --- |\n| Collect Reddit posts by post URL | `url` |\n| Collect Reddit posts by keyword | `keywords` |\n| Collect Reddit posts by subreddit URL | `subredditurl` |\n\nAsk: \"Which collection mode do you want to use: `url`, `keywords`, or `subredditurl`?\"\n\nDo not submit a Builder request until the mode is clear.\n\n## Shared File Name Handling\n\n- `file_name` defaults to `{{TasksID}}`.\n- If the user changes `file_name`, submit the user-provided value.\n- `file_name` cannot be empty.\n- Send `file_name` as a Builder form field.\n\nFor detailed mode schemas and advanced fields, read [references/modes-and-parameters.md](references/modes-and-parameters.md) only when needed.\n\n## Dataify Builder Request\n\nUse form fields rather than hand-built URL-encoded strings.\n\n- URL: `https://scraperapi.dataify.com/builder?platform=1`\n- Method: `POST`\n- Authorization header: `Bearer DATAIFY_API_TOKEN`\n- Content type: `application/x-www-form-urlencoded`\n- Fixed fields:\n  - `spider_name=reddit.com`\n  - `spider_errors=true`\n- Mode-specific field:\n  - Post URL mode: `spider_id=reddit_posts_by-url`\n  - Keyword mode: `spider_id=reddit_posts_by-keywords`\n  - Subreddit URL mode: `spider_id=reddit_posts_by-subredditurl`\n- Default field:\n  - `file_name={{TasksID}}`\n- Dynamic field:\n  - `spider_parameters` must be a JSON string array.\n\n## Script\n\nFor stable execution, prefer `scripts/submit_dataify_reddit_posts.py` with Python 3.6 or newer instead of rewriting the Builder flow.\n\nPost URL mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --url \"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"\n```\n\nKeyword mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --keyword \"datascience\" --num-of-posts \"10\"\n```\n\nSubreddit URL mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --url \"https://www.reddit.com/r/battlefield2042\" --sort-by \"Rising\" --num-of-posts \"10\" --sort-by-time \"Now\"\n```\n\nTo override the saved environment token or file name:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --keyword \"datascience\" --file-name \"{{TasksID}}\"\n```\n\nTo submit multiple post URL groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"},{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]'\n```\n\nTo submit multiple keyword groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --params-json '[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"},{\"keyword\":\"machinelearning\",\"num_of_posts\":\"10\"}]'\n```\n\nTo submit multiple subreddit URL groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"},{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]'\n```\n\nThe script prints a JSON summary with `mode`, `spider_id`, `task_id`, `status`, `parameters`, `file_name` and `message`.\n\n## Troubleshooting\n\n`Unsupported mode` means the mode must be `url`, `keywords`, or `subredditurl`.\n\n`url cannot be empty` means the Reddit URL is missing.\n\n`url must start with https://www.reddit.com/` means the URL is outside the allowed Reddit domain.\n\n`keyword cannot be empty` means the Reddit keyword is missing.\n\n`num_of_posts must be an integer greater than or equal to 0` means the post count is invalid.\n\n`sort_by must be one of Hot, Top, New, Rising` means the subreddit sort option is invalid.\n\n`sort_by_time must be one of Now, Today, This Week, This Month, This Year, All Time` means the subreddit time option is invalid.\n\n`File name cannot be empty` means no usable `file_name` was provided.\n\n`Necessary parameters is empty!` usually means the Builder request was not submitted as form fields, `spider_parameters` was not a JSON string array, or the selected mode's object is missing required fields.\n\nMissing `task_id` usually means the authorization header, token, `spider_name`, selected `spider_id`, or `spider_parameters` is wrong.\n\n## Guardrails\n\n- Do not mix Post URL, Keyword, and Subreddit URL mode parameters in the same Builder request.\n- Do not submit a Builder request until the mode is clear.\n- Do not put `file_name` inside `spider_parameters`.\n- Do not use a Reddit URL from outside `https://www.reddit.com/`.\n- Use only `API TOKEN` and `DATAIFY_API_TOKEN` when referring to authentication.\n- Do not hard-code local Python paths.\n- Do not invent result fields.\n\n## Default completion behavior\n\nThe default deliverable is the collected result, not only a `task_id`.\n\n1. Submit the Builder task once and capture its `task_id`.\n2. Immediately continue with `$dataify-task-operations` and monitor the same task ID.\n   - Use the default 600-second wait for ordinary collections.\n   - Use `--timeout 1800` for media downloads or clearly high-volume, multi-page, or multi-input collections.\n3. When the task succeeds, download and return the final JSON result. Summarize large payloads while preserving access to the raw result.\n4. If monitoring times out or is interrupted, return the task ID and a resume command. Do not resubmit the paid task.\n5. Stop after submission only when the user explicitly asks for submission only, a task ID, or `--no-wait` behavior.\n\n## Parameter interaction policy\n\n- For a clear, low-risk, read-only, and low-cost request, apply safe defaults and execute immediately. A short execution summary is optional; do not pause for confirmation.\n- Ask only for a missing required input, a material ambiguity, a high-volume or multi-page scope, a media download, a choice that materially changes credit usage, an irreversible action, or an explicit user request to review parameters.\n- When confirmation is required, show only user-facing values that affect the target, scope, output, or cost. Prefer one concise sentence; use a compact table only when three or more consequential values are easier to compare.\n- Never show fixed fields, empty optional fields, unchanged defaults, credentials, or internal implementation parameters such as engine selectors, response-format flags, offsets, spider IDs, and file-name templates.\n- Keep advanced filters hidden unless the user asks for them or they are needed to resolve ambiguity. Never substitute documentation example values for missing required user input.\n- After returning results, offer relevant refinements instead of forcing all optional decisions before the first result.\n\n## Account CTA policy\n\n- Show a prominent Dataify account CTA only when the API token is missing, rejected/invalid, or the account has insufficient credits.\n- For a missing token, offer https://dashboard.dataify.com/login?utm_source=skill and state: New accounts receive 50 free credits. Never ask the user to paste the token into chat.\n- Detect the current operating system and shell. Show only the matching session-scoped setup command first (`export` for macOS/Linux shells, `$env:` for Windows PowerShell, or `set` for Windows Command Prompt). Show other platforms or persistent setup only when detection is ambiguous or the user asks.\n- After the user says the token is configured, verify only whether `DATAIFY_API_TOKEN` is present; never print its value. If verification succeeds, continue the original task without asking the user to repeat it.\n- Explain that persistent shell changes may require a new terminal or restarting the agent application. Do not recommend a project `.env` unless the execution path explicitly loads it, and ensure `.env` is ignored by version control.\n- For an invalid token, direct the user to API-key management without implying that a new registration is required. For insufficient credits, direct the user to balance or recharge management.\n- During normal submission, processing, and successful completion, do not promote registration or the Dashboard. Never expose the token or include it in CTA attribution parameters.\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn74z5hmmwk21kw8tpphd9w21x86bkdf\",\n  \"slug\": \"dataify-reddit-posts\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1788254118587\n}\n\nFile v1.3.0:references/modes-and-parameters.md\n\n# Modes and parameters\n\nRead this reference only when selecting a non-default mode or mapping advanced fields.\n\n## Post URL Mode Parameters\n\nUse this section only when the user chooses `url`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `url` | Yes | `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` | `spider_parameters` | Reddit post URL. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\n\nAlso ask: \"Do you want to collect multiple Reddit post URL groups? If yes, provide multiple `url` values.\"\n\nPost URL mode handling:\n\n- Trim leading and trailing whitespace from `url`.\n- `url` cannot be empty.\n- `url` must start with `https://www.reddit.com/`.\n- Submit `spider_id=reddit_posts_by-url`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]\n```\n\n## Keyword Mode Parameters\n\nUse this section only when the user chooses `keywords`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `keyword` | Yes | `datascience` | `spider_parameters` | Reddit post search keyword. |\n| `num_of_posts` | No | `10` | `spider_parameters` | Maximum number of posts to collect. Must be an integer greater than or equal to `0`. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\n\nAlso ask: \"Do you want to collect multiple Reddit keyword groups? If yes, provide multiple groups with `keyword` and `num_of_posts`.\"\n\nKeyword mode handling:\n\n- Trim leading and trailing whitespace from `keyword`.\n- `keyword` cannot be empty.\n- `num_of_posts` must be an integer greater than or equal to `0`.\n- Submit `spider_id=reddit_posts_by-keywords`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"}]\n```\n\n## Subreddit URL Mode Parameters\n\nUse this section only when the user chooses `subredditurl`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `url` | Yes | `https://www.reddit.com/r/battlefield2042` | `spider_parameters` | Subreddit URL. |\n| `sort_by` | No | `Hot` | `spider_parameters` | Post sort option. |\n| `num_of_posts` | No | `10` | `spider_parameters` | Maximum number of posts to collect. Must be an integer greater than or equal to `0`. |\n| `sort_by_time` | No | `Now` | `spider_parameters` | Time sort option. Time fields do not take effect with `Hot` and `New`. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nDropdown options for `sort_by`:\n\n| Label | Value |\n| --- | --- |\n| Hot | `Hot` |\n| Top | `Top` |\n| New | `New` |\n| Rising | `Rising` |\n\nDropdown options for `sort_by_time`:\n\n| Label | Value |\n| --- | --- |\n| Now | `Now` |\n| Today | `Today` |\n| This Week | `This Week` |\n| This Month | `This Month` |\n| This Year | `This Year` |\n| All Time | `All Time` |\n\n\nAlso ask: \"Do you want to collect multiple Reddit subreddit URL groups? If yes, provide multiple groups with `url`, `sort_by`, `num_of_posts`, and `sort_by_time`.\"\n\nSubreddit URL mode handling:\n\n- Trim leading and trailing whitespace from `url`.\n- `url` cannot be empty.\n- `url` must start with `https://www.reddit.com/`.\n- `sort_by` must be one of `Hot`, `Top`, `New`, or `Rising`.\n- `sort_by_time` must be one of `Now`, `Today`, `This Week`, `This Month`, `This Year`, or `All Time`.\n- `num_of_posts` must be an integer greater than or equal to `0`.\n- Time fields do not take effect with `Hot` and `New`; keep the submitted value if the user provides it.\n- Submit `spider_id=reddit_posts_by-subredditurl`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]\n```\n\nFile v1.3.0:skill-card.md\n\n## Description:\n\nCollect Reddit posts by post URL, keyword, or subreddit URL through Dataify Builder.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[dataify-server](https://clawhub.ai/user/dataify-server)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to submit and monitor Dataify Builder jobs that collect Reddit posts by URL, keyword, or subreddit URL. It is intended to return the final collected JSON result when monitoring completes.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security review reports that the skill imports unaudited sibling runtime code and passes the Dataify API token to it.\n\nMitigation: Install only after reviewing or pinning the expected dataify-task-operations runtime, and avoid pasting API tokens into chat.\n\nRisk: Using the Dataify Builder service may consume Dataify credits.\n\nMitigation: Review the selected collection mode and requested volume before execution, especially for multiple inputs or high-volume jobs.\n\n## Reference(s):\n\n- [Modes and parameters](references/modes-and-parameters.md)\n- [ClawHub skill page](https://clawhub.ai/dataify-server/skills/dataify-reddit-posts)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, JSON]\n\n**Output Format:** [Markdown guidance with shell commands and JSON task or result payloads]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May return a task_id and resume guidance if asynchronous monitoring times out; otherwise returns the final collected JSON result.]\n\n## Skill Version(s):\n\n1.3.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.3.0:SKILL.zh-CN.md\n\n---\nname: dataify-reddit-posts\ndescription: \"提交 Dataify Reddit Post Information Builder 任务，支持三种 Reddit 帖子采集模式。当用户需要 Reddit post information collection tool、采集/抓取/爬取 Reddit posts 或 post data，按 post URL、keyword、subreddit URL 采集 Reddit posts，创建 reddit_posts_by-url、reddit_posts_by-keywords 或 reddit_posts_by-subredditurl 任务，或表达 Reddit 帖子采集/抓取、帖子信息采集/抓取、帖子 URL 采集、关键词采集、subreddit url 采集等含义时使用。也用于接收 task_id/status、配置 DATAIFY_API_TOKEN 或排查此 Dataify Builder 请求。\"\n---\n\n# Dataify Reddit Posts\n\n通过 Dataify Builder 提交 Reddit 帖子信息采集任务。本技能是三种采集模式的引导封装：\n\n| 模式 | 采集器 ID | 用途 |\n| --- | --- | --- |\n| 帖子 URL | `reddit_posts_by-url` | 通过帖子 URL 采集一个或多个 Reddit 帖子。 |\n| 关键词 | `reddit_posts_by-keywords` | 通过搜索关键词采集 Reddit 帖子。 |\n| Subreddit URL | `reddit_posts_by-subredditurl` | 通过 subreddit URL 采集 Reddit 帖子，支持排序和时间选项。 |\n\n提交成功后，向用户提供 `task_id`、返回的或推断的状态，并告知用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill) 查看结果。\n\n## API TOKEN 处理\n\n使用 `DATAIFY_API_TOKEN` 作为长期保存的 token 名称。\n\n- 如果用户在请求中提供了 token，则在本次运行中使用该 token。\n- 如果未提供 token，先检查环境中是否已在本地保存 `DATAIFY_API_TOKEN`。\n- 如果本地已保存 `DATAIFY_API_TOKEN`，则直接使用，无需要求用户重新输入。\n- 如果本地没有可用的 token，告知用户需要提供 Dataify API TOKEN。\n- 如果用户没有 API TOKEN，告知用户可以在 [Dataify](https://dashboard.dataify.com/login?utm_source=skill) 注册或登录以获取。\n- 如果用户已有 API TOKEN，告知用户可以在 [Dataify](https://dashboard.dataify.com?utm_source=skill) 右上角找到。\n- 用户提供 API TOKEN 后，如果本地未保存 `DATAIFY_API_TOKEN`，询问是否将其保存为 `DATAIFY_API_TOKEN` 以供后续使用。\n- 如果用户希望保存，提供适合其 shell 的命令并要求其执行；不要在未经确认的情况下静默保存 token。\n- 没有 token 不要调用 Builder 接口。\n- 在面向用户的说明中始终称其为 `API TOKEN`。保存到本地时优先使用环境变量名 `DATAIFY_API_TOKEN`。\n\nPowerShell 示例，为当前会话保存 token：\n\n```powershell\n$env:DATAIFY_API_TOKEN = \"YOUR_DATAIFY_API_TOKEN\"\n```\n\n在 Windows 上设置持久的用户级变量：\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"DATAIFY_API_TOKEN\", \"YOUR_DATAIFY_API_TOKEN\", \"User\")\n```\n\n## 核心工作流程\n\n1. 首先询问用户选择采集模式：`url`、`keywords` 或 `subredditurl`。\n2. 用户选择模式后，仅展示该模式的参数表格和默认值。\n3. 如果所选模式有下拉字段，以包含 `Label` 和 `Value` 列的 Markdown 表格展示下拉选项。\n4. 询问用户是否需要在运行任务前修改任何值。\n5. 询问用户是否需要为所选模式采集多组 Reddit 帖子。\n6. 将最终值规范化为仅包含所选模式的参数对象列表。\n7. 从显式输入或已保存的 `DATAIFY_API_TOKEN` 中获取 Dataify token。\n8. 如果没有可用的 token，要求用户输入 API TOKEN 并询问是否将其保存为 `DATAIFY_API_TOKEN`。\n9. 验证所选模式、URL、数值、下拉值和文件名。\n10. 使用所选模式的 `spider_id` 提交 Builder 请求。\n11. 从 Builder 响应中读取 `data.task_id`，并在存在时读取 `data.status` 或 `status`。\n13. 告知用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill) 查看或管理结果。\n\n## 模式选择\n\n当用户调用此技能时，首先展示以下 Markdown 表格并要求选择一种模式：\n\n| 标签 | 值 |\n| --- | --- |\n| 通过帖子 URL 采集 Reddit 帖子 | `url` |\n| 通过关键词采集 Reddit 帖子 | `keywords` |\n| 通过 subreddit URL 采集 Reddit 帖子 | `subredditurl` |\n\n询问：\"您想使用哪种采集模式：`url`、`keywords` 还是 `subredditurl`？\"\n\n在模式明确之前不要提交 Builder 请求。\n\n## 帖子 URL 模式参数\n\n仅当用户选择 `url` 时使用本节。\n\n| 字段 | 必填 | 默认值 | 位置 | 说明 |\n| --- | --- | --- | --- | --- |\n| `url` | 是 | `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` | `spider_parameters` | Reddit 帖子 URL。 |\n| `file_name` | 否 | `{{TasksID}}` | Builder 表单字段 | 用户未更改时使用默认值。 |\n\n\n同时询问：\"您是否需要采集多组 Reddit 帖子 URL？如果是，请提供多个 `url` 值。\"\n\n帖子 URL 模式处理：\n\n- `url` 为必填项。如果用户未提供，询问该必填值；不要使用文档示例值代替用户输入。\n- 去除 `url` 的前后空白字符。\n- `url` 不能为空。\n- `url` 必须以 `https://www.reddit.com/` 开头。\n- 提交 `spider_id=reddit_posts_by-url`。\n- 将 `spider_parameters` 作为包含一个或多个对象的 JSON 字符串提交，格式如下：\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]\n```\n\n## 关键词模式参数\n\n仅当用户选择 `keywords` 时使用本节。\n\n| 字段 | 必填 | 默认值 | 位置 | 说明 |\n| --- | --- | --- | --- | --- |\n| `keyword` | 是 | `datascience` | `spider_parameters` | Reddit 帖子搜索关键词。 |\n| `num_of_posts` | 否 | `10` | `spider_parameters` | 最大采集帖子数。必须为大于或等于 `0` 的整数。 |\n| `file_name` | 否 | `{{TasksID}}` | Builder 表单字段 | 用户未更改时使用默认值。 |\n\n\n同时询问：\"您是否需要采集多组 Reddit 关键词？如果是，请提供多组 `keyword` 和 `num_of_posts`。\"\n\n关键词模式处理：\n\n- `keyword` 为必填项。如果用户未提供，询问该必填值；不要使用文档示例值代替用户输入。\n- 去除 `keyword` 的前后空白字符。\n- `keyword` 不能为空。\n- `num_of_posts` 必须为大于或等于 `0` 的整数。\n- 提交 `spider_id=reddit_posts_by-keywords`。\n- 将 `spider_parameters` 作为包含一个或多个对象的 JSON 字符串提交，格式如下：\n\n```json\n[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"}]\n```\n\n## Subreddit URL 模式参数\n\n仅当用户选择 `subredditurl` 时使用本节。\n\n| 字段 | 必填 | 默认值 | 位置 | 说明 |\n| --- | --- | --- | --- | --- |\n| `url` | 是 | `https://www.reddit.com/r/battlefield2042` | `spider_parameters` | Subreddit URL。 |\n| `sort_by` | 否 | `Hot` | `spider_parameters` | 帖子排序选项。 |\n| `num_of_posts` | 否 | `10` | `spider_parameters` | 最大采集帖子数。必须为大于或等于 `0` 的整数。 |\n| `sort_by_time` | 否 | `Now` | `spider_parameters` | 时间排序选项。时间字段在 `Hot` 和 `New` 排序下不生效。 |\n| `file_name` | 否 | `{{TasksID}}` | Builder 表单字段 | 用户未更改时使用默认值。 |\n\n`sort_by` 下拉选项：\n\n| 标签 | 值 |\n| --- | --- |\n| Hot | `Hot` |\n| Top | `Top` |\n| New | `New` |\n| Rising | `Rising` |\n\n`sort_by_time` 下拉选项：\n\n| 标签 | 值 |\n| --- | --- |\n| Now | `Now` |\n| Today | `Today` |\n| This Week | `This Week` |\n| This Month | `This Month` |\n| This Year | `This Year` |\n| All Time | `All Time` |\n\n\n同时询问：\"您是否需要采集多组 Reddit subreddit URL？如果是，请提供多组 `url`、`sort_by`、`num_of_posts` 和 `sort_by_time`。\"\n\nSubreddit URL 模式处理：\n\n- `url` 为必填项。如果用户未提供，询问该必填值；不要使用文档示例值代替用户输入。\n- 去除 `url` 的前后空白字符。\n- `url` 不能为空。\n- `url` 必须以 `https://www.reddit.com/` 开头。\n- `sort_by` 必须为 `Hot`、`Top`、`New` 或 `Rising` 之一。\n- `sort_by_time` 必须为 `Now`、`Today`、`This Week`、`This Month`、`This Year` 或 `All Time` 之一。\n- `num_of_posts` 必须为大于或等于 `0` 的整数。\n- 时间字段在 `Hot` 和 `New` 排序下不生效；如果用户提供了值，仍保留提交。\n- 提交 `spider_id=reddit_posts_by-subredditurl`。\n- 将 `spider_parameters` 作为包含一个或多个对象的 JSON 字符串提交，格式如下：\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]\n```\n\n## 共享文件名处理\n\n- `file_name` 默认为 `{{TasksID}}`。\n- 如果用户更改了 `file_name`，提交用户提供的值。\n- `file_name` 不能为空。\n- 将 `file_name` 作为 Builder 表单字段发送。\n\n## Dataify Builder 请求\n\n使用表单字段而非手动构建的 URL 编码字符串。\n\n- URL：`https://scraperapi.dataify.com/builder?platform=1`\n- 方法：`POST`\n- Authorization 请求头：`Bearer DATAIFY_API_TOKEN`\n- Content type：`application/x-www-form-urlencoded`\n- 固定字段：\n  - `spider_name=reddit.com`\n  - `spider_errors=true`\n- 模式特定字段：\n  - 帖子 URL 模式：`spider_id=reddit_posts_by-url`\n  - 关键词模式：`spider_id=reddit_posts_by-keywords`\n  - Subreddit URL 模式：`spider_id=reddit_posts_by-subredditurl`\n- 默认字段：\n  - `file_name={{TasksID}}`\n- 动态字段：\n  - `spider_parameters` 必须为 JSON 字符串数组。\n\n## 脚本\n\n为确保稳定执行，优先使用 Python 3.6 或更新版本运行 `scripts/submit_dataify_reddit_posts.py`，而非重写 Builder 流程。\n\n帖子 URL 模式：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --url \"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"\n```\n\n关键词模式：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --keyword \"datascience\" --num-of-posts \"10\"\n```\n\nSubreddit URL 模式：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --url \"https://www.reddit.com/r/battlefield2042\" --sort-by \"Rising\" --num-of-posts \"10\" --sort-by-time \"Now\"\n```\n\n覆盖已保存的环境 token 或文件名：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --keyword \"datascience\" --file-name \"{{TasksID}}\"\n```\n\n提交多组帖子 URL：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"},{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]'\n```\n\n提交多组关键词：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --params-json '[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"},{\"keyword\":\"machinelearning\",\"num_of_posts\":\"10\"}]'\n```\n\n提交多组 subreddit URL：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"},{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]'\n```\n\n脚本会打印包含 `mode`、`spider_id`、`task_id`、`status`、`parameters`、`file_name`、`dashboard_url` 和 `message` 的 JSON 摘要。\n\n## 故障排除\n\n`Missing Dataify API TOKEN` 表示未传递显式 token 且本地未保存 `DATAIFY_API_TOKEN`。告知用户需要提供 Dataify API TOKEN，询问是否将其保存为 `DATAIFY_API_TOKEN`，或告知用户可以在 [Dataify](https://dashboard.dataify.com/login?utm_source=skill) 注册或登录以获取。如果用户已有 token，告知其位于 [Dataify](https://dashboard.dataify.com?utm_source=skill) 右上角。\n\n`Unsupported mode` 表示模式必须为 `url`、`keywords` 或 `subredditurl`。\n\n`url cannot be empty` 表示缺少 Reddit URL。\n\n`url must start with https://www.reddit.com/` 表示 URL 不在允许的 Reddit 域名范围内。\n\n`keyword cannot be empty` 表示缺少 Reddit 关键词。\n\n`num_of_posts must be an integer greater than or equal to 0` 表示帖子数量无效。\n\n`sort_by must be one of Hot, Top, New, Rising` 表示 subreddit 排序选项无效。\n\n`sort_by_time must be one of Now, Today, This Week, This Month, This Year, All Time` 表示 subreddit 时间选项无效。\n\n`File name cannot be empty` 表示未提供可用的 `file_name`。\n\n`Necessary parameters is empty!` 通常表示 Builder 请求未以表单字段提交、`spider_parameters` 不是 JSON 字符串数组，或所选模式的对象缺少必填字段。\n\n缺少 `task_id` 通常表示 authorization 请求头、token、`spider_name`、所选 `spider_id` 或 `spider_parameters` 有误。\n\n## 安全规则\n\n- 不要在同一个 Builder 请求中混合帖子 URL、关键词和 Subreddit URL 模式的参数。\n- 在模式明确之前不要提交 Builder 请求。\n- 不要将 `file_name` 放入 `spider_parameters` 中。\n- 不要使用 `https://www.reddit.com/` 以外的 Reddit URL。\n- 提及身份验证时仅使用 `API TOKEN` 和 `DATAIFY_API_TOKEN`。\n- 不要硬编码本地 Python 路径。\n- 不要编造结果字段。\n- 任务创建成功后始终引导用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill)。\n\n## 参数交互策略\n\n- 当请求意图明确、只读、低风险且成本较低时，使用安全默认值直接执行。可以用一句话说明执行内容，但不要暂停等待确认。\n- 只在缺少必填输入、存在会明显改变结果的歧义、大批量或多页采集、媒体下载、会明显增加积分消耗、不可逆操作，或用户明确要求查看参数时询问。\n- 必须确认时，只展示会影响目标、范围、输出或成本的用户参数。优先使用一句简短说明；只有三个及以上关键值确实需要比较时才使用精简表格。\n- 不要展示固定字段、空的可选字段、未修改的默认值、凭据或内部实现参数，例如引擎选择、响应格式开关、偏移量、spider ID 和文件名模板。\n- 默认隐藏高级筛选项，除非用户主动询问或需要它们消除歧义。不得用文档示例值代替用户缺失的必填输入。\n- 先返回首个结果，再提供相关的细化选项，不要在首次执行前强迫用户决定所有可选项。\n\n## Account CTA policy\n\n- Show a prominent Dataify account CTA only when the API token is missing, rejected/invalid, or the account has insufficient credits.\n- For a missing token, offer https://dashboard.dataify.com/login?utm_source=skill and state: New accounts receive 50 free credits. Never ask the user to paste the token into chat.\n- Detect the current operating system and shell. Show only the matching session-scoped setup command first (`export` for macOS/Linux shells, `$env:` for Windows PowerShell, or `set` for Windows Command Prompt). Show other platforms or persistent setup only when detection is ambiguous or the user asks.\n- After the user says the token is configured, verify only whether `DATAIFY_API_TOKEN` is present; never print its value. If verification succeeds, continue the original task without asking the user to repeat it.\n- Explain that persistent shell changes may require a new terminal or restarting the agent application. Do not recommend a project `.env` unless the execution path explicitly loads it, and ensure `.env` is ignored by version control.\n- For an invalid token, direct the user to API-key management without implying that a new registration is required. For insufficient credits, direct the user to balance or recharge management.\n- During normal submission, processing, and successful completion, do not promote registration or the Dashboard. Never expose the token or include it in CTA attribution parameters.\n\nFile v1.3.0:agents/openai.yaml\n\ninterface:\n  display_name: \"Dataify Reddit Posts\"\n  short_description: \"Collect Reddit Posts data and return results\"\n  icon_small: \"./assets/dataify-reddit-posts-small.svg\"\n  icon_large: \"./assets/dataify-reddit-posts-large.svg\"\n  default_prompt: \"Use $dataify-reddit-posts to complete the requested Dataify collection, wait for the asynchronous task, and return the final collected result. Stop at task submission only when I explicitly request no-wait behavior.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v1.2.0: 8 files, 14058 bytes\n\nFiles: agents/openai.yaml (472b), assets/dataify-reddit-posts-large.svg (652b), assets/dataify-reddit-posts-small.svg (628b), scripts/submit_dataify_reddit_posts.py (9653b), skill-card.md (1980b), SKILL.md (14546b), SKILL.zh-CN.md (13820b), _meta.json (139b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: dataify-reddit-posts\ndescription: Submit Dataify Reddit Post Information Builder tasks for three Reddit post collection modes. Use when the user wants the Reddit post information collection tool, collect Reddit posts, scrape Reddit posts, crawl Reddit post data, collect Reddit posts by post URL, collect Reddit posts by keyword, collect Reddit posts by subreddit URL, create Dataify reddit_posts_by-url, reddit_posts_by-keywords, or reddit_posts_by-subredditurl tasks, or asks in Chinese with meanings like \"Reddit 帖子采集\", \"Reddit 帖子抓取\", \"Reddit帖子信息采集\", \"Reddit帖子信息抓取\", \"Reddit帖子URL采集\", \"Reddit关键词采集\", \"Reddit subreddit url采集\", or similar Reddit post noun plus collection/scraping action wording. Also use when receiving task_id/status, configuring DATAIFY_API_TOKEN, or troubleshooting this Dataify Builder request.\n---\n\n# Dataify Reddit Posts\n\nSubmit Reddit post information collection jobs through Dataify Builder. This skill is a guided wrapper for three collection modes:\n\n| Mode | Collector ID | Use For |\n| --- | --- | --- |\n| Post URL | `reddit_posts_by-url` | Collecting one or more Reddit posts by post URL. |\n| Keyword | `reddit_posts_by-keywords` | Collecting Reddit posts by search keyword. |\n| Subreddit URL | `reddit_posts_by-subredditurl` | Collecting Reddit posts from a subreddit URL with sort and time options. |\n\nAfter a successful submission, give the user the `task_id`, the returned or inferred status, and tell them to visit [Dataify](https://dashboard.dataify.com?utm_source=skill) to view results.\n\n## API TOKEN Handling\n\nUse `DATAIFY_API_TOKEN` as the long-term saved token name.\n\n- If the user provides a token in the request, use it for this run.\n- If no token is provided, first check whether `DATAIFY_API_TOKEN` is already saved locally in the environment.\n- If `DATAIFY_API_TOKEN` is saved locally, use it without asking the user to re-enter the token.\n- If no token is available locally, tell the user they need to provide a Dataify API TOKEN.\n- If the user does not have an API TOKEN, tell them they can register or log in at [Dataify](https://dashboard.dataify.com/login?utm_source=skill) to get one.\n- If the user already has an API TOKEN, tell them it is available in the top-right area of [Dataify](https://dashboard.dataify.com?utm_source=skill).\n- After the user provides an API TOKEN and no local `DATAIFY_API_TOKEN` is saved, ask whether they want to save it locally as `DATAIFY_API_TOKEN` for future use.\n- If the user wants to save it, give the appropriate command for their shell and ask them to run it; do not silently persist tokens without confirmation.\n- Do not call the Builder endpoint without a token.\n- Always call it `API TOKEN` in user-facing instructions. Prefer the environment variable name `DATAIFY_API_TOKEN` for saved local use.\n\nPowerShell examples for saving the token for the current session:\n\n```powershell\n$env:DATAIFY_API_TOKEN = \"YOUR_DATAIFY_API_TOKEN\"\n```\n\nFor a persistent user-level variable on Windows:\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"DATAIFY_API_TOKEN\", \"YOUR_DATAIFY_API_TOKEN\", \"User\")\n```\n\n## Core Workflow\n\n1. First ask the user to choose a collection mode: `url`, `keywords`, or `subredditurl`.\n2. After the user chooses a mode, show only that mode's parameter table and defaults.\n3. If the selected mode has dropdown fields, show the dropdown options as Markdown tables with `Label` and `Value` columns.\n4. Ask whether the user wants to change any value before running the task.\n5. Ask whether the user wants to collect multiple Reddit post groups for the selected mode.\n6. Normalize the final values into a list of parameter objects for the selected mode only.\n7. Resolve the Dataify token from explicit input or saved `DATAIFY_API_TOKEN`.\n8. If no token is available, ask the user to enter their API TOKEN and ask whether to save it as `DATAIFY_API_TOKEN`.\n9. Validate the selected mode, URLs, numeric values, dropdown values, and file name.\n10. Submit the Builder request with the selected mode's `spider_id`.\n11. Read `data.task_id` from the Builder response and read `data.status` or `status` when present.\n12. Stop after Builder succeeds.\n13. Tell the user to visit [Dataify](https://dashboard.dataify.com?utm_source=skill) to view or manage results.\n\n## Mode Selection\n\nWhen the user invokes this skill, first show this Markdown table and ask them to choose one mode:\n\n| Label | Value |\n| --- | --- |\n| Collect Reddit posts by post URL | `url` |\n| Collect Reddit posts by keyword | `keywords` |\n| Collect Reddit posts by subreddit URL | `subredditurl` |\n\nAsk: \"Which collection mode do you want to use: `url`, `keywords`, or `subredditurl`?\"\n\nDo not submit a Builder request until the mode is clear.\n\n## Post URL Mode Parameters\n\nUse this section only when the user chooses `url`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `url` | Yes | `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` | `spider_parameters` | Reddit post URL. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nThen ask: \"Do you want to change any of these values before I submit the task?\"\n\nAlso ask: \"Do you want to collect multiple Reddit post URL groups? If yes, provide multiple `url` values.\"\n\nPost URL mode handling:\n\n- `url` is required. If the user does not provide it, use the default `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` only after showing it in the parameter confirmation table.\n- Trim leading and trailing whitespace from `url`.\n- `url` cannot be empty.\n- `url` must start with `https://www.reddit.com/`.\n- Submit `spider_id=reddit_posts_by-url`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]\n```\n\n## Keyword Mode Parameters\n\nUse this section only when the user chooses `keywords`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `keyword` | Yes | `datascience` | `spider_parameters` | Reddit post search keyword. |\n| `num_of_posts` | No | `10` | `spider_parameters` | Maximum number of posts to collect. Must be an integer greater than or equal to `0`. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nThen ask: \"Do you want to change any of these values before I submit the task?\"\n\nAlso ask: \"Do you want to collect multiple Reddit keyword groups? If yes, provide multiple groups with `keyword` and `num_of_posts`.\"\n\nKeyword mode handling:\n\n- `keyword` is required. If the user does not provide it, use the default `datascience` only after showing it in the parameter confirmation table.\n- Trim leading and trailing whitespace from `keyword`.\n- `keyword` cannot be empty.\n- `num_of_posts` must be an integer greater than or equal to `0`.\n- Submit `spider_id=reddit_posts_by-keywords`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"}]\n```\n\n## Subreddit URL Mode Parameters\n\nUse this section only when the user chooses `subredditurl`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `url` | Yes | `https://www.reddit.com/r/battlefield2042` | `spider_parameters` | Subreddit URL. |\n| `sort_by` | No | `Hot` | `spider_parameters` | Post sort option. |\n| `num_of_posts` | No | `10` | `spider_parameters` | Maximum number of posts to collect. Must be an integer greater than or equal to `0`. |\n| `sort_by_time` | No | `Now` | `spider_parameters` | Time sort option. Time fields do not take effect with `Hot` and `New`. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nDropdown options for `sort_by`:\n\n| Label | Value |\n| --- | --- |\n| Hot | `Hot` |\n| Top | `Top` |\n| New | `New` |\n| Rising | `Rising` |\n\nDropdown options for `sort_by_time`:\n\n| Label | Value |\n| --- | --- |\n| Now | `Now` |\n| Today | `Today` |\n| This Week | `This Week` |\n| This Month | `This Month` |\n| This Year | `This Year` |\n| All Time | `All Time` |\n\nThen ask: \"Do you want to change any of these values before I submit the task?\"\n\nAlso ask: \"Do you want to collect multiple Reddit subreddit URL groups? If yes, provide multiple groups with `url`, `sort_by`, `num_of_posts`, and `sort_by_time`.\"\n\nSubreddit URL mode handling:\n\n- `url` is required. If the user does not provide it, use the default `https://www.reddit.com/r/battlefield2042` only after showing it in the parameter confirmation table.\n- Trim leading and trailing whitespace from `url`.\n- `url` cannot be empty.\n- `url` must start with `https://www.reddit.com/`.\n- `sort_by` must be one of `Hot`, `Top`, `New`, or `Rising`.\n- `sort_by_time` must be one of `Now`, `Today`, `This Week`, `This Month`, `This Year`, or `All Time`.\n- `num_of_posts` must be an integer greater than or equal to `0`.\n- Time fields do not take effect with `Hot` and `New`; keep the submitted value if the user provides it.\n- Submit `spider_id=reddit_posts_by-subredditurl`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]\n```\n\n## Shared File Name Handling\n\n- `file_name` defaults to `{{TasksID}}`.\n- If the user changes `file_name`, submit the user-provided value.\n- `file_name` cannot be empty.\n- Send `file_name` as a Builder form field.\n\n## Dataify Builder Request\n\nUse form fields rather than hand-built URL-encoded strings.\n\n- URL: `https://scraperapi.dataify.com/builder?platform=1`\n- Method: `POST`\n- Authorization header: `Bearer DATAIFY_API_TOKEN`\n- Content type: `application/x-www-form-urlencoded`\n- Fixed fields:\n  - `spider_name=reddit.com`\n  - `spider_errors=true`\n- Mode-specific field:\n  - Post URL mode: `spider_id=reddit_posts_by-url`\n  - Keyword mode: `spider_id=reddit_posts_by-keywords`\n  - Subreddit URL mode: `spider_id=reddit_posts_by-subredditurl`\n- Default field:\n  - `file_name={{TasksID}}`\n- Dynamic field:\n  - `spider_parameters` must be a JSON string array.\n\n## Script\n\nFor stable execution, prefer `scripts/submit_dataify_reddit_posts.py` with Python 3.6 or newer instead of rewriting the Builder flow.\n\nPost URL mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --url \"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"\n```\n\nKeyword mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --keyword \"datascience\" --num-of-posts \"10\"\n```\n\nSubreddit URL mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --url \"https://www.reddit.com/r/battlefield2042\" --sort-by \"Rising\" --num-of-posts \"10\" --sort-by-time \"Now\"\n```\n\nTo override the saved environment token or file name:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --api-token \"YOUR_DATAIFY_API_TOKEN\" --mode keywords --keyword \"datascience\" --file-name \"{{TasksID}}\"\n```\n\nTo submit multiple post URL groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"},{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]'\n```\n\nTo submit multiple keyword groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --params-json '[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"},{\"keyword\":\"machinelearning\",\"num_of_posts\":\"10\"}]'\n```\n\nTo submit multiple subreddit URL groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"},{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]'\n```\n\nThe script prints a JSON summary with `mode`, `spider_id`, `task_id`, `status`, `parameters`, `file_name`, `dashboard_url`, and `message`.\n\n## Troubleshooting\n\n`Missing Dataify API TOKEN` means no explicit token was passed and `DATAIFY_API_TOKEN` is not saved locally. Tell the user they need to provide their Dataify API TOKEN, ask whether they want to save it as `DATAIFY_API_TOKEN`, or tell them they can register or log in at [Dataify](https://dashboard.dataify.com/login?utm_source=skill) to get one. If they already have a token, tell them it is in the top-right area of [Dataify](https://dashboard.dataify.com?utm_source=skill).\n\n`Unsupported mode` means the mode must be `url`, `keywords`, or `subredditurl`.\n\n`url cannot be empty` means the Reddit URL is missing.\n\n`url must start with https://www.reddit.com/` means the URL is outside the allowed Reddit domain.\n\n`keyword cannot be empty` means the Reddit keyword is missing.\n\n`num_of_posts must be an integer greater than or equal to 0` means the post count is invalid.\n\n`sort_by must be one of Hot, Top, New, Rising` means the subreddit sort option is invalid.\n\n`sort_by_time must be one of Now, Today, This Week, This Month, This Year, All Time` means the subreddit time option is invalid.\n\n`File name cannot be empty` means no usable `file_name` was provided.\n\n`Necessary parameters is empty!` usually means the Builder request was not submitted as form fields, `spider_parameters` was not a JSON string array, or the selected mode's object is missing required fields.\n\nMissing `task_id` usually means the authorization header, token, `spider_name`, selected `spider_id`, or `spider_parameters` is wrong.\n\n## Guardrails\n\n- Do not mix Post URL, Keyword, and Subreddit URL mode parameters in the same Builder request.\n- Do not submit a Builder request until the mode is clear.\n- Do not put `file_name` inside `spider_parameters`.\n- Do not use a Reddit URL from outside `https://www.reddit.com/`.\n- Use only `API TOKEN` and `DATAIFY_API_TOKEN` when referring to authentication.\n- Do not hard-code local Python paths.\n- Do not invent result fields.\n- Always direct the user to [Dataify](https://dashboard.dataify.com?utm_source=skill) after successful task creation.\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn74z5hmmwk21kw8tpphd9w21x86bkdf\",\n  \"slug\": \"dataify-reddit-posts\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1784191121881\n}\n\nFile v1.2.0:skill-card.md\n\n## Description: <br>\nSubmits Reddit post collection jobs through Dataify Builder by post URL, keyword, or subreddit URL. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[dataify-server](https://clawhub.ai/user/dataify-server) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to configure and submit Dataify Reddit post collection tasks, then receive a task ID, status, and Dataify dashboard guidance for viewing results. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill sends selected Reddit URLs, keywords, subreddit inputs, task settings, and authentication to Dataify. <br>\nMitigation: Install and run it only when submitting Reddit collection tasks to Dataify is intended, and review task settings before submission. <br>\nRisk: DATAIFY_API_TOKEN is a credential. <br>\nMitigation: Handle it as a secret and avoid exposing it in prompts, logs, or shared command history. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/dataify-server/skills/dataify-reddit-posts) <br>\n- [Dataify dashboard](https://dashboard.dataify.com?utm_source=skill) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown instructions with optional shell commands and JSON task summaries] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May submit Reddit URLs, keywords, subreddit inputs, task settings, and a Dataify API token to Dataify when run.] <br>\n\n## Skill Version(s): <br>\n1.2.0 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.2.0:SKILL.zh-CN.md\n\n---\nname: dataify-reddit-posts\ndescription: \"提交 Dataify Reddit Post Information Builder 任务，支持三种 Reddit 帖子采集模式。当用户需要 Reddit post information collection tool、采集/抓取/爬取 Reddit posts 或 post data，按 post URL、keyword、subreddit URL 采集 Reddit posts，创建 reddit_posts_by-url、reddit_posts_by-keywords 或 reddit_posts_by-subredditurl 任务，或表达 Reddit 帖子采集/抓取、帖子信息采集/抓取、帖子 URL 采集、关键词采集、subreddit url 采集等含义时使用。也用于接收 task_id/status、配置 DATAIFY_API_TOKEN 或排查此 Dataify Builder 请求。\"\n---\n\n# Dataify Reddit Posts\n\n通过 Dataify Builder 提交 Reddit 帖子信息采集任务。本技能是三种采集模式的引导封装：\n\n| 模式 | 采集器 ID | 用途 |\n| --- | --- | --- |\n| 帖子 URL | `reddit_posts_by-url` | 通过帖子 URL 采集一个或多个 Reddit 帖子。 |\n| 关键词 | `reddit_posts_by-keywords` | 通过搜索关键词采集 Reddit 帖子。 |\n| Subreddit URL | `reddit_posts_by-subredditurl` | 通过 subreddit URL 采集 Reddit 帖子，支持排序和时间选项。 |\n\n提交成功后，向用户提供 `task_id`、返回的或推断的状态，并告知用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill) 查看结果。\n\n## API TOKEN 处理\n\n使用 `DATAIFY_API_TOKEN` 作为长期保存的 token 名称。\n\n- 如果用户在请求中提供了 token，则在本次运行中使用该 token。\n- 如果未提供 token，先检查环境中是否已在本地保存 `DATAIFY_API_TOKEN`。\n- 如果本地已保存 `DATAIFY_API_TOKEN`，则直接使用，无需要求用户重新输入。\n- 如果本地没有可用的 token，告知用户需要提供 Dataify API TOKEN。\n- 如果用户没有 API TOKEN，告知用户可以在 [Dataify](https://dashboard.dataify.com/login?utm_source=skill) 注册或登录以获取。\n- 如果用户已有 API TOKEN，告知用户可以在 [Dataify](https://dashboard.dataify.com?utm_source=skill) 右上角找到。\n- 用户提供 API TOKEN 后，如果本地未保存 `DATAIFY_API_TOKEN`，询问是否将其保存为 `DATAIFY_API_TOKEN` 以供后续使用。\n- 如果用户希望保存，提供适合其 shell 的命令并要求其执行；不要在未经确认的情况下静默保存 token。\n- 没有 token 不要调用 Builder 接口。\n- 在面向用户的说明中始终称其为 `API TOKEN`。保存到本地时优先使用环境变量名 `DATAIFY_API_TOKEN`。\n\nPowerShell 示例，为当前会话保存 token：\n\n```powershell\n$env:DATAIFY_API_TOKEN = \"YOUR_DATAIFY_API_TOKEN\"\n```\n\n在 Windows 上设置持久的用户级变量：\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"DATAIFY_API_TOKEN\", \"YOUR_DATAIFY_API_TOKEN\", \"User\")\n```\n\n## 核心工作流程\n\n1. 首先询问用户选择采集模式：`url`、`keywords` 或 `subredditurl`。\n2. 用户选择模式后，仅展示该模式的参数表格和默认值。\n3. 如果所选模式有下拉字段，以包含 `Label` 和 `Value` 列的 Markdown 表格展示下拉选项。\n4. 询问用户是否需要在运行任务前修改任何值。\n5. 询问用户是否需要为所选模式采集多组 Reddit 帖子。\n6. 将最终值规范化为仅包含所选模式的参数对象列表。\n7. 从显式输入或已保存的 `DATAIFY_API_TOKEN` 中获取 Dataify token。\n8. 如果没有可用的 token，要求用户输入 API TOKEN 并询问是否将其保存为 `DATAIFY_API_TOKEN`。\n9. 验证所选模式、URL、数值、下拉值和文件名。\n10. 使用所选模式的 `spider_id` 提交 Builder 请求。\n11. 从 Builder 响应中读取 `data.task_id`，并在存在时读取 `data.status` 或 `status`。\n12. Builder 成功后停止。\n13. 告知用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill) 查看或管理结果。\n\n## 模式选择\n\n当用户调用此技能时，首先展示以下 Markdown 表格并要求选择一种模式：\n\n| 标签 | 值 |\n| --- | --- |\n| 通过帖子 URL 采集 Reddit 帖子 | `url` |\n| 通过关键词采集 Reddit 帖子 | `keywords` |\n| 通过 subreddit URL 采集 Reddit 帖子 | `subredditurl` |\n\n询问：\"您想使用哪种采集模式：`url`、`keywords` 还是 `subredditurl`？\"\n\n在模式明确之前不要提交 Builder 请求。\n\n## 帖子 URL 模式参数\n\n仅当用户选择 `url` 时使用本节。\n\n| 字段 | 必填 | 默认值 | 位置 | 说明 |\n| --- | --- | --- | --- | --- |\n| `url` | 是 | `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` | `spider_parameters` | Reddit 帖子 URL。 |\n| `file_name` | 否 | `{{TasksID}}` | Builder 表单字段 | 用户未更改时使用默认值。 |\n\n然后询问：\"您是否需要在提交任务前修改这些值？\"\n\n同时询问：\"您是否需要采集多组 Reddit 帖子 URL？如果是，请提供多个 `url` 值。\"\n\n帖子 URL 模式处理：\n\n- `url` 为必填项。如果用户未提供，仅在参数确认表格中展示后才使用默认值 `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/`。\n- 去除 `url` 的前后空白字符。\n- `url` 不能为空。\n- `url` 必须以 `https://www.reddit.com/` 开头。\n- 提交 `spider_id=reddit_posts_by-url`。\n- 将 `spider_parameters` 作为包含一个或多个对象的 JSON 字符串提交，格式如下：\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]\n```\n\n## 关键词模式参数\n\n仅当用户选择 `keywords` 时使用本节。\n\n| 字段 | 必填 | 默认值 | 位置 | 说明 |\n| --- | --- | --- | --- | --- |\n| `keyword` | 是 | `datascience` | `spider_parameters` | Reddit 帖子搜索关键词。 |\n| `num_of_posts` | 否 | `10` | `spider_parameters` | 最大采集帖子数。必须为大于或等于 `0` 的整数。 |\n| `file_name` | 否 | `{{TasksID}}` | Builder 表单字段 | 用户未更改时使用默认值。 |\n\n然后询问：\"您是否需要在提交任务前修改这些值？\"\n\n同时询问：\"您是否需要采集多组 Reddit 关键词？如果是，请提供多组 `keyword` 和 `num_of_posts`。\"\n\n关键词模式处理：\n\n- `keyword` 为必填项。如果用户未提供，仅在参数确认表格中展示后才使用默认值 `datascience`。\n- 去除 `keyword` 的前后空白字符。\n- `keyword` 不能为空。\n- `num_of_posts` 必须为大于或等于 `0` 的整数。\n- 提交 `spider_id=reddit_posts_by-keywords`。\n- 将 `spider_parameters` 作为包含一个或多个对象的 JSON 字符串提交，格式如下：\n\n```json\n[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"}]\n```\n\n## Subreddit URL 模式参数\n\n仅当用户选择 `subredditurl` 时使用本节。\n\n| 字段 | 必填 | 默认值 | 位置 | 说明 |\n| --- | --- | --- | --- | --- |\n| `url` | 是 | `https://www.reddit.com/r/battlefield2042` | `spider_parameters` | Subreddit URL。 |\n| `sort_by` | 否 | `Hot` | `spider_parameters` | 帖子排序选项。 |\n| `num_of_posts` | 否 | `10` | `spider_parameters` | 最大采集帖子数。必须为大于或等于 `0` 的整数。 |\n| `sort_by_time` | 否 | `Now` | `spider_parameters` | 时间排序选项。时间字段在 `Hot` 和 `New` 排序下不生效。 |\n| `file_name` | 否 | `{{TasksID}}` | Builder 表单字段 | 用户未更改时使用默认值。 |\n\n`sort_by` 下拉选项：\n\n| 标签 | 值 |\n| --- | --- |\n| Hot | `Hot` |\n| Top | `Top` |\n| New | `New` |\n| Rising | `Rising` |\n\n`sort_by_time` 下拉选项：\n\n| 标签 | 值 |\n| --- | --- |\n| Now | `Now` |\n| Today | `Today` |\n| This Week | `This Week` |\n| This Month | `This Month` |\n| This Year | `This Year` |\n| All Time | `All Time` |\n\n然后询问：\"您是否需要在提交任务前修改这些值？\"\n\n同时询问：\"您是否需要采集多组 Reddit subreddit URL？如果是，请提供多组 `url`、`sort_by`、`num_of_posts` 和 `sort_by_time`。\"\n\nSubreddit URL 模式处理：\n\n- `url` 为必填项。如果用户未提供，仅在参数确认表格中展示后才使用默认值 `https://www.reddit.com/r/battlefield2042`。\n- 去除 `url` 的前后空白字符。\n- `url` 不能为空。\n- `url` 必须以 `https://www.reddit.com/` 开头。\n- `sort_by` 必须为 `Hot`、`Top`、`New` 或 `Rising` 之一。\n- `sort_by_time` 必须为 `Now`、`Today`、`This Week`、`This Month`、`This Year` 或 `All Time` 之一。\n- `num_of_posts` 必须为大于或等于 `0` 的整数。\n- 时间字段在 `Hot` 和 `New` 排序下不生效；如果用户提供了值，仍保留提交。\n- 提交 `spider_id=reddit_posts_by-subredditurl`。\n- 将 `spider_parameters` 作为包含一个或多个对象的 JSON 字符串提交，格式如下：\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]\n```\n\n## 共享文件名处理\n\n- `file_name` 默认为 `{{TasksID}}`。\n- 如果用户更改了 `file_name`，提交用户提供的值。\n- `file_name` 不能为空。\n- 将 `file_name` 作为 Builder 表单字段发送。\n\n## Dataify Builder 请求\n\n使用表单字段而非手动构建的 URL 编码字符串。\n\n- URL：`https://scraperapi.dataify.com/builder?platform=1`\n- 方法：`POST`\n- Authorization 请求头：`Bearer DATAIFY_API_TOKEN`\n- Content type：`application/x-www-form-urlencoded`\n- 固定字段：\n  - `spider_name=reddit.com`\n  - `spider_errors=true`\n- 模式特定字段：\n  - 帖子 URL 模式：`spider_id=reddit_posts_by-url`\n  - 关键词模式：`spider_id=reddit_posts_by-keywords`\n  - Subreddit URL 模式：`spider_id=reddit_posts_by-subredditurl`\n- 默认字段：\n  - `file_name={{TasksID}}`\n- 动态字段：\n  - `spider_parameters` 必须为 JSON 字符串数组。\n\n## 脚本\n\n为确保稳定执行，优先使用 Python 3.6 或更新版本运行 `scripts/submit_dataify_reddit_posts.py`，而非重写 Builder 流程。\n\n帖子 URL 模式：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --url \"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"\n```\n\n关键词模式：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --keyword \"datascience\" --num-of-posts \"10\"\n```\n\nSubreddit URL 模式：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --url \"https://www.reddit.com/r/battlefield2042\" --sort-by \"Rising\" --num-of-posts \"10\" --sort-by-time \"Now\"\n```\n\n覆盖已保存的环境 token 或文件名：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --api-token \"YOUR_DATAIFY_API_TOKEN\" --mode keywords --keyword \"datascience\" --file-name \"{{TasksID}}\"\n```\n\n提交多组帖子 URL：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"},{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]'\n```\n\n提交多组关键词：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --params-json '[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"},{\"keyword\":\"machinelearning\",\"num_of_posts\":\"10\"}]'\n```\n\n提交多组 subreddit URL：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"},{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]'\n```\n\n脚本会打印包含 `mode`、`spider_id`、`task_id`、`status`、`parameters`、`file_name`、`dashboard_url` 和 `message` 的 JSON 摘要。\n\n## 故障排除\n\n`Missing Dataify API TOKEN` 表示未传递显式 token 且本地未保存 `DATAIFY_API_TOKEN`。告知用户需要提供 Dataify API TOKEN，询问是否将其保存为 `DATAIFY_API_TOKEN`，或告知用户可以在 [Dataify](https://dashboard.dataify.com/login?utm_source=skill) 注册或登录以获取。如果用户已有 token，告知其位于 [Dataify](https://dashboard.dataify.com?utm_source=skill) 右上角。\n\n`Unsupported mode` 表示模式必须为 `url`、`keywords` 或 `subredditurl`。\n\n`url cannot be empty` 表示缺少 Reddit URL。\n\n`url must start with https://www.reddit.com/` 表示 URL 不在允许的 Reddit 域名范围内。\n\n`keyword cannot be empty` 表示缺少 Reddit 关键词。\n\n`num_of_posts must be an integer greater than or equal to 0` 表示帖子数量无效。\n\n`sort_by must be one of Hot, Top, New, Rising` 表示 subreddit 排序选项无效。\n\n`sort_by_time must be one of Now, Today, This Week, This Month, This Year, All Time` 表示 subreddit 时间选项无效。\n\n`File name cannot be empty` 表示未提供可用的 `file_name`。\n\n`Necessary parameters is empty!` 通常表示 Builder 请求未以表单字段提交、`spider_parameters` 不是 JSON 字符串数组，或所选模式的对象缺少必填字段。\n\n缺少 `task_id` 通常表示 authorization 请求头、token、`spider_name`、所选 `spider_id` 或 `spider_parameters` 有误。\n\n## 安全规则\n\n- 不要在同一个 Builder 请求中混合帖子 URL、关键词和 Subreddit URL 模式的参数。\n- 在模式明确之前不要提交 Builder 请求。\n- 不要将 `file_name` 放入 `spider_parameters` 中。\n- 不要使用 `https://www.reddit.com/` 以外的 Reddit URL。\n- 提及身份验证时仅使用 `API TOKEN` 和 `DATAIFY_API_TOKEN`。\n- 不要硬编码本地 Python 路径。\n- 不要编造结果字段。\n- 任务创建成功后始终引导用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill)。\n\nFile v1.2.0:agents/openai.yaml\n\ninterface:\n  display_name: \"Dataify Reddit Posts\"\n  short_description: \"Submit Dataify Reddit post tasks by post URL, keyword, or subreddit URL\"\n  icon_small: \"./assets/dataify-reddit-posts-small.svg\"\n  icon_large: \"./assets/dataify-reddit-posts-large.svg\"\n  default_prompt: \"Use $dataify-reddit-posts to submit Reddit post Builder tasks by post URL, keyword, or subreddit URL through Dataify and return the task_id and status.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v1.1.0: 8 files, 14302 bytes\n\nFiles: agents/openai.yaml (472b), assets/dataify-reddit-posts-large.svg (652b), assets/dataify-reddit-posts-small.svg (628b), scripts/submit_dataify_reddit_posts.py (9653b), skill-card.md (2597b), SKILL.md (14546b), SKILL.zh-CN.md (13820b), _meta.json (139b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: dataify-reddit-posts\ndescription: Submit Dataify Reddit Post Information Builder tasks for three Reddit post collection modes. Use when the user wants the Reddit post information collection tool, collect Reddit posts, scrape Reddit posts, crawl Reddit post data, collect Reddit posts by post URL, collect Reddit posts by keyword, collect Reddit posts by subreddit URL, create Dataify reddit_posts_by-url, reddit_posts_by-keywords, or reddit_posts_by-subredditurl tasks, or asks in Chinese with meanings like \"Reddit 帖子采集\", \"Reddit 帖子抓取\", \"Reddit帖子信息采集\", \"Reddit帖子信息抓取\", \"Reddit帖子URL采集\", \"Reddit关键词采集\", \"Reddit subreddit url采集\", or similar Reddit post noun plus collection/scraping action wording. Also use when receiving task_id/status, configuring DATAIFY_API_TOKEN, or troubleshooting this Dataify Builder request.\n---\n\n# Dataify Reddit Posts\n\nSubmit Reddit post information collection jobs through Dataify Builder. This skill is a guided wrapper for three collection modes:\n\n| Mode | Collector ID | Use For |\n| --- | --- | --- |\n| Post URL | `reddit_posts_by-url` | Collecting one or more Reddit posts by post URL. |\n| Keyword | `reddit_posts_by-keywords` | Collecting Reddit posts by search keyword. |\n| Subreddit URL | `reddit_posts_by-subredditurl` | Collecting Reddit posts from a subreddit URL with sort and time options. |\n\nAfter a successful submission, give the user the `task_id`, the returned or inferred status, and tell them to visit [Dataify](https://dashboard.dataify.com?utm_source=skill) to view results.\n\n## API TOKEN Handling\n\nUse `DATAIFY_API_TOKEN` as the long-term saved token name.\n\n- If the user provides a token in the request, use it for this run.\n- If no token is provided, first check whether `DATAIFY_API_TOKEN` is already saved locally in the environment.\n- If `DATAIFY_API_TOKEN` is saved locally, use it without asking the user to re-enter the token.\n- If no token is available locally, tell the user they need to provide a Dataify API TOKEN.\n- If the user does not have an API TOKEN, tell them they can register or log in at [Dataify](https://dashboard.dataify.com/login?utm_source=skill) to get one.\n- If the user already has an API TOKEN, tell them it is available in the top-right area of [Dataify](https://dashboard.dataify.com?utm_source=skill).\n- After the user provides an API TOKEN and no local `DATAIFY_API_TOKEN` is saved, ask whether they want to save it locally as `DATAIFY_API_TOKEN` for future use.\n- If the user wants to save it, give the appropriate command for their shell and ask them to run it; do not silently persist tokens without confirmation.\n- Do not call the Builder endpoint without a token.\n- Always call it `API TOKEN` in user-facing instructions. Prefer the environment variable name `DATAIFY_API_TOKEN` for saved local use.\n\nPowerShell examples for saving the token for the current session:\n\n```powershell\n$env:DATAIFY_API_TOKEN = \"YOUR_DATAIFY_API_TOKEN\"\n```\n\nFor a persistent user-level variable on Windows:\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"DATAIFY_API_TOKEN\", \"YOUR_DATAIFY_API_TOKEN\", \"User\")\n```\n\n## Core Workflow\n\n1. First ask the user to choose a collection mode: `url`, `keywords`, or `subredditurl`.\n2. After the user chooses a mode, show only that mode's parameter table and defaults.\n3. If the selected mode has dropdown fields, show the dropdown options as Markdown tables with `Label` and `Value` columns.\n4. Ask whether the user wants to change any value before running the task.\n5. Ask whether the user wants to collect multiple Reddit post groups for the selected mode.\n6. Normalize the final values into a list of parameter objects for the selected mode only.\n7. Resolve the Dataify token from explicit input or saved `DATAIFY_API_TOKEN`.\n8. If no token is available, ask the user to enter their API TOKEN and ask whether to save it as `DATAIFY_API_TOKEN`.\n9. Validate the selected mode, URLs, numeric values, dropdown values, and file name.\n10. Submit the Builder request with the selected mode's `spider_id`.\n11. Read `data.task_id` from the Builder response and read `data.status` or `status` when present.\n12. Stop after Builder succeeds.\n13. Tell the user to visit [Dataify](https://dashboard.dataify.com?utm_source=skill) to view or manage results.\n\n## Mode Selection\n\nWhen the user invokes this skill, first show this Markdown table and ask them to choose one mode:\n\n| Label | Value |\n| --- | --- |\n| Collect Reddit posts by post URL | `url` |\n| Collect Reddit posts by keyword | `keywords` |\n| Collect Reddit posts by subreddit URL | `subredditurl` |\n\nAsk: \"Which collection mode do you want to use: `url`, `keywords`, or `subredditurl`?\"\n\nDo not submit a Builder request until the mode is clear.\n\n## Post URL Mode Parameters\n\nUse this section only when the user chooses `url`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `url` | Yes | `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` | `spider_parameters` | Reddit post URL. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nThen ask: \"Do you want to change any of these values before I submit the task?\"\n\nAlso ask: \"Do you want to collect multiple Reddit post URL groups? If yes, provide multiple `url` values.\"\n\nPost URL mode handling:\n\n- `url` is required. If the user does not provide it, use the default `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` only after showing it in the parameter confirmation table.\n- Trim leading and trailing whitespace from `url`.\n- `url` cannot be empty.\n- `url` must start with `https://www.reddit.com/`.\n- Submit `spider_id=reddit_posts_by-url`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]\n```\n\n## Keyword Mode Parameters\n\nUse this section only when the user chooses `keywords`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `keyword` | Yes | `datascience` | `spider_parameters` | Reddit post search keyword. |\n| `num_of_posts` | No | `10` | `spider_parameters` | Maximum number of posts to collect. Must be an integer greater than or equal to `0`. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nThen ask: \"Do you want to change any of these values before I submit the task?\"\n\nAlso ask: \"Do you want to collect multiple Reddit keyword groups? If yes, provide multiple groups with `keyword` and `num_of_posts`.\"\n\nKeyword mode handling:\n\n- `keyword` is required. If the user does not provide it, use the default `datascience` only after showing it in the parameter confirmation table.\n- Trim leading and trailing whitespace from `keyword`.\n- `keyword` cannot be empty.\n- `num_of_posts` must be an integer greater than or equal to `0`.\n- Submit `spider_id=reddit_posts_by-keywords`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"}]\n```\n\n## Subreddit URL Mode Parameters\n\nUse this section only when the user chooses `subredditurl`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `url` | Yes | `https://www.reddit.com/r/battlefield2042` | `spider_parameters` | Subreddit URL. |\n| `sort_by` | No | `Hot` | `spider_parameters` | Post sort option. |\n| `num_of_posts` | No | `10` | `spider_parameters` | Maximum number of posts to collect. Must be an integer greater than or equal to `0`. |\n| `sort_by_time` | No | `Now` | `spider_parameters` | Time sort option. Time fields do not take effect with `Hot` and `New`. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nDropdown options for `sort_by`:\n\n| Label | Value |\n| --- | --- |\n| Hot | `Hot` |\n| Top | `Top` |\n| New | `New` |\n| Rising | `Rising` |\n\nDropdown options for `sort_by_time`:\n\n| Label | Value |\n| --- | --- |\n| Now | `Now` |\n| Today | `Today` |\n| This Week | `This Week` |\n| This Month | `This Month` |\n| This Year | `This Year` |\n| All Time | `All Time` |\n\nThen ask: \"Do you want to change any of these values before I submit the task?\"\n\nAlso ask: \"Do you want to collect multiple Reddit subreddit URL groups? If yes, provide multiple groups with `url`, `sort_by`, `num_of_posts`, and `sort_by_time`.\"\n\nSubreddit URL mode handling:\n\n- `url` is required. If the user does not provide it, use the default `https://www.reddit.com/r/battlefield2042` only after showing it in the parameter confirmation table.\n- Trim leading and trailing whitespace from `url`.\n- `url` cannot be empty.\n- `url` must start with `https://www.reddit.com/`.\n- `sort_by` must be one of `Hot`, `Top`, `New`, or `Rising`.\n- `sort_by_time` must be one of `Now`, `Today`, `This Week`, `This Month`, `This Year`, or `All Time`.\n- `num_of_posts` must be an integer greater than or equal to `0`.\n- Time fields do not take effect with `Hot` and `New`; keep the submitted value if the user provides it.\n- Submit `spider_id=reddit_posts_by-subredditurl`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]\n```\n\n## Shared File Name Handling\n\n- `file_name` defaults to `{{TasksID}}`.\n- If the user changes `file_name`, submit the user-provided value.\n- `file_name` cannot be empty.\n- Send `file_name` as a Builder form field.\n\n## Dataify Builder Request\n\nUse form fields rather than hand-built URL-encoded strings.\n\n- URL: `https://scraperapi.dataify.com/builder?platform=1`\n- Method: `POST`\n- Authorization header: `Bearer DATAIFY_API_TOKEN`\n- Content type: `application/x-www-form-urlencoded`\n- Fixed fields:\n  - `spider_name=reddit.com`\n  - `spider_errors=true`\n- Mode-specific field:\n  - Post URL mode: `spider_id=reddit_posts_by-url`\n  - Keyword mode: `spider_id=reddit_posts_by-keywords`\n  - Subreddit URL mode: `spider_id=reddit_posts_by-subredditurl`\n- Default field:\n  - `file_name={{TasksID}}`\n- Dynamic field:\n  - `spider_parameters` must be a JSON string array.\n\n## Script\n\nFor stable execution, prefer `scripts/submit_dataify_reddit_posts.py` with Python 3.6 or newer instead of rewriting the Builder flow.\n\nPost URL mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --url \"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"\n```\n\nKeyword mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --keyword \"datascience\" --num-of-posts \"10\"\n```\n\nSubreddit URL mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --url \"https://www.reddit.com/r/battlefield2042\" --sort-by \"Rising\" --num-of-posts \"10\" --sort-by-time \"Now\"\n```\n\nTo override the saved environment token or file name:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --api-token \"YOUR_DATAIFY_API_TOKEN\" --mode keywords --keyword \"datascience\" --file-name \"{{TasksID}}\"\n```\n\nTo submit multiple post URL groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"},{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]'\n```\n\nTo submit multiple keyword groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --params-json '[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"},{\"keyword\":\"machinelearning\",\"num_of_posts\":\"10\"}]'\n```\n\nTo submit multiple subreddit URL groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"},{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]'\n```\n\nThe script prints a JSON summary with `mode`, `spider_id`, `task_id`, `status`, `parameters`, `file_name`, `dashboard_url`, and `message`.\n\n## Troubleshooting\n\n`Missing Dataify API TOKEN` means no explicit token was passed and `DATAIFY_API_TOKEN` is not saved locally. Tell the user they need to provide their Dataify API TOKEN, ask whether they want to save it as `DATAIFY_API_TOKEN`, or tell them they can register or log in at [Dataify](https://dashboard.dataify.com/login?utm_source=skill) to get one. If they already have a token, tell them it is in the top-right area of [Dataify](https://dashboard.dataify.com?utm_source=skill).\n\n`Unsupported mode` means the mode must be `url`, `keywords`, or `subredditurl`.\n\n`url cannot be empty` means the Reddit URL is missing.\n\n`url must start with https://www.reddit.com/` means the URL is outside the allowed Reddit domain.\n\n`keyword cannot be empty` means the Reddit keyword is missing.\n\n`num_of_posts must be an integer greater than or equal to 0` means the post count is invalid.\n\n`sort_by must be one of Hot, Top, New, Rising` means the subreddit sort option is invalid.\n\n`sort_by_time must be one of Now, Today, This Week, This Month, This Year, All Time` means the subreddit time option is invalid.\n\n`File name cannot be empty` means no usable `file_name` was provided.\n\n`Necessary parameters is empty!` usually means the Builder request was not submitted as form fields, `spider_parameters` was not a JSON string array, or the selected mode's object is missing required fields.\n\nMissing `task_id` usually means the authorization header, token, `spider_name`, selected `spider_id`, or `spider_parameters` is wrong.\n\n## Guardrails\n\n- Do not mix Post URL, Keyword, and Subreddit URL mode parameters in the same Builder request.\n- Do not submit a Builder request until the mode is clear.\n- Do not put `file_name` inside `spider_parameters`.\n- Do not use a Reddit URL from outside `https://www.reddit.com/`.\n- Use only `API TOKEN` and `DATAIFY_API_TOKEN` when referring to authentication.\n- Do not hard-code local Python paths.\n- Do not invent result fields.\n- Always direct the user to [Dataify](https://dashboard.dataify.com?utm_source=skill) after successful task creation.\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn74z5hmmwk21kw8tpphd9w21x86bkdf\",\n  \"slug\": \"dataify-reddit-posts\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1780884452555\n}\n\nFile v1.1.0:skill-card.md\n\n## Description: <br>\nSubmit Dataify Reddit Post Information Builder tasks for Reddit post collection by post URL, keyword, or subreddit URL. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[dataify-server](https://clawhub.ai/user/dataify-server) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to configure and submit Dataify Builder jobs that collect Reddit posts by post URL, search keyword, or subreddit URL, then receive the returned task ID and status. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: API TOKEN exposure during setup or task submission. <br>\nMitigation: Prefer the DATAIFY_API_TOKEN environment variable for reuse, avoid pasting tokens into chat when possible, and do not persist tokens without explicit user confirmation. <br>\nRisk: Unintended Reddit collection jobs can be submitted if the mode or parameters are wrong. <br>\nMitigation: Review the selected mode, URLs or keywords, post count, sort options, and file name before approving submission; the helper script validates supported modes, Reddit URL prefixes, non-negative counts, and allowed sort choices. <br>\nRisk: The skill sends chosen Reddit collection parameters to Dataify's Builder service. <br>\nMitigation: Use the skill only when the user intends to create Dataify Reddit collection jobs, require an API TOKEN before submission, and direct users to the Dataify dashboard to view or manage results. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/dataify-server/dataify-reddit-posts) <br>\n- [Dataify dashboard](https://dashboard.dataify.com?utm_source=skill) <br>\n- [Dataify login](https://dashboard.dataify.com/login?utm_source=skill) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, JSON] <br>\n**Output Format:** [Markdown guidance with command examples; the helper script prints JSON after successful task submission.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Successful submissions include mode, spider_id, task_id, status, submitted parameters, file_name, dashboard_url, and message.] <br>\n\n## Skill Version(s): <br>\n1.1.0 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.1.0:SKILL.zh-CN.md\n\n---\nname: dataify-reddit-posts\ndescription: \"提交 Dataify Reddit Post Information Builder 任务，支持三种 Reddit 帖子采集模式。当用户需要 Reddit post information collection tool、采集/抓取/爬取 Reddit posts 或 post data，按 post URL、keyword、subreddit URL 采集 Reddit posts，创建 reddit_posts_by-url、reddit_posts_by-keywords 或 reddit_posts_by-subredditurl 任务，或表达 Reddit 帖子采集/抓取、帖子信息采集/抓取、帖子 URL 采集、关键词采集、subreddit url 采集等含义时使用。也用于接收 task_id/status、配置 DATAIFY_API_TOKEN 或排查此 Dataify Builder 请求。\"\n---\n\n# Dataify Reddit Posts\n\n通过 Dataify Builder 提交 Reddit 帖子信息采集任务。本技能是三种采集模式的引导封装：\n\n| 模式 | 采集器 ID | 用途 |\n| --- | --- | --- |\n| 帖子 URL | `reddit_posts_by-url` | 通过帖子 URL 采集一个或多个 Reddit 帖子。 |\n| 关键词 | `reddit_posts_by-keywords` | 通过搜索关键词采集 Reddit 帖子。 |\n| Subreddit URL | `reddit_posts_by-subredditurl` | 通过 subreddit URL 采集 Reddit 帖子，支持排序和时间选项。 |\n\n提交成功后，向用户提供 `task_id`、返回的或推断的状态，并告知用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill) 查看结果。\n\n## API TOKEN 处理\n\n使用 `DATAIFY_API_TOKEN` 作为长期保存的 token 名称。\n\n- 如果用户在请求中提供了 token，则在本次运行中使用该 token。\n- 如果未提供 token，先检查环境中是否已在本地保存 `DATAIFY_API_TOKEN`。\n- 如果本地已保存 `DATAIFY_API_TOKEN`，则直接使用，无需要求用户重新输入。\n- 如果本地没有可用的 token，告知用户需要提供 Dataify API TOKEN。\n- 如果用户没有 API TOKEN，告知用户可以在 [Dataify](https://dashboard.dataify.com/login?utm_source=skill) 注册或登录以获取。\n- 如果用户已有 API TOKEN，告知用户可以在 [Dataify](https://dashboard.dataify.com?utm_source=skill) 右上角找到。\n- 用户提供 API TOKEN 后，如果本地未保存 `DATAIFY_API_TOKEN`，询问是否将其保存为 `DATAIFY_API_TOKEN` 以供后续使用。\n- 如果用户希望保存，提供适合其 shell 的命令并要求其执行；不要在未经确认的情况下静默保存 token。\n- 没有 token 不要调用 Builder 接口。\n- 在面向用户的说明中始终称其为 `API TOKEN`。保存到本地时优先使用环境变量名 `DATAIFY_API_TOKEN`。\n\nPowerShell 示例，为当前会话保存 token：\n\n```powershell\n$env:DATAIFY_API_TOKEN = \"YOUR_DATAIFY_API_TOKEN\"\n```\n\n在 Windows 上设置持久的用户级变量：\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"DATAIFY_API_TOKEN\", \"YOUR_DATAIFY_API_TOKEN\", \"User\")\n```\n\n## 核心工作流程\n\n1. 首先询问用户选择采集模式：`url`、`keywords` 或 `subredditurl`。\n2. 用户选择模式后，仅展示该模式的参数表格和默认值。\n3. 如果所选模式有下拉字段，以包含 `Label` 和 `Value` 列的 Markdown 表格展示下拉选项。\n4. 询问用户是否需要在运行任务前修改任何值。\n5. 询问用户是否需要为所选模式采集多组 Reddit 帖子。\n6. 将最终值规范化为仅包含所选模式的参数对象列表。\n7. 从显式输入或已保存的 `DATAIFY_API_TOKEN` 中获取 Dataify token。\n8. 如果没有可用的 token，要求用户输入 API TOKEN 并询问是否将其保存为 `DATAIFY_API_TOKEN`。\n9. 验证所选模式、URL、数值、下拉值和文件名。\n10. 使用所选模式的 `spider_id` 提交 Builder 请求。\n11. 从 Builder 响应中读取 `data.task_id`，并在存在时读取 `data.status` 或 `status`。\n12. Builder 成功后停止。\n13. 告知用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill) 查看或管理结果。\n\n## 模式选择\n\n当用户调用此技能时，首先展示以下 Markdown 表格并要求选择一种模式：\n\n| 标签 | 值 |\n| --- | --- |\n| 通过帖子 URL 采集 Reddit 帖子 | `url` |\n| 通过关键词采集 Reddit 帖子 | `keywords` |\n| 通过 subreddit URL 采集 Reddit 帖子 | `subredditurl` |\n\n询问：\"您想使用哪种采集模式：`url`、`keywords` 还是 `subredditurl`？\"\n\n在模式明确之前不要提交 Builder 请求。\n\n## 帖子 URL 模式参数\n\n仅当用户选择 `url` 时使用本节。\n\n| 字段 | 必填 | 默认值 | 位置 | 说明 |\n| --- | --- | --- | --- | --- |\n| `url` | 是 | `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` | `spider_parameters` | Reddit 帖子 URL。 |\n| `file_name` | 否 | `{{TasksID}}` | Builder 表单字段 | 用户未更改时使用默认值。 |\n\n然后询问：\"您是否需要在提交任务前修改这些值？\"\n\n同时询问：\"您是否需要采集多组 Reddit 帖子 URL？如果是，请提供多个 `url` 值。\"\n\n帖子 URL 模式处理：\n\n- `url` 为必填项。如果用户未提供，仅在参数确认表格中展示后才使用默认值 `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/`。\n- 去除 `url` 的前后空白字符。\n- `url` 不能为空。\n- `url` 必须以 `https://www.reddit.com/` 开头。\n- 提交 `spider_id=reddit_posts_by-url`。\n- 将 `spider_parameters` 作为包含一个或多个对象的 JSON 字符串提交，格式如下：\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]\n```\n\n## 关键词模式参数\n\n仅当用户选择 `keywords` 时使用本节。\n\n| 字段 | 必填 | 默认值 | 位置 | 说明 |\n| --- | --- | --- | --- | --- |\n| `keyword` | 是 | `datascience` | `spider_parameters` | Reddit 帖子搜索关键词。 |\n| `num_of_posts` | 否 | `10` | `spider_parameters` | 最大采集帖子数。必须为大于或等于 `0` 的整数。 |\n| `file_name` | 否 | `{{TasksID}}` | Builder 表单字段 | 用户未更改时使用默认值。 |\n\n然后询问：\"您是否需要在提交任务前修改这些值？\"\n\n同时询问：\"您是否需要采集多组 Reddit 关键词？如果是，请提供多组 `keyword` 和 `num_of_posts`。\"\n\n关键词模式处理：\n\n- `keyword` 为必填项。如果用户未提供，仅在参数确认表格中展示后才使用默认值 `datascience`。\n- 去除 `keyword` 的前后空白字符。\n- `keyword` 不能为空。\n- `num_of_posts` 必须为大于或等于 `0` 的整数。\n- 提交 `spider_id=reddit_posts_by-keywords`。\n- 将 `spider_parameters` 作为包含一个或多个对象的 JSON 字符串提交，格式如下：\n\n```json\n[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"}]\n```\n\n## Subreddit URL 模式参数\n\n仅当用户选择 `subredditurl` 时使用本节。\n\n| 字段 | 必填 | 默认值 | 位置 | 说明 |\n| --- | --- | --- | --- | --- |\n| `url` | 是 | `https://www.reddit.com/r/battlefield2042` | `spider_parameters` | Subreddit URL。 |\n| `sort_by` | 否 | `Hot` | `spider_parameters` | 帖子排序选项。 |\n| `num_of_posts` | 否 | `10` | `spider_parameters` | 最大采集帖子数。必须为大于或等于 `0` 的整数。 |\n| `sort_by_time` | 否 | `Now` | `spider_parameters` | 时间排序选项。时间字段在 `Hot` 和 `New` 排序下不生效。 |\n| `file_name` | 否 | `{{TasksID}}` | Builder 表单字段 | 用户未更改时使用默认值。 |\n\n`sort_by` 下拉选项：\n\n| 标签 | 值 |\n| --- | --- |\n| Hot | `Hot` |\n| Top | `Top` |\n| New | `New` |\n| Rising | `Rising` |\n\n`sort_by_time` 下拉选项：\n\n| 标签 | 值 |\n| --- | --- |\n| Now | `Now` |\n| Today | `Today` |\n| This Week | `This Week` |\n| This Month | `This Month` |\n| This Year | `This Year` |\n| All Time | `All Time` |\n\n然后询问：\"您是否需要在提交任务前修改这些值？\"\n\n同时询问：\"您是否需要采集多组 Reddit subreddit URL？如果是，请提供多组 `url`、`sort_by`、`num_of_posts` 和 `sort_by_time`。\"\n\nSubreddit URL 模式处理：\n\n- `url` 为必填项。如果用户未提供，仅在参数确认表格中展示后才使用默认值 `https://www.reddit.com/r/battlefield2042`。\n- 去除 `url` 的前后空白字符。\n- `url` 不能为空。\n- `url` 必须以 `https://www.reddit.com/` 开头。\n- `sort_by` 必须为 `Hot`、`Top`、`New` 或 `Rising` 之一。\n- `sort_by_time` 必须为 `Now`、`Today`、`This Week`、`This Month`、`This Year` 或 `All Time` 之一。\n- `num_of_posts` 必须为大于或等于 `0` 的整数。\n- 时间字段在 `Hot` 和 `New` 排序下不生效；如果用户提供了值，仍保留提交。\n- 提交 `spider_id=reddit_posts_by-subredditurl`。\n- 将 `spider_parameters` 作为包含一个或多个对象的 JSON 字符串提交，格式如下：\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]\n```\n\n## 共享文件名处理\n\n- `file_name` 默认为 `{{TasksID}}`。\n- 如果用户更改了 `file_name`，提交用户提供的值。\n- `file_name` 不能为空。\n- 将 `file_name` 作为 Builder 表单字段发送。\n\n## Dataify Builder 请求\n\n使用表单字段而非手动构建的 URL 编码字符串。\n\n- URL：`https://scraperapi.dataify.com/builder?platform=1`\n- 方法：`POST`\n- Authorization 请求头：`Bearer DATAIFY_API_TOKEN`\n- Content type：`application/x-www-form-urlencoded`\n- 固定字段：\n  - `spider_name=reddit.com`\n  - `spider_errors=true`\n- 模式特定字段：\n  - 帖子 URL 模式：`spider_id=reddit_posts_by-url`\n  - 关键词模式：`spider_id=reddit_posts_by-keywords`\n  - Subreddit URL 模式：`spider_id=reddit_posts_by-subredditurl`\n- 默认字段：\n  - `file_name={{TasksID}}`\n- 动态字段：\n  - `spider_parameters` 必须为 JSON 字符串数组。\n\n## 脚本\n\n为确保稳定执行，优先使用 Python 3.6 或更新版本运行 `scripts/submit_dataify_reddit_posts.py`，而非重写 Builder 流程。\n\n帖子 URL 模式：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --url \"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"\n```\n\n关键词模式：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --keyword \"datascience\" --num-of-posts \"10\"\n```\n\nSubreddit URL 模式：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --url \"https://www.reddit.com/r/battlefield2042\" --sort-by \"Rising\" --num-of-posts \"10\" --sort-by-time \"Now\"\n```\n\n覆盖已保存的环境 token 或文件名：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --api-token \"YOUR_DATAIFY_API_TOKEN\" --mode keywords --keyword \"datascience\" --file-name \"{{TasksID}}\"\n```\n\n提交多组帖子 URL：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"},{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]'\n```\n\n提交多组关键词：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --params-json '[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"},{\"keyword\":\"machinelearning\",\"num_of_posts\":\"10\"}]'\n```\n\n提交多组 subreddit URL：\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"},{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]'\n```\n\n脚本会打印包含 `mode`、`spider_id`、`task_id`、`status`、`parameters`、`file_name`、`dashboard_url` 和 `message` 的 JSON 摘要。\n\n## 故障排除\n\n`Missing Dataify API TOKEN` 表示未传递显式 token 且本地未保存 `DATAIFY_API_TOKEN`。告知用户需要提供 Dataify API TOKEN，询问是否将其保存为 `DATAIFY_API_TOKEN`，或告知用户可以在 [Dataify](https://dashboard.dataify.com/login?utm_source=skill) 注册或登录以获取。如果用户已有 token，告知其位于 [Dataify](https://dashboard.dataify.com?utm_source=skill) 右上角。\n\n`Unsupported mode` 表示模式必须为 `url`、`keywords` 或 `subredditurl`。\n\n`url cannot be empty` 表示缺少 Reddit URL。\n\n`url must start with https://www.reddit.com/` 表示 URL 不在允许的 Reddit 域名范围内。\n\n`keyword cannot be empty` 表示缺少 Reddit 关键词。\n\n`num_of_posts must be an integer greater than or equal to 0` 表示帖子数量无效。\n\n`sort_by must be one of Hot, Top, New, Rising` 表示 subreddit 排序选项无效。\n\n`sort_by_time must be one of Now, Today, This Week, This Month, This Year, All Time` 表示 subreddit 时间选项无效。\n\n`File name cannot be empty` 表示未提供可用的 `file_name`。\n\n`Necessary parameters is empty!` 通常表示 Builder 请求未以表单字段提交、`spider_parameters` 不是 JSON 字符串数组，或所选模式的对象缺少必填字段。\n\n缺少 `task_id` 通常表示 authorization 请求头、token、`spider_name`、所选 `spider_id` 或 `spider_parameters` 有误。\n\n## 安全规则\n\n- 不要在同一个 Builder 请求中混合帖子 URL、关键词和 Subreddit URL 模式的参数。\n- 在模式明确之前不要提交 Builder 请求。\n- 不要将 `file_name` 放入 `spider_parameters` 中。\n- 不要使用 `https://www.reddit.com/` 以外的 Reddit URL。\n- 提及身份验证时仅使用 `API TOKEN` 和 `DATAIFY_API_TOKEN`。\n- 不要硬编码本地 Python 路径。\n- 不要编造结果字段。\n- 任务创建成功后始终引导用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill)。\n\nFile v1.1.0:agents/openai.yaml\n\ninterface:\n  display_name: \"Dataify Reddit Posts\"\n  short_description: \"Submit Dataify Reddit post tasks by post URL, keyword, or subreddit URL\"\n  icon_small: \"./assets/dataify-reddit-posts-small.svg\"\n  icon_large: \"./assets/dataify-reddit-posts-large.svg\"\n  default_prompt: \"Use $dataify-reddit-posts to submit Reddit post Builder tasks by post URL, keyword, or subreddit URL through Dataify and return the task_id and status.\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v1.0.0: 7 files, 9780 bytes\n\nFiles: agents/openai.yaml (472b), assets/dataify-reddit-posts-large.svg (652b), assets/dataify-reddit-posts-small.svg (628b), scripts/submit_dataify_reddit_posts.py (9610b), skill-card.md (2009b), SKILL.md (14349b), _meta.json (139b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: dataify-reddit-posts\ndescription: Submit Dataify Reddit Post Information Builder tasks for three Reddit post collection modes. Use when the user wants the Reddit post information collection tool, collect Reddit posts, scrape Reddit posts, crawl Reddit post data, collect Reddit posts by post URL, collect Reddit posts by keyword, collect Reddit posts by subreddit URL, create Dataify reddit_posts_by-url, reddit_posts_by-keywords, or reddit_posts_by-subredditurl tasks, or asks in Chinese with meanings like \"Reddit 帖子采集\", \"Reddit 帖子抓取\", \"Reddit帖子信息采集\", \"Reddit帖子信息抓取\", \"Reddit帖子URL采集\", \"Reddit关键词采集\", \"Reddit subreddit url采集\", or similar Reddit post noun plus collection/scraping action wording. Also use when receiving task_id/status, configuring DATAIFY_API_TOKEN, or troubleshooting this Dataify Builder request.\n---\n\n# Dataify Reddit Posts\n\nSubmit Reddit post information collection jobs through Dataify Builder. This skill is a guided wrapper for three collection modes:\n\n| Mode | Collector ID | Use For |\n| --- | --- | --- |\n| Post URL | `reddit_posts_by-url` | Collecting one or more Reddit posts by post URL. |\n| Keyword | `reddit_posts_by-keywords` | Collecting Reddit posts by search keyword. |\n| Subreddit URL | `reddit_posts_by-subredditurl` | Collecting Reddit posts from a subreddit URL with sort and time options. |\n\nAfter a successful submission, give the user the `task_id`, the returned or inferred status, and tell them to visit `https://dataify.com/dashboard/` to view results.\n\n## API TOKEN Handling\n\nUse `DATAIFY_API_TOKEN` as the long-term saved token name.\n\n- If the user provides a token in the request, use it for this run.\n- If no token is provided, first check whether `DATAIFY_API_TOKEN` is already saved locally in the environment.\n- If `DATAIFY_API_TOKEN` is saved locally, use it without asking the user to re-enter the token.\n- If no token is available locally, tell the user they need to provide a Dataify API TOKEN.\n- If the user does not have an API TOKEN, tell them they can register or log in at `https://dataify.com/login` to get one.\n- If the user already has an API TOKEN, tell them it is available in the top-right area of `https://dataify.com/dashboard/`.\n- After the user provides an API TOKEN and no local `DATAIFY_API_TOKEN` is saved, ask whether they want to save it locally as `DATAIFY_API_TOKEN` for future use.\n- If the user wants to save it, give the appropriate command for their shell and ask them to run it; do not silently persist tokens without confirmation.\n- Do not call the Builder endpoint without a token.\n- Always call it `API TOKEN` in user-facing instructions. Prefer the environment variable name `DATAIFY_API_TOKEN` for saved local use.\n\nPowerShell examples for saving the token for the current session:\n\n```powershell\n$env:DATAIFY_API_TOKEN = \"YOUR_DATAIFY_API_TOKEN\"\n```\n\nFor a persistent user-level variable on Windows:\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"DATAIFY_API_TOKEN\", \"YOUR_DATAIFY_API_TOKEN\", \"User\")\n```\n\n## Core Workflow\n\n1. First ask the user to choose a collection mode: `url`, `keywords`, or `subredditurl`.\n2. After the user chooses a mode, show only that mode's parameter table and defaults.\n3. If the selected mode has dropdown fields, show the dropdown options as Markdown tables with `Label` and `Value` columns.\n4. Ask whether the user wants to change any value before running the task.\n5. Ask whether the user wants to collect multiple Reddit post groups for the selected mode.\n6. Normalize the final values into a list of parameter objects for the selected mode only.\n7. Resolve the Dataify token from explicit input or saved `DATAIFY_API_TOKEN`.\n8. If no token is available, ask the user to enter their API TOKEN and ask whether to save it as `DATAIFY_API_TOKEN`.\n9. Validate the selected mode, URLs, numeric values, dropdown values, and file name.\n10. Submit the Builder request with the selected mode's `spider_id`.\n11. Read `data.task_id` from the Builder response and read `data.status` or `status` when present.\n12. Stop after Builder succeeds.\n13. Tell the user to visit `https://dataify.com/dashboard/` to view or manage results.\n\n## Mode Selection\n\nWhen the user invokes this skill, first show this Markdown table and ask them to choose one mode:\n\n| Label | Value |\n| --- | --- |\n| Collect Reddit posts by post URL | `url` |\n| Collect Reddit posts by keyword | `keywords` |\n| Collect Reddit posts by subreddit URL | `subredditurl` |\n\nAsk: \"Which collection mode do you want to use: `url`, `keywords`, or `subredditurl`?\"\n\nDo not submit a Builder request until the mode is clear.\n\n## Post URL Mode Parameters\n\nUse this section only when the user chooses `url`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `url` | Yes | `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` | `spider_parameters` | Reddit post URL. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nThen ask: \"Do you want to change any of these values before I submit the task?\"\n\nAlso ask: \"Do you want to collect multiple Reddit post URL groups? If yes, provide multiple `url` values.\"\n\nPost URL mode handling:\n\n- `url` is required. If the user does not provide it, use the default `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` only after showing it in the parameter confirmation table.\n- Trim leading and trailing whitespace from `url`.\n- `url` cannot be empty.\n- `url` must start with `https://www.reddit.com/`.\n- Submit `spider_id=reddit_posts_by-url`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]\n```\n\n## Keyword Mode Parameters\n\nUse this section only when the user chooses `keywords`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `keyword` | Yes | `datascience` | `spider_parameters` | Reddit post search keyword. |\n| `num_of_posts` | No | `10` | `spider_parameters` | Maximum number of posts to collect. Must be an integer greater than or equal to `0`. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nThen ask: \"Do you want to change any of these values before I submit the task?\"\n\nAlso ask: \"Do you want to collect multiple Reddit keyword groups? If yes, provide multiple groups with `keyword` and `num_of_posts`.\"\n\nKeyword mode handling:\n\n- `keyword` is required. If the user does not provide it, use the default `datascience` only after showing it in the parameter confirmation table.\n- Trim leading and trailing whitespace from `keyword`.\n- `keyword` cannot be empty.\n- `num_of_posts` must be an integer greater than or equal to `0`.\n- Submit `spider_id=reddit_posts_by-keywords`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"}]\n```\n\n## Subreddit URL Mode Parameters\n\nUse this section only when the user chooses `subredditurl`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `url` | Yes | `https://www.reddit.com/r/battlefield2042` | `spider_parameters` | Subreddit URL. |\n| `sort_by` | No | `Hot` | `spider_parameters` | Post sort option. |\n| `num_of_posts` | No | `10` | `spider_parameters` | Maximum number of posts to collect. Must be an integer greater than or equal to `0`. |\n| `sort_by_time` | No | `Now` | `spider_parameters` | Time sort option. Time fields do not take effect with `Hot` and `New`. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nDropdown options for `sort_by`:\n\n| Label | Value |\n| --- | --- |\n| Hot | `Hot` |\n| Top | `Top` |\n| New | `New` |\n| Rising | `Rising` |\n\nDropdown options for `sort_by_time`:\n\n| Label | Value |\n| --- | --- |\n| Now | `Now` |\n| Today | `Today` |\n| This Week | `This Week` |\n| This Month | `This Month` |\n| This Year | `This Year` |\n| All Time | `All Time` |\n\nThen ask: \"Do you want to change any of these values before I submit the task?\"\n\nAlso ask: \"Do you want to collect multiple Reddit subreddit URL groups? If yes, provide multiple groups with `url`, `sort_by`, `num_of_posts`, and `sort_by_time`.\"\n\nSubreddit URL mode handling:\n\n- `url` is required. If the user does not provide it, use the default `https://www.reddit.com/r/battlefield2042` only after showing it in the parameter confirmation table.\n- Trim leading and trailing whitespace from `url`.\n- `url` cannot be empty.\n- `url` must start with `https://www.reddit.com/`.\n- `sort_by` must be one of `Hot`, `Top`, `New`, or `Rising`.\n- `sort_by_time` must be one of `Now`, `Today`, `This Week`, `This Month`, `This Year`, or `All Time`.\n- `num_of_posts` must be an integer greater than or equal to `0`.\n- Time fields do not take effect with `Hot` and `New`; keep the submitted value if the user provides it.\n- Submit `spider_id=reddit_posts_by-subredditurl`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]\n```\n\n## Shared File Name Handling\n\n- `file_name` defaults to `{{TasksID}}`.\n- If the user changes `file_name`, submit the user-provided value.\n- `file_name` cannot be empty.\n- Send `file_name` as a Builder form field.\n\n## Dataify Builder Request\n\nUse form fields rather than hand-built URL-encoded strings.\n\n- URL: `https://scraperapi.dataify.com/builder?platform=1`\n- Method: `POST`\n- Authorization header: `Bearer DATAIFY_API_TOKEN`\n- Content type: `application/x-www-form-urlencoded`\n- Fixed fields:\n  - `spider_name=reddit.com`\n  - `spider_errors=true`\n- Mode-specific field:\n  - Post URL mode: `spider_id=reddit_posts_by-url`\n  - Keyword mode: `spider_id=reddit_posts_by-keywords`\n  - Subreddit URL mode: `spider_id=reddit_posts_by-subredditurl`\n- Default field:\n  - `file_name={{TasksID}}`\n- Dynamic field:\n  - `spider_parameters` must be a JSON string array.\n\n## Script\n\nFor stable execution, prefer `scripts/submit_dataify_reddit_posts.py` with Python 3.6 or newer instead of rewriting the Builder flow.\n\nPost URL mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --url \"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"\n```\n\nKeyword mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --keyword \"datascience\" --num-of-posts \"10\"\n```\n\nSubreddit URL mode:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --url \"https://www.reddit.com/r/battlefield2042\" --sort-by \"Rising\" --num-of-posts \"10\" --sort-by-time \"Now\"\n```\n\nTo override the saved environment token or file name:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --api-token \"YOUR_DATAIFY_API_TOKEN\" --mode keywords --keyword \"datascience\" --file-name \"{{TasksID}}\"\n```\n\nTo submit multiple post URL groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"},{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]'\n```\n\nTo submit multiple keyword groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --params-json '[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"},{\"keyword\":\"machinelearning\",\"num_of_posts\":\"10\"}]'\n```\n\nTo submit multiple subreddit URL groups:\n\n```powershell\npython3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --params-json '[{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"},{\"url\":\"https://www.reddit.com/r/battlefield2042\",\"sort_by\":\"Rising\",\"num_of_posts\":\"10\",\"sort_by_time\":\"Now\"}]'\n```\n\nThe script prints a JSON summary with `mode`, `spider_id`, `task_id`, `status`, `parameters`, `file_name`, `dashboard_url`, and `message`.\n\n## Troubleshooting\n\n`Missing Dataify API TOKEN` means no explicit token was passed and `DATAIFY_API_TOKEN` is not saved locally. Tell the user they need to provide their Dataify API TOKEN, ask whether they want to save it as `DATAIFY_API_TOKEN`, or tell them they can register or log in at `https://dataify.com/login` to get one. If they already have a token, tell them it is in the top-right area of `https://dataify.com/dashboard/`.\n\n`Unsupported mode` means the mode must be `url`, `keywords`, or `subredditurl`.\n\n`url cannot be empty` means the Reddit URL is missing.\n\n`url must start with https://www.reddit.com/` means the URL is outside the allowed Reddit domain.\n\n`keyword cannot be empty` means the Reddit keyword is missing.\n\n`num_of_posts must be an integer greater than or equal to 0` means the post count is invalid.\n\n`sort_by must be one of Hot, Top, New, Rising` means the subreddit sort option is invalid.\n\n`sort_by_time must be one of Now, Today, This Week, This Month, This Year, All Time` means the subreddit time option is invalid.\n\n`File name cannot be empty` means no usable `file_name` was provided.\n\n`Necessary parameters is empty!` usually means the Builder request was not submitted as form fields, `spider_parameters` was not a JSON string array, or the selected mode's object is missing required fields.\n\nMissing `task_id` usually means the authorization header, token, `spider_name`, selected `spider_id`, or `spider_parameters` is wrong.\n\n## Guardrails\n\n- Do not mix Post URL, Keyword, and Subreddit URL mode parameters in the same Builder request.\n- Do not submit a Builder request until the mode is clear.\n- Do not put `file_name` inside `spider_parameters`.\n- Do not use a Reddit URL from outside `https://www.reddit.com/`.\n- Use only `API TOKEN` and `DATAIFY_API_TOKEN` when referring to authentication.\n- Do not hard-code local Python paths.\n- Do not invent result fields.\n- Always direct the user to `https://dataify.com/dashboard/` after successful task creation.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn74z5hmmwk21kw8tpphd9w21x86bkdf\",\n  \"slug\": \"dataify-reddit-posts\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1780296757496\n}\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nSubmits Dataify Reddit Post Information Builder tasks for Reddit post collection by post URL, keyword, or subreddit URL. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[dataify-server](https://clawhub.ai/user/dataify-server) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to configure and submit Dataify Builder jobs that collect Reddit posts by URL, keyword, or subreddit URL, then receive the task ID and status for follow-up in Dataify. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: DATAIFY_API_TOKEN is a credential used to authorize Dataify Builder requests. <br>\nMitigation: Treat it as a secret, prefer environment-based storage, and confirm with the user before saving it locally. <br>\nRisk: The skill submits user-directed Reddit collection jobs to Dataify. <br>\nMitigation: Review the selected mode and parameters before submission and use the Dataify dashboard to monitor results. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/dataify-server/dataify-reddit-posts) <br>\n- [Dataify dashboard](https://dataify.com/dashboard/) <br>\n- [Dataify login](https://dataify.com/login) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, API calls, Guidance] <br>\n**Output Format:** [Markdown guidance with command examples and JSON task summaries] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May submit a Dataify Builder job when the user provides or has configured DATAIFY_API_TOKEN.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.0:agents/openai.yaml\n\ninterface:\n  display_name: \"Dataify Reddit Posts\"\n  short_description: \"Submit Dataify Reddit post tasks by post URL, keyword, or subreddit URL\"\n  icon_small: \"./assets/dataify-reddit-posts-small.svg\"\n  icon_large: \"./assets/dataify-reddit-posts-large.svg\"\n  default_prompt: \"Use $dataify-reddit-posts to submit Reddit post Builder tasks by post URL, keyword, or subreddit URL through Dataify and return the task_id and status.\"\n\npolicy:\n  allow_implicit_invocation: true","readmeExcerpt":"Skill: Dataify Reddit Posts Owner: dataify-server Summary: Collect Reddit Posts data and return results Tags: latest:1.3.0 Version history: v1.3.0 | 2026-09-01T09:15:18.587Z | user 默认返回最终采集结果，完善异步等待下载与安全恢复；修复空目标误执行、Quick Start、Token 配置和触发路由冲突，并补齐发布前自动化测试 v1.2.0 | 2026-07-16T08:38:41.881Z | user 新增能力路由与异步任务闭环，修复失效引用、Token 泄漏和 Skill 元数据兼容性 v1.1.0 | 2026-06-08T02:07:32.555Z | user 补全中文文档，更新目录结构 v1.0.0 | 2026-06-01T06:52","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"python3 scripts/submit_dataify_reddit_posts.py --mode keywords --keyword \"datascience\" --num-of-posts 10"},{"language":"powershell","snippet":"$env:DATAIFY_API_TOKEN = \"YOUR_DATAIFY_API_TOKEN\""},{"language":"powershell","snippet":"[Environment]::SetEnvironmentVariable(\"DATAIFY_API_TOKEN\", \"YOUR_DATAIFY_API_TOKEN\", \"User\")"},{"language":"powershell","snippet":"python3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode url --url \"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\""},{"language":"powershell","snippet":"python3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode keywords --keyword \"datascience\" --num-of-posts \"10\""},{"language":"powershell","snippet":"python3 \".\\scripts\\submit_dataify_reddit_posts.py\" --mode subredditurl --url \"https://www.reddit.com/r/battlefield2042\" --sort-by \"Rising\" --num-of-posts \"10\" --sort-by-time \"Now\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: dataify-reddit-posts\ndescription: \"Collect Reddit posts by post URL, keyword, or subreddit URL. Do not use when only comments from a known post are required.\"\n---\n\n# Dataify Reddit Posts\n\nSubmit Reddit post information collection jobs through Dataify Builder. This skill is a guided wrapper for three collection modes:\n\n| Mode | Collector ID | Use For |\n| --- | --- | --- |\n| Post URL | `reddit_posts_by-url` | Collecting one or more Reddit posts by post URL. |\n| Keyword | `reddit_posts_by-keywords` | Collecting Reddit posts by search keyword. |\n| Subreddit URL | `reddit_posts_by-subredditurl` | Collecting Reddit posts from a subreddit URL with sort and time options. |\n\nAfter submission, continue monitoring the returned `task_id` and return the final result by default.\n\n## Quick Start\n\n**Input:** a subreddit keyword.\n\n```bash\npython3 scripts/submit_dataify_reddit_posts.py --mode keywords --keyword \"datascience\" --num-of-posts 10\n```\n\nThe command waits up to 10 minutes and prints the final JSON result. Add `--no-wait` only for submission-only behavior.\n\nIf `DATAIFY_API_TOKEN` is missing, log in or register at https://dashboard.dataify.com/login?utm_source=skill. New accounts receive 50 free credits.\n\n## API TOKEN Handling\n\nUse `DATAIFY_API_TOKEN` as the long-term saved token name.\n\n- If `DATAIFY_API_TOKEN` is saved locally, use it without asking the user to re-enter the token.\n- If the user does not have an API TOKEN, tell them they can register or log in at [Dataify](https://dashboard.dataify.com/login?utm_source=skill) to get one.\n- If the user wants to save it, give the appropriate command for their shell and ask them to run it; do not silently persist tokens without confirmation.\n- Do not call the Builder endpoint without a token.\n- Always call it `API TOKEN` in user-facing instructions. Prefer the environment variable name `DATAIFY_API_TOKEN` for saved local use.\n\nPowerShell examples for saving the token for the current session:\n\n```powershell\n$env:DATAIFY_API_TOKEN = \"YOUR_DATAIFY_API_TOKEN\"\n```\n\nFor a persistent user-level variable on Windows:\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"DATAIFY_API_TOKEN\", \"YOUR_DATAIFY_API_TOKEN\", \"User\")\n```\n\n## Core Workflow\n\n1. First ask the user to choose a collection mode: `url`, `keywords`, or `subredditurl`.\n2. After the user chooses a mode, show only that mode's parameter table and defaults.\n3. If the selected mode has dropdown fields, show the dropdown options as Markdown tables with `Label` and `Value` columns.\n4. Ask whether the user wants to change any value before running the task.\n5. Ask whether the user wants to collect multiple Reddit post groups for the selected mode.\n6. Normalize the final values into a list of parameter objects for the selected mode only.\n9. Validate the selected mode, URLs, numeric values, dropdown values, and file name.\n10. Submit the Builder request with the selected mode's `spider_id`.\n11. Read `data.task_id` from the Builder response and read `data.s"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn74z5hmmwk21kw8tpphd9w21x86bkdf\",\n  \"slug\": \"dataify-reddit-posts\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1788254118587\n}"},{"path":"references/modes-and-parameters.md","content":"# Modes and parameters\n\nRead this reference only when selecting a non-default mode or mapping advanced fields.\n\n## Post URL Mode Parameters\n\nUse this section only when the user chooses `url`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `url` | Yes | `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` | `spider_parameters` | Reddit post URL. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\n\nAlso ask: \"Do you want to collect multiple Reddit post URL groups? If yes, provide multiple `url` values.\"\n\nPost URL mode handling:\n\n- Trim leading and trailing whitespace from `url`.\n- `url` cannot be empty.\n- `url` must start with `https://www.reddit.com/`.\n- Submit `spider_id=reddit_posts_by-url`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"url\":\"https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/\"}]\n```\n\n## Keyword Mode Parameters\n\nUse this section only when the user chooses `keywords`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `keyword` | Yes | `datascience` | `spider_parameters` | Reddit post search keyword. |\n| `num_of_posts` | No | `10` | `spider_parameters` | Maximum number of posts to collect. Must be an integer greater than or equal to `0`. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\n\nAlso ask: \"Do you want to collect multiple Reddit keyword groups? If yes, provide multiple groups with `keyword` and `num_of_posts`.\"\n\nKeyword mode handling:\n\n- Trim leading and trailing whitespace from `keyword`.\n- `keyword` cannot be empty.\n- `num_of_posts` must be an integer greater than or equal to `0`.\n- Submit `spider_id=reddit_posts_by-keywords`.\n- Submit `spider_parameters` as a JSON string containing one or more objects like:\n\n```json\n[{\"keyword\":\"datascience\",\"num_of_posts\":\"10\"}]\n```\n\n## Subreddit URL Mode Parameters\n\nUse this section only when the user chooses `subredditurl`.\n\n| Field | Required | Default | Location | Notes |\n| --- | --- | --- | --- | --- |\n| `url` | Yes | `https://www.reddit.com/r/battlefield2042` | `spider_parameters` | Subreddit URL. |\n| `sort_by` | No | `Hot` | `spider_parameters` | Post sort option. |\n| `num_of_posts` | No | `10` | `spider_parameters` | Maximum number of posts to collect. Must be an integer greater than or equal to `0`. |\n| `sort_by_time` | No | `Now` | `spider_parameters` | Time sort option. Time fields do not take effect with `Hot` and `New`. |\n| `file_name` | No | `{{TasksID}}` | Builder form field | Use the default when the user does not change it. |\n\nDropdown options for `sort_by`:\n\n| Label | Value |\n| --- | --- |\n| Hot | `Hot` |\n| Top | `Top` |\n| New | `New` |\n| Rising | `Rising` |\n\nDropdown options for `sort_by_time`:\n\n| Label | Value |\n| --- | -"},{"path":"skill-card.md","content":"## Description:\n\nCollect Reddit posts by post URL, keyword, or subreddit URL through Dataify Builder.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[dataify-server](https://clawhub.ai/user/dataify-server)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to submit and monitor Dataify Builder jobs that collect Reddit posts by URL, keyword, or subreddit URL. It is intended to return the final collected JSON result when monitoring completes.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security review reports that the skill imports unaudited sibling runtime code and passes the Dataify API token to it.\n\nMitigation: Install only after reviewing or pinning the expected dataify-task-operations runtime, and avoid pasting API tokens into chat.\n\nRisk: Using the Dataify Builder service may consume Dataify credits.\n\nMitigation: Review the selected collection mode and requested volume before execution, especially for multiple inputs or high-volume jobs.\n\n## Reference(s):\n\n- [Modes and parameters](references/modes-and-parameters.md)\n- [ClawHub skill page](https://clawhub.ai/dataify-server/skills/dataify-reddit-posts)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, JSON]\n\n**Output Format:** [Markdown guidance with shell commands and JSON task or result payloads]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May return a task_id and resume guidance if asynchronous monitoring times out; otherwise returns the final collected JSON result.]\n\n## Skill Version(s):\n\n1.3.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"SKILL.zh-CN.md","content":"---\nname: dataify-reddit-posts\ndescription: \"提交 Dataify Reddit Post Information Builder 任务，支持三种 Reddit 帖子采集模式。当用户需要 Reddit post information collection tool、采集/抓取/爬取 Reddit posts 或 post data，按 post URL、keyword、subreddit URL 采集 Reddit posts，创建 reddit_posts_by-url、reddit_posts_by-keywords 或 reddit_posts_by-subredditurl 任务，或表达 Reddit 帖子采集/抓取、帖子信息采集/抓取、帖子 URL 采集、关键词采集、subreddit url 采集等含义时使用。也用于接收 task_id/status、配置 DATAIFY_API_TOKEN 或排查此 Dataify Builder 请求。\"\n---\n\n# Dataify Reddit Posts\n\n通过 Dataify Builder 提交 Reddit 帖子信息采集任务。本技能是三种采集模式的引导封装：\n\n| 模式 | 采集器 ID | 用途 |\n| --- | --- | --- |\n| 帖子 URL | `reddit_posts_by-url` | 通过帖子 URL 采集一个或多个 Reddit 帖子。 |\n| 关键词 | `reddit_posts_by-keywords` | 通过搜索关键词采集 Reddit 帖子。 |\n| Subreddit URL | `reddit_posts_by-subredditurl` | 通过 subreddit URL 采集 Reddit 帖子，支持排序和时间选项。 |\n\n提交成功后，向用户提供 `task_id`、返回的或推断的状态，并告知用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill) 查看结果。\n\n## API TOKEN 处理\n\n使用 `DATAIFY_API_TOKEN` 作为长期保存的 token 名称。\n\n- 如果用户在请求中提供了 token，则在本次运行中使用该 token。\n- 如果未提供 token，先检查环境中是否已在本地保存 `DATAIFY_API_TOKEN`。\n- 如果本地已保存 `DATAIFY_API_TOKEN`，则直接使用，无需要求用户重新输入。\n- 如果本地没有可用的 token，告知用户需要提供 Dataify API TOKEN。\n- 如果用户没有 API TOKEN，告知用户可以在 [Dataify](https://dashboard.dataify.com/login?utm_source=skill) 注册或登录以获取。\n- 如果用户已有 API TOKEN，告知用户可以在 [Dataify](https://dashboard.dataify.com?utm_source=skill) 右上角找到。\n- 用户提供 API TOKEN 后，如果本地未保存 `DATAIFY_API_TOKEN`，询问是否将其保存为 `DATAIFY_API_TOKEN` 以供后续使用。\n- 如果用户希望保存，提供适合其 shell 的命令并要求其执行；不要在未经确认的情况下静默保存 token。\n- 没有 token 不要调用 Builder 接口。\n- 在面向用户的说明中始终称其为 `API TOKEN`。保存到本地时优先使用环境变量名 `DATAIFY_API_TOKEN`。\n\nPowerShell 示例，为当前会话保存 token：\n\n```powershell\n$env:DATAIFY_API_TOKEN = \"YOUR_DATAIFY_API_TOKEN\"\n```\n\n在 Windows 上设置持久的用户级变量：\n\n```powershell\n[Environment]::SetEnvironmentVariable(\"DATAIFY_API_TOKEN\", \"YOUR_DATAIFY_API_TOKEN\", \"User\")\n```\n\n## 核心工作流程\n\n1. 首先询问用户选择采集模式：`url`、`keywords` 或 `subredditurl`。\n2. 用户选择模式后，仅展示该模式的参数表格和默认值。\n3. 如果所选模式有下拉字段，以包含 `Label` 和 `Value` 列的 Markdown 表格展示下拉选项。\n4. 询问用户是否需要在运行任务前修改任何值。\n5. 询问用户是否需要为所选模式采集多组 Reddit 帖子。\n6. 将最终值规范化为仅包含所选模式的参数对象列表。\n7. 从显式输入或已保存的 `DATAIFY_API_TOKEN` 中获取 Dataify token。\n8. 如果没有可用的 token，要求用户输入 API TOKEN 并询问是否将其保存为 `DATAIFY_API_TOKEN`。\n9. 验证所选模式、URL、数值、下拉值和文件名。\n10. 使用所选模式的 `spider_id` 提交 Builder 请求。\n11. 从 Builder 响应中读取 `data.task_id`，并在存在时读取 `data.status` 或 `status`。\n13. 告知用户前往 [Dataify](https://dashboard.dataify.com?utm_source=skill) 查看或管理结果。\n\n## 模式选择\n\n当用户调用此技能时，首先展示以下 Markdown 表格并要求选择一种模式：\n\n| 标签 | 值 |\n| --- | --- |\n| 通过帖子 URL 采集 Reddit 帖子 | `url` |\n| 通过关键词采集 Reddit 帖子 | `keywords` |\n| 通过 subreddit URL 采集 Reddit 帖子 | `subredditurl` |\n\n询问：\"您想使用哪种采集模式：`url`、`keywords` 还是 `subredditurl`？\"\n\n在模式明确之前不要提交 Builder 请求。\n\n## 帖子 URL 模式参数\n\n仅当用户选择 `url` 时使用本节。\n\n| 字段 | 必填 | 默认值 | 位置 | 说明 |\n| --- | --- | --- | --- | --- |\n| `url` | 是 | `https://www.reddit.com/r/battlefield2042/comments/1cmqs1d/official_update_on_the_next_battlefield_game/` | `spider_parameters` | Reddit 帖子 URL。 |\n| `file_name` | 否 | `{{TasksID}}` | Builder 表单字段 | 用户未更改时使用默认值。 |\n\n\n同时询问：\"您是否需要采集多组 Reddit 帖"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1743,"uniquenessScore":35,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T23:57:09.548Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T23:57:09.548Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-12T20:15:16.454Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}