RSS Watch
RSS Watch ger feedvisning, kategorigruppering och valfria AI-sammanfattningar.
Publik feed-sida
- URL:
/feed
- Bläddra feeds grupperade per kategori
- Standardvärdet för Feeds per page är nu konfigurerbart från
/feed-admin (query per_page kan fortfarande överstyra per anrop)
- Öppna feed-källa eller kategori-RSS
- Se första och senaste discovery-tid
- Se cachade AI-sammanfattningar per kategori
- Feeds som markeras som dolda visas inte i
/feed utan får i stället en hash-baserad direkt-URL, till exempel /feed/key/{public-hash} och /api/rss/feed/{public-hash}
- Analytics-feeds finns nu som dedikerade selectors under
/api/rss/feed/{selector}:
analytics-daily (alias daily-analytics)
analytics-weekly (alias weekly-analytics)
analytics-monthly (alias monthly-analytics)
analytics-yearly (alias yearly-analytics)
analytics-bulk (alias bulk-analytics, kombinerar daily/weekly/monthly/yearly)
- Analytics-feedposter länkar nu tillbaka till relevant kategori/site där det går (
/api/rss/feed/{category-slug} för kategori-analytics och /feed/{site-urlid} för site-analytics)
/feed har nu ett mini-kort Ask about all open feeds där besökare kan ställa fria frågor mot den öppna RSS-datan
Feed-frågor och historik
- Skicka fråga:
POST /feed/user-questions
- Historiksida:
GET /feed/user-questions
- Gäster måste passera Cloudflare Turnstile innan submit och begränsas av konfigurerbara dygns-/veckokvoter
- Inloggade användare har också kvoter (högre standardvärden), med separat konfigurerbar dygns-/veckogräns
- Admin-användare är obegränsade och slipper Turnstile för den här funktionen
- Gästintag har även ett konfigurerbart samtidighetsskydd (distinkta aktiva gäst-IP i kort processfönster)
- Varje fråga sparar tidpunkt, aktör (
user_id eller gäst), IP, user-agent, status, svar/fel och svarsmetadata för audit/historik
- Frågeformuläret på
/feed är nu AJAX-först och visar svar/fel inline; vanlig form post/redirect finns kvar som fallback utan JavaScript
- Feed-Q&A har nu admin-konfigurerbart scope: tidsfönster (
daily/weekly/monthly/yearly), tillåtna kategorier, tillåtna sajter, context-cap för antal poster, max antal meningar i svaret och antal minihistorikrader på /feed
/feed visar nu också en liten inline-historik över de senaste färdiga frågorna direkt i frågekortet
/feed/user-questions har nu paginering med valbart antal rader per sida för att hantera spammig historik bättre
- Admin kan nu ta bort frågerader direkt från
/feed/user-questions via AJAX (vanlig redirect-fallback fungerar fortsatt utan JavaScript)
- Admininställningarna på
/feed/user-questions och i /feed-admin innehåller nu även val av svarsmodell och tonalitet för OpenAI-svar
- Adminvyn för historik har nu filter för
status, user_id (eller guest), ip och deleted-scope (active/deleted/all)
- Adminmoderering stöder nu både single-row och bulk-delete med explicit delete-mode:
hard delete tar bort raden permanent
soft delete sparar raden med raderingsmetadata (deleted_at, deleted_by_user_id, deleted_reason)
- Soft-deletade rader kan nu återställas via adminåtgärd (
POST /feed/user-questions/{question}/restore) för undo-flöde.
Entry-baserade kontroller för brusiga inlägg (/feed/entry/{contentId})
- För admin finns nu per-inläggskontroller på entry-sidan för länkar som cyklar/brusar:
- Markera/avmarkera cautious (auto-purge av brusiga dubbletter vid framtida import)
- Ignore this post at import (feed-scope eller globalt), så inkommande scraper-rapporter för länken släpps
- Purge noisy duplicates (behåller senaste representant per distinkt meaningful hash)
- Purge all except one latest row (hård reset)
Analytics-kort på /feed
- Vecko-/månads-/årskort visas per kategori endast när cachad analytics faktiskt finns
- Korten är färgkodade per period
- Klicka Read more för att expandera längre analyser
- Markdown renderas till HTML för bättre läsbarhet
Redaktörssida
- URL:
/rss
- Kräver
permission:rss
- Hantera feed-URL:er och metadata
- Se cachad kategori-analytics
Site Type stöder nu explicit xpath och json utöver rss och wp
- När
sitetype=xpath krävs elements-regler i JSON och valideras server-side innan sparning
elements accepterar båda stödda regel-formaten:
- objektformat (
begin + table) för JSON-traversering
- äldre pipeline-array-format för HTML/XPath-extraktion
- I listvyn på
/rss visas elements-redigering nu bara för xpath-rader och ligger i en kollapsbar panel med AJAX-sparning på blur
- Ny visuell hjälpsida:
/rss/xpath-lab låter redaktörer klistra in HTML-snippets, inspektera DOM-översikt, testa XPath-uttryck och granska en SimpleXML-liknande XML-preview innan regler sparas
Feed admin
- URL:
/feed-admin
- Generera daglig, veckovis, månadsvis eller årsvis kategori-analys
- Generera daglig, veckovis, månadsvis eller årsvis site-analys per feed/nyhetskälla
- Använd kalenderfältet Anchor date för att generera historiska perioder (t.ex. förra veckan/månaden/året/dagen om cron missat)
- Kategori- och site-kort har nu även valfria segmentspecifika Anchor date-fält; prioritet är
segment anchor -> global anchor -> dagens datum
- Nuvarande periodlogik är rullande fönster från valt ankardatum (
weekly = senaste 7 dagar, monthly = senaste 30 dagar), medan yearly fortsatt är year-to-date från ankarårets start
- Välj modell per körning
- Fyll i valfri
watch_for-text före generering
- Befintliga cachade varianter har nu åtgärder per variant för Retranslate och Regenerate (replace) (både för kategori och site)
- När Regenerate (replace) används skrivs vald variant/period över i stället för att skapa en extra dubblettvariant
- Site-generering har nu ett separat valfritt titelfält per site (skilt från den globala titeln)
- Feed-admin innehåller nu även en separat ruta för Feed Q&A scope and brevity settings där admin kan begränsa vilka kategorier/sajter som frågefunktionen på
/feed får använda
Scheduler-notering
- Analytics-schemat är nu admin-konfigurerbart i
/feed-admin med separata aktivera/inaktivera- och tidsfält per period för daily, weekly, monthly och yearly.
- Cron bör köra scheduler-kontrollen varje minut (antingen via Laravel
schedule:run eller direkt via php artisan rss:run-scheduled-analytics).
- Schedulern kör varje period en gång per relevant cykel efter konfigurerad servertid; missade körningar fångas upp så snart som möjligt.
- Om en period saknar tidigare scheduler-timestamp betraktas den som aldrig körd och körs direkt en gång.
- Automatiska scheduler-körningar använder en dedikerad auto-varianttitel (
[AUTO] Scheduled analytics) och kör alltid med overwrite-current-semantik så att automatiska varianter uppdateras på plats.
- Manuella CLI/API-körningar finns fortfarande kvar vid behov.
- Manuella CLI-körningar hoppar nu över oförändrade bucket+variant-signaturer som standard för att undvika onödiga upprepade AI-anrop.
- Använd
php artisan rss:generate-analytics --period=yearly --force (eller --overwrite-current) för att uttryckligen köra om och skriva över den aktuella bucketraden även när underliggande snapshot är oförändrat.
RSS Maintenance Admin
- URL:
/rss-maintenance-admin
- Listar misstänkta länkar med ovanligt många versioner på kort tid
- Jämför rå hash-churn mot meaningful hash-churn för att hitta brusiga pseudo-uppdateringar
- Stöd för dry-run och live-purge per länk, där senaste representant per meningsfull förändring behålls
Scraper-API (/api/rss/urls)
- Endpoint:
GET /api/rss/urls
- Obligatorisk query-parameter:
scraper=1 (annars avvisas anropet)
always=0 returnerar ett begränsat due-urval för anropande scraper-agent (agent_id, fallback agent_name):
- Due-kontroll använder varje URL:s
readinterval
- Due-kontroll körs mot agentens egen seen-state (senast sedd + nästa tillåtna tid)
- En scrapers senaste claims blockerar inte längre andra scraper-agenter
always=1 hoppar över intervallfiltrering och returnerar alla skrapbara URL:er (deleted=0, noscrape=0)
- Rekommendation: skicka alltid ett stabilt
agent_id (t.ex. hostname eller worker-id)
Prenumerationer
Inloggade användare kan prenumerera per:
Tillgängliga kanaler beror på kontoinställningar.
På /feed/subscriptions är kanalinställningarna nu AJAX-first med autosave:
- Av/på på kanal-checkboxar sparas direkt via AJAX
- Text-/webhookfält sparas på blur (när fältet lämnas)
- Pause/Resume och Remove uppdateras också inline via AJAX
- Det är nu tillåtet att avchecka alla kanaler explicit (alla leveranskanaler avstängda)
Om JavaScript saknas finns fortfarande fallback till vanlig server-post/redirect.
Discord-setup på /feed/subscriptions:
- Du kan antingen klistra in Discord-webhook manuellt eller använda Connect Discord app (get webhook).
- OAuth-flödet använder
webhook.incoming och går tillbaka via callback (/oauth/discord/callback).
- Callback-URL visas på sidan så admin vet vilken URL som ska registreras i Discord Developer Portal.
- Efter callback sparas senaste Discord-webhook-payload i session och kan återanvändas per prenumeration med ett klick.
Leveransbeteende:
- Nya RSS-importer försöker nu göra en omedelbar prenumerationsnotifiering direkt efter att
/api/rss/update har konverterat inbound-rader
- Prenumerationsutskick innehåller nu direktlänk till Tools-entry först (
/feed/entry/{contentId}), med originallänken som sekundär fallback
- Det schemalagda kommandot
rss:notify-subscribers körs fortfarande var femtonde minut som fallback/återförsök om en omedelbar leverans missas eller en kanal tillfälligt fallerar