Files
freshrss/README.md
2026-04-18 09:03:18 +02:00

184 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# n8n-nodes-freshrss
Node społecznościowy dla [n8n](https://n8n.io) integrujący [FreshRSS](https://freshrss.github.io/FreshRSS/) przez Google Reader API (GReader).
## Funkcjonalności
| Zasób | Operacja | Opis |
|---|---|---|
| **Kategoria** | Pobierz wszystkie | Lista wszystkich kategorii (etykiet) z instancji FreshRSS |
| **Artykuł** | Pobierz nieprzeczytane | Pobiera wszystkie nieprzeczytane artykuły ze wszystkich kanałów |
| **Artykuł** | Pobierz nieprzeczytane wg kategorii | Pobiera nieprzeczytane artykuły z wybranej kategorii |
Obie operacje artykułów obsługują **paginację** przez token kontynuacji oraz konfigurowalną **liczbę wyników** (11000).
## Wymagania
- Instancja FreshRSS z włączonym **Google Reader API**
- Ustawienia → Uwierzytelnianie → Zezwól na dostęp przez API (zaznacz checkbox)
- **Hasło API** ustawione dla użytkownika
- Ustawienia użytkownika → Uwierzytelnianie → Hasło API
## Instalacja
W instancji n8n:
```
Settings → Community Nodes → Install → n8n-nodes-freshrss
```
Lub przez npm w instalacji self-hosted:
```bash
npm install n8n-nodes-freshrss
```
## Dane uwierzytelniające
| Pole | Opis |
|---|---|
| Base URL | URL twojej instancji FreshRSS, np. `https://rss.example.com` |
| Username | Login do FreshRSS |
| API Password | Hasło API przypisane do użytkownika (Ustawienia → Uwierzytelnianie → Hasło API) — **różne** od hasła logowania |
## Parametry node'a
### Kategoria → Pobierz wszystkie
Zwraca wszystkie kategorie zdefiniowane przez użytkownika. Tagi systemowe (`com.google/*`) są automatycznie odfiltrowywane.
### Artykuł → Pobierz nieprzeczytane
Pobiera nieprzeczytane artykuły ze wszystkich kanałów.
| Parametr | Domyślnie | Opis |
|---|---|---|
| Maks. wyników | 50 | Maksymalna liczba artykułów (11000) |
| Token kontynuacji | — | Token paginacji zwrócony przez poprzednie wywołanie |
### Artykuł → Pobierz nieprzeczytane wg kategorii
Jak wyżej, ale ograniczone do jednej kategorii.
| Parametr | Domyślnie | Opis |
|---|---|---|
| Nazwa kategorii | — | Dokładna nazwa kategorii tak jak widnieje w FreshRSS |
| Maks. wyników | 50 | Maksymalna liczba artykułów (11000) |
| Token kontynuacji | — | Token paginacji zwrócony przez poprzednie wywołanie |
### Pola wyjściowe artykułu
```
id, title, author, published, updated, url,
content, feedTitle, feedUrl, categories,
isRead, isStarred
```
## Rozwój
### Konfiguracja środowiska
```bash
git clone https://github.com/paramah/n8n-nodes-freshrss
cd n8n-nodes-freshrss
npm install
```
### Budowanie
```bash
npm run build # kompilacja TypeScript → dist/
npm run dev # tryb obserwowania zmian
```
### Linting i formatowanie
```bash
npm run lint
npm run format
```
### Testy
Testy jednostkowe używają **Jest + ts-jest**. Nie wymagają instancji n8n — wszystkie wywołania HTTP są mockowane.
```bash
npm test # uruchom wszystkie testy
npm run test:watch # tryb obserwowania zmian
npm run test:coverage # z raportem pokrycia kodu
```
Zakres testów:
- `buildStreamUrl` — budowanie i enkodowanie URL
- `getAuthToken` — przepływ uwierzytelniania, obsługa błędów
- `freshrssApiRequest` — adapter HTTP, błędy 401/403
- `FreshRss.node` — wszystkie operacje, normalizacja artykułów, `continueOnFail`
### Ręczny runner CLI (bez n8n)
Testuj swoją instancję FreshRSS bezpośrednio z terminala, aby sprawdzić rzeczywisty output API.
**1. Skopiuj i uzupełnij dane uwierzytelniające:**
```bash
cp .env.test.example .env.test
# edytuj .env.test
```
`.env.test`:
```
FRESHRSS_URL=https://rss.example.com
FRESHRSS_USERNAME=twoj_login
FRESHRSS_API_PASSWORD=twoje_haslo_api
```
**2. Uruchom:**
```bash
npm run freshrss categories
npm run freshrss unread
npm run freshrss unread -- --max 10
npm run freshrss unread-by-category -- --category Tech
npm run freshrss unread-by-category -- --category Tech --max 5
npm run freshrss unread -- --continuation <token>
npm run freshrss unread -- --format json
```
Lub przez Task:
```bash
task categories
task unread
task unread-by-category CAT=Tech
task unread-by-category CAT=Tech MAX=5
```
Wynik można przekazać do `jq` z flagą `--format json`:
```bash
npm run freshrss unread -- --format json | jq '.[].title'
```
## Struktura projektu
```
src/
credentials/
FreshRssApi.credentials.ts # definicja danych uwierzytelniających dla n8n
nodes/
FreshRss/
FreshRss.node.ts # główny node (zasoby, operacje, execute)
helpers.ts # getAuthToken, freshrssApiRequest, buildStreamUrl
freshrss.svg # ikona node'a
__tests__/
helpers.test.ts # testy jednostkowe helperów
FreshRss.node.test.ts # testy jednostkowe node'a
scripts/
freshrss-run.ts # standalone runner CLI
```
## Licencja
MIT