openclaw 网盘下载
OpenClaw

技能详情(站内镜像,无评论)

首页 > 技能库 > Podcast Discovery

Podcast discovery for Wherever.Audio -- find shows and episodes, generate wherever.audio links.

通信与消息

许可证:MIT-0

MIT-0 ·免费使用、修改和重新分发。无需归因。

版本:v0.0.4

统计:⭐ 0 · 257 · 1 current installs · 1 all-time installs

0

安装量(当前) 1

🛡 VirusTotal :可疑 · OpenClaw :良性

Package:aegrumet/podcast-discovery

安全扫描(ClawHub)

  • VirusTotal :可疑
  • OpenClaw :良性

OpenClaw 评估

The skill's requirements, instructions, and included code are consistent with a podcast-discovery tool that finds RSS feeds via Clawsica and builds wherever.audio links; it requests no secrets or unusual privileges.

综合结论

This skill appears coherent and limited to podcast discovery: it will call the public Clawsica API and fetch RSS feeds (network activity). It requires no secrets and has no install script, but includes a small Python utility you may need to run (pip install -r scripts/requirements.txt) if you want episode search locally. If you plan to enable web-search behavior implied by the docs, confirm which web/search tool the agent will use. As always, …

安装(复制给龙虾 AI)

将下方整段复制到龙虾中文库对话中,由龙虾按 SKILL.md 完成安装。

请把本段交给龙虾中文库(龙虾 AI)执行:为本机安装 OpenClaw 技能「Podcast Discovery」。简介:Podcast discovery for Wherever.Audio -- find shows and episodes, generate where…。
请 fetch 以下地址读取 SKILL.md 并按文档完成安装:https://raw.githubusercontent.com/openclaw/skills/refs/heads/main/skills/aegrumet/podcast-discovery/SKILL.md
(来源:yingzhi8.cn 技能库)

SKILL.md

打开原始 SKILL.md(GitHub raw)

---
name: podcast-discovery
description: "Podcast discovery for Wherever.Audio -- find shows and episodes, generate wherever.audio links."
user-invocable: true
metadata:
  openclaw:
    emoji: "🎧"
---

# podcast-discovery

Podcast discovery skill for Wherever.Audio. Given a natural-language query, find the right podcast show or episode and return a playable wherever.audio link.

Do NOT use this skill for non-podcast queries (general web search, music, etc.).

## Trigger phrases

Use this skill immediately when the user message includes podcast lookup language such as:
- "find podcast", "find the podcast", "look up podcast", "search podcasts"
- "find episode", "podcast episode about", "interview episode", "latest episodes"
- "give me a wherever link", "wherever link", "wherever.audio link", "listen link", "show link"
- named show/host requests like "Radiolab", "Lex Fridman", "Hard Fork", or "Joe Rogan"

When triggered, prioritize link construction over metadata reporting.

## Primary Objective (Highest Priority)

Your job is to produce a working Wherever link (`/show` or `/listen`) as soon as enough information is available.

Success condition:
1. Resolve a valid RSS URL from Clawsica.
2. If `contentScope = podcast-show`, immediately return a show link.
3. If `contentScope = podcast-episode` and a matching item is found, immediately return an episode link.

Do not stop at metadata, search summaries, or candidate lists if a valid link can be constructed.

## Link Templates

Episode (contentScope = podcast-episode):
  `https://wherever.audio/listen?rssUrl={rss_url}&itemGuid={guid}&fallbackLink={fallback}`

Show (contentScope = podcast-show):
  `https://wherever.audio/show?rssUrl={rss_url}`

All `{placeholder}` values must be URL-encoded.

## Action Policy: Link-First, Ask-Last

Default behavior is to execute and return a link in the same response.

Only ask a follow-up question when one of these is true:
- You cannot determine whether the user wants a show vs episode.
- Clawsica returns no plausible show/RSS result after retries.
- Multiple episode candidates are similarly strong and no clear best match exists.

If none of the above apply, do not ask for confirmation. Return the link.

## Token Budget Policy

- Run local tooling first and send only compact result fields to the model.
- Never send raw RSS XML, full feed dumps, or large metadata blobs to the model.
- For episode matching, pass only top-ranked candidate rows needed for decision-making and link construction.

## Workflow

### Step 1 — Classify the query

Before searching, classify the user's query along two dimensions:

**intentType** — what kind of request?
- `specific-podcaster` — user names a host or show (e.g. "Lex Fridman", "Radiolab")
- `specific-topic` — user describes a topic or guest (e.g. "Geoffrey Hinton interview about AI")
- `discovery` — broad exploration (e.g. "best science podcasts", "podcasts about space")

**contentScope** — what are they looking for?
- `podcast-show` — a show/feed (e.g. "find the Radiolab podcast")
- `podcast-episode` — a specific episode (e.g. "the Radiolab episode about colors")

### Step 2 — Resolve the show

**If intentType is `specific-podcaster`** (show name is known):
Go directly to Clawsica (step 3). The query likely contains the show title.

**If intentType is `specific-topic` or `discovery`** (show name is unknown):
Search the web first to discover likely podcast titles, then proceed to Clawsica with those titles.

### Step 3 — Clawsica show search

Search for podcast shows using the public Clawsica endpoint. This returns show metadata including RSS feed URLs.

```bash
curl -s "https://clawsica.wherever.audio/p?q=radiolab"
```

Returns a JSON array of show objects. Each object includes a `url` field containing the RSS feed URL.

**Important:** Only use the `url` field from Clawsica results as the RSS URL. Do NOT substitute web page URLs, Apple Podcasts links, Spotify links, or any other URL — Wherever.Audio only understands RSS feed URLs. If Clawsica returns no results and you cannot obtain a definitive RSS feed URL, tell the user you were unable to find the podcast rather than guessing with a non-RSS URL.

If Clawsica returns no results, try alternate spellings or broader terms. See `references/CLAWSICA_API.md` for the full API reference.

### Step 4 — Branch by contentScope

**If contentScope is `podcast-show`:**
Construct a show link using the RSS URL from step 3 and present it immediately. Do not ask for additional confirmation. Done.

Example: `https://wherever.audio/show?rssUrl=https%3A%2F%2Ffeeds.feedburner.com%2Fradiolab`

**If contentScope is `podcast-episode`:**
Continue to step 5.

### Step 5 — Run local feed tooling (required for episode lookup)

For episode lookup, use local tooling instead of manual XML parsing:

```bash
python scripts/search_feed_episodes.py --mode search --rss-url "https://feeds.feedburner.com/radiolab" --query "space stories" --limit 5
```

Optional semantic rerank:

```bash
python scripts/search_feed_episodes.py --mode search --rss-url "https://feeds.feedburner.com/radiolab" --query "space stories" --limit 5 --semantic
```

Compact `search` output contract:
- top-level keys: `mode`, `rssUrl`, `query`, `semanticUsed`, `candidateCount`, `candidates`
- candidate keys: `guid`, `title`, `pubDate`, `fallbackLink`, `score`

Use these candidate rows to select the best episode. Do not return feed-level metadata unless explicitly requested.

Selection policy:
- Auto-pick when the top `score` is clearly stronger than the second candidate.
- If top candidates are near-tied, ask one disambiguation question.

### Step 6 — Construct the episode link

Build a wherever.audio episode link using values from the selected `search` candidate:

- `rss_url` — the feed URL from step 3
- `guid` — candidate `guid`
- `fallback` — candidate `fallbackLink`

Example:
```
https://wherever.audio/listen?rssUrl=https%3A%2F%2Ffeeds.feedburner.com%2Fradiolab&itemGuid=some-guid-value&fallbackLink=https%3A%2F%2Fradiolab.org%2Fepisode
```

Present the link to the user along with the episode title and publish date.

### Optional utilities — newest and overview

If the user asks for latest episodes from a known feed:

```bash
python scripts/search_feed_episodes.py --mode newest --rss-url "https://feeds.feedburner.com/radiolab" --limit 10
```

Compact `newest` output contract:
- top-level keys: `mode`, `rssUrl`, `count`, `items`
- item keys: `guid`, `title`, `pubDate`, `fallbackLink`

If the user asks for feed-level metadata:

```bash
python scripts/search_feed_episodes.py --mode overview --rss-url "https://feeds.feedburner.com/radiolab"
```

Compact `overview` output contract:
- `mode`, `rssUrl`, `feedTitle`, `feedDescriptionShort`, `author`, `language`, `lastBuildDate`, `itemCount`

Use these utility modes to answer the request directly while keeping payloads compact.

Run the local feed tool (for developers/testing)

Path: scripts/search_feed_episodes.py (relative to the skill directory)
Requirements: scripts/requirements.txt (feedparser, rapidfuzz, pytest)
Quick start (recommended, cross-platform):
1) Create and activate a virtual environment in the skill folder:
   python3 -m venv .venv
   source .venv/bin/activate   # macOS / Linux.venvScriptsactivate      # Windows (PowerShell)
2) Install dependencies:
pip install -r scripts/requirements.txt
  3) Run the tool (examples):
     python scripts/search_feed_episodes.py --mode overview --rss-url "<RSS_URL>"
     python scripts/search_feed_episodes.py --mode newest --rss-url "<RSS_URL>" --limit 10
     python scripts/search_feed_episodes.py --mode search --rss-url "<RSS_URL>" --query "attack on Iran" --limit 5 --semantic
Notes:
The tool prints compact JSON matching the skill's expected contracts.
Make the script executable (chmod +x scripts/search_feed_episodes.py) for direct execution.
Use the venv if system pip is restricted.

## Response Format

When a link is available, respond in this order:
1. The Wherever URL (first line).
2. One short line identifying the resolved show/episode.
3. Optional one-line note only if there was ambiguity.

Keep responses concise. Do not include raw metadata dumps unless explicitly requested.

## Prohibited Behavior

- Do not return only webpage metadata when a Wherever link can be built.
- Do not ask "Should I proceed?" if required link parameters are already known.
- Do not present candidate options unless disambiguation is truly required.

## Privacy

- Do NOT expose internal Clawsica infrastructure details beyond what is documented here.
- The Clawsica search endpoint does not require authentication.
- See `references/CLAWSICA_API.md` for the full API reference.
- See `references/LOCAL_EPISODE_SEARCH.md` for local feed-tool commands and schema details.

## Example prompts

- "Find a Geoffrey Hinton interview episode and give me a wherever.audio link."
- "What episodes cover Radiolab's space stories?"
- "Search for BBC science podcasts about AI."
- "Give me the Lex Fridman podcast."
- "Find the podcast Hard Fork."