db75f9e341
Add Instagram Reels as the 8th research source via ScrapeCreators API. One API key (SCRAPECREATORS_API_KEY) now covers both TikTok and Instagram. - Add scripts/lib/instagram.py: keyword search, transcript extraction, relevance scoring, engagement metrics (views, likes, comments) - Add InstagramItem to schema, normalization, scoring, dedup, rendering - Add Instagram to orchestrator pipeline, watchlist, and UI spinners - Update SKILL.md: stats template, citation priority, item format, URL-to-name extraction rules, anti-Sources instruction - Update README and CHANGELOG for v2.8 - Fix: Instagram/TikTok not running in --search= web-only path - Fix: web stats line showing full URLs instead of domain names - Replace APIFY_API_TOKEN with SCRAPECREATORS_API_KEY throughout Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
136 lines
5.5 KiB
Markdown
136 lines
5.5 KiB
Markdown
---
|
|
title: "fix: Web sources showing full URLs instead of plain domain names"
|
|
type: fix
|
|
status: pending
|
|
date: 2026-03-04
|
|
---
|
|
|
|
# fix: Web Sources Showing Full URLs Instead of Plain Domain Names
|
|
|
|
## Problem
|
|
|
|
Two regressions in the `/last30days` skill output:
|
|
|
|
### Regression 1: Full URLs on the Web stats line
|
|
|
|
The `🌐 Web:` stats line is showing full URLs instead of plain source names:
|
|
|
|
**BAD (current — "Instagram Trends" run):**
|
|
```
|
|
├─ 🌐 Web: 10+ pages — https://later.com/blog/instagram-reels-trends/,
|
|
https://socialbee.com/blog/instagram-trends/,
|
|
https://buffer.com/resources/instagram-algorithms/,
|
|
https://metricool.com/instagram-trends/,
|
|
https://napoleoncat.com/blog/instagram-reels-trends/
|
|
```
|
|
|
|
**GOOD (expected):**
|
|
```
|
|
├─ 🌐 Web: 10+ pages — Later, SocialBee, Buffer, Metricool, NapoleonCat
|
|
```
|
|
|
|
### Regression 2: Trailing Sources: block with full URLs
|
|
|
|
A separate `Sources:` section appears at the bottom of the response with full URLs:
|
|
|
|
```
|
|
Sources:
|
|
- https://www.heyorca.com/blog/instagram-social-news
|
|
- https://socialbee.com/blog/instagram-updates/
|
|
- https://buffer.com/resources/instagram-algorithms/
|
|
- https://www.cnn.com/2026/02/22/tech/social-media-addiction-trial-tobacco-moment
|
|
```
|
|
|
|
This was fixed in commit `82efa61` (2026-03-02) but is regressing intermittently.
|
|
|
|
## Root Cause
|
|
|
|
The SKILL.md instructions at lines 219-221, 404, and 409 already say the right thing:
|
|
- Line 404: `├─ 🌐 Web: {N} pages — Source Name, Source Name, Source Name`
|
|
- Line 409: `"plain names, no URLs — URLs wrap badly in terminals"`
|
|
- Lines 219-221: "DO NOT output a separate Sources: block"
|
|
|
|
But the model ignores these because:
|
|
|
|
1. **The template `Source Name` is too abstract.** The model sees WebSearch results with full URLs and doesn't know how to extract a human-friendly name from `https://later.com/blog/instagram-reels-trends/`. It needs explicit examples showing the transformation.
|
|
|
|
2. **The WebSearch system mandate still wins.** The WebSearch tool's built-in instruction (`"you MUST include a Sources: section"`) outcompetes the skill's instruction. The current countermeasure (line 409) works sometimes but not reliably — it needs to be stronger and repeated.
|
|
|
|
3. **No explicit extraction rule.** The model needs a concrete rule for turning URLs into names: strip protocol, strip path, strip `www.`, capitalize.
|
|
|
|
## Proposed Solution
|
|
|
|
**SKILL.md edits only. No Python changes.**
|
|
|
|
### Fix 1: Add explicit URL-to-name examples in the stats template (line 404 area)
|
|
|
|
After the stats template block, add concrete examples showing the transformation:
|
|
|
|
```
|
|
**🌐 Web: line formatting:**
|
|
- Extract the SITE NAME from each URL — strip protocol, path, and "www."
|
|
- Use the publication's proper name when recognizable
|
|
- Examples:
|
|
- https://later.com/blog/instagram-reels-trends/ → "Later"
|
|
- https://socialbee.com/blog/instagram-trends/ → "SocialBee"
|
|
- https://buffer.com/resources/instagram-algorithms/ → "Buffer"
|
|
- https://www.cnn.com/2026/02/22/tech/... → "CNN"
|
|
- https://medium.com/the-ai-studio/... → "Medium"
|
|
- https://radicaldatascience.wordpress.com/... → "Radical Data Science"
|
|
- NEVER paste the URL itself. ONLY the site name as plain text.
|
|
- Separate names with commas: "Later, SocialBee, Buffer, CNN, Medium"
|
|
```
|
|
|
|
### Fix 2: Strengthen the anti-Sources instruction (line 409 area)
|
|
|
|
Replace the current single-paragraph note with a louder, more explicit instruction:
|
|
|
|
```
|
|
**⚠️ WebSearch citation requirement — ALREADY SATISFIED above.**
|
|
The WebSearch tool mandates source citation. That requirement is FULLY satisfied
|
|
by the source names on the 🌐 Web: line above. Do NOT append a separate
|
|
"Sources:" section at the end of your response. Do NOT list URLs anywhere in
|
|
your output. The 🌐 Web: line IS your citation. You're done.
|
|
```
|
|
|
|
### Fix 3: Add a negative example in the URL FORMATTING section (line 356 area)
|
|
|
|
Extend the existing BAD/GOOD examples to cover the stats line specifically:
|
|
|
|
```
|
|
URL FORMATTING: NEVER paste raw URLs anywhere in the output.
|
|
- BAD: "per https://www.rollingstone.com/music/music-news/kanye-west-bully-1235506094/"
|
|
- GOOD: "per Rolling Stone"
|
|
- BAD stats line: "🌐 Web: 10 pages — https://later.com/blog/..., https://buffer.com/..."
|
|
- GOOD stats line: "🌐 Web: 10 pages — Later, Buffer, CNN, SocialBee"
|
|
```
|
|
|
|
### Fix 4: Update Security section (line 588, 600)
|
|
|
|
While we're in SKILL.md, update the stale Apify references to ScrapeCreators:
|
|
- Line 588: Change Apify reference to ScrapeCreators for TikTok
|
|
- Line 600: Update TikTok requirement note
|
|
- Add Instagram source mention
|
|
|
|
## Files to Modify
|
|
|
|
| File | Action | Description |
|
|
|------|--------|-------------|
|
|
| `SKILL.md` | MODIFY | Strengthen URL formatting rules, add examples, fix Apify refs |
|
|
|
|
## Implementation Steps
|
|
|
|
- [x] Add URL-to-name extraction examples after stats template (after line 407)
|
|
- [x] Strengthen anti-Sources instruction (replace line 409)
|
|
- [x] Add BAD/GOOD stats line example to URL FORMATTING section (around line 356)
|
|
- [x] Update Security section: Apify → ScrapeCreators, add Instagram (lines 588, 600)
|
|
- [x] Run `bash scripts/sync.sh` to deploy to all destinations
|
|
- [ ] Test with `/last30days Instagram Trends` — confirm plain names, no trailing Sources:
|
|
|
|
## Acceptance Criteria
|
|
|
|
- [ ] `🌐 Web:` line shows plain names only (e.g., "Later, SocialBee, Buffer")
|
|
- [ ] No `Sources:` section appears at the bottom of the response
|
|
- [ ] No raw URLs appear anywhere in the output (synthesis, stats, or footer)
|
|
- [ ] Security section reflects current source stack (ScrapeCreators, not Apify)
|