Resumen
Searches YouTube for videos on un topic, extrae metadata (titulo, canal, views, descripcion), y crea formatted Markdown notes in un Obsidian vault con interlinks y etiquetas.
Desencadenador
Manual activar o diario cron for tracked topics
Programación
Manual o diario for tracked topics
Pasos del flujo de trabajo
Define research topic
Specify el topic to research on YouTube y el Obsidian vault path for salida notes.
Search YouTube via API
Consulta Scavio's YouTube endpoint de busqueda for el topic. Retrieve top 10-20 resultados con metadata.
Extraer video metadata
For cada resultado, extraer titulo, canal nombre, view conteo, publish date, descripcion fragmento, y URL.
Generar Obsidian notes
Crear un Markdown file per video con YAML frontmatter (etiquetas, date, canal) y cuerpo contenido con el video detalles.
Crear index note
Generar un topic index note ese enlaces to todos individual video notes for el research sesion.
Add to vault
Escribir todos generado Markdown files to el Obsidian vault directory.
Implementacion en Python
import requests, os, json
from datetime import date
H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}
VAULT = os.path.expanduser("~/Documents/Obsidian/Research")
def youtube_to_obsidian(topic, max_results=10):
r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "youtube", "query": topic}, timeout=10).json()
notes = []
for video in r.get("organic", [])[:max_results]:
title = video.get("title", "Untitled")
slug = title.lower().replace(" ", "-")[:50]
note = f"""---
title: "{title}"
channel: "{video.get('channel', 'Unknown')}"
date: {date.today()}
tags: [youtube, {topic.replace(' ', '-')}]
---
# {title}
- **Channel:** {video.get('channel', 'Unknown')}
- **Views:** {video.get('views', 'N/A')}
- **URL:** {video.get('link', '')}
## Summary
{video.get('snippet', 'No description available.')}
"""
filepath = os.path.join(VAULT, f"{slug}.md")
with open(filepath, "w") as f:
f.write(note)
notes.append(slug)
print(f"Created {len(notes)} notes for topic: {topic}")
youtube_to_obsidian("search api tutorial")Implementacion en JavaScript
import fs from "fs";
import path from "path";
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
const VAULT = path.join(process.env.HOME, "Documents/Obsidian/Research");
async function youtubeToObsidian(topic, maxResults = 10) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "youtube", query: topic})
}).then(r => r.json());
for (const video of (r.organic || []).slice(0, maxResults)) {
const slug = (video.title || "untitled").toLowerCase().replace(/ /g, "-").slice(0, 50);
const note = "---\ntitle: " + video.title + "\nchannel: " + video.channel +
"\ntags: [youtube]\n---\n\n# " + video.title +
"\n\n" + (video.snippet || "");
fs.writeFileSync(path.join(VAULT, slug + ".md"), note);
}
}Plataformas utilizadas
YouTube
Búsqueda de videos con transcripciones y metadatos