AI Skill Report Card
Extracting Video Metadata
Quick Start
Given raw scraped YouTube page text, parse it into structured records:
JSON{ "title": "Trabzonspor Ferencváros'u Nasıl Geçer?", "channel": "Akıl Oyunu", "duration": "11:59", "views": "18 B", "uploaded": "1 gün önce", "sponsored": false }
Workflow
- Split raw text into individual video/content blocks using duration markers (e.g.
13:12,0:07,Shorts) as delimiters - For each block, extract: duration/type, title, channel name, view count, upload recency
- Detect sponsored content (marked with "Sponsorlu" prefix, no duration/views/upload pattern)
- Detect Shorts (marked with "Shorts" label, often no channel/views shown or grouped)
- Detect game/app promos (marked with "Oyna" and "oynatma" play-count instead of views)
- Normalize Turkish number/date shorthand (B = bin/thousand, Mn = milyon/million, "gün/hafta/ay/yıl önce")
- Group output by content type: Videos, Shorts, Sponsored, Games
- Return clean structured list (JSON/table), preserving original order within each group
Examples
Example 1:
Input: 13:12Valorant'ta En Nadir 80 ANMpri40 B görüntüleme • 7 gün önce
Output:
JSON{"duration": "13:12", "title": "Valorant'ta En Nadir 80 ANM", "channel": "pri", "views": "40000", "uploaded_relative": "7 gün önce"}
Example 2:
Input: Shorts Popeyes 10 Peynirli Burger Abartı Mı?…158 B görüntüleme
Output:
JSON{"type": "short", "title": "Popeyes 10 Peynirli Burger Abartı Mı?", "views": "158000"}
Example 3:
Input: 0:07Yemeksepeti 25 yıldır hep seninle!...SponsorluYemeksepeti
Output:
JSON{"type": "sponsored_ad", "brand": "Yemeksepeti", "duration": "0:07", "text": "25 yıldır hep seninle! Tam 25 yıldır seni balla bölmenin keyfini paylaşıyoruz."}
Example 4:
Input: OynaFlow Legends25 Mn oynatmaPEGI 3
Output:
JSON{"type": "game_ad", "title": "Flow Legends", "play_count": "25000000", "rating": "PEGI 3"}
Best Practices
- Channel name usually immediately follows the title with no space/separator — split using the view-count pattern (
\d+\s?(B|Mn)\s?görüntüleme) as an anchor, then work backward to isolate title vs. channel. - Treat "•" as the separator between view count and relative upload time.
- Preserve original strings for numbers but also provide normalized numeric values (B×1,000, Mn×1,000,000).
- Titles containing "…" indicate truncation — mark as
"truncated": truerather than guessing full text. - Sponsored/ad blocks rarely follow the standard duration+title+channel+views pattern; identify them by the "Sponsorlu" keyword and handle separately.
Common Pitfalls
- Don't assume every block has a channel name separate from title — Shorts often omit it.
- Don't misparse "oynatma" (play count for games) as "görüntüleme" (views) — they are different metrics for different content types.
- Don't drop the distinction between absolute duration timestamps (
11:22) and the "Shorts" label — they signal different content types. - Don't try to translate Turkish text unless explicitly asked; preserve original language in output fields.