Minimalny serwis API rozszerzający n8n o dwie główne funkcje: pobieranie transkryptów z YouTube oraz ekstrakcję czytelnej treści artykułów.
- YouTube Transcript: formaty
json,text,srt,vtt - Article Extract: czysty tekst + podstawowe metadane (tytuł, byline, excerpt, siteName)
git clone git@github.com:biski/n8n-api-extension.git
cd n8n-api-extension
cp .env.example .env # ustaw własny API_TOKEN
npm installWymagania wersji Node: lokalnie do developmentu zalecane jest Node.js 20+ (jsdom 27 i zależność webidl-conversions wykorzystują nowe właściwości ArrayBuffer dostępne od Node 20; na starszych wersjach, np. 18, zobaczysz błąd typu TypeError: Cannot read properties of undefined (reading 'get')).
Alternatywnie przez HTTPS:
git clone https://github.com/biski/n8n-api-extension.git
cd n8n-api-extension
cp .env.example .env
npm installPrzykład .env (minimum):
PORT=3000
API_TOKEN=twoj-bardzo-losowy-token
NODE_ENV=productionGenerowanie silnego tokenu:
openssl rand -base64 32npm run devnpm run build
npm run start:prodSerwis będzie pod: http://localhost:3000
Budowa obrazu:
docker build -t n8n-api-extension:latest .Upewnij się, że obraz bazowy używa Node 20+ (Dockerfile już ustawiony na node:20-alpine). Jeśli zobaczysz błąd związany z webidl-conversions / ArrayBuffer.resizable, oznacza to zbyt starą wersję Node.
Uruchomienie (docker compose):
docker compose up -d # lub: docker-compose up -dLogi / zatrzymanie:
docker compose logs -f
docker compose downW produkcji najczęściej: reverse proxy (NGINX / Traefik) przed kontenerem + ustawienie API_TOKEN w sekrecie.
Każde żądanie wymaga nagłówka:
Authorization: Bearer <API_TOKEN>
GET /youtube/transcript/:videoId?format=json|text|srt|vtt
Przykłady:
curl -H "Authorization: Bearer $API_TOKEN" \
http://localhost:3000/youtube/transcript/dQw4w9WgXcQ
curl -H "Authorization: Bearer $API_TOKEN" \
"http://localhost:3000/youtube/transcript/dQw4w9WgXcQ?format=srt"Przykładowa odpowiedź JSON:
{
"success": true,
"videoId": "dQw4w9WgXcQ",
"format": "json",
"transcript": [
{ "text": "Przykładowy caption", "start": "0", "dur": "2.5" }
]
}POST /article/extract body: { "url": "https://example.com/artykul" }
curl -X POST \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/article"}' \
http://localhost:3000/article/extractPrzykładowa odpowiedź:
{
"success": true,
"url": "https://example.com/article",
"title": "Tytuł artykułu",
"content": "Wyczyszczona treść artykułu...",
"excerpt": "Krótki opis",
"byline": "Autor",
"length": 1500,
"siteName": "Example Site"
}Standardowy format:
{ "success": false, "error": "Opis błędu" }MIT (zobacz LICENSE).
- Ustaw silny
API_TOKENw.envlub managerze sekretów. - Zbuduj obraz (
docker build -t n8n-api-extension:latest .) i uruchom kontener (docker compose up -d). - Podepnij reverse proxy z HTTPS.
- Wykonaj szybki test curl dla obu endpointów.
To wszystko – reszta to już integracja z Twoimi workflow w n8n.