Rohe Feed-Antworten ablegen und Parser erweitern
Der Abruf warf bisher fast alles weg, was im XML stand. Neu ausgewertet werden Kategorien (<category>, dc:subject, Atom-term), content:encoded zusaetzlich zur kurzen description, Medien-URLs aus enclosure und Media RSS, Verweise aus dem Teaser-HTML und die Position im Feed beim ersten Sehen. Die Kategorien sind fuer Stufe 2 der wertvollste Posten: vom Verlag selbst vergebene Themenlabel, brauchbar als Vorfilter und als Prompt-Kontext. Gemessen an zwoelf Quellen tragen 189 von 814 Items Kategorien, 315 einen laengeren Volltext, 430 Medien. Ausserdem landen die rohen Antwortbytes gezippt in feed_abrufe, dedupliziert ueber ihren sha256. Der Parser wird sich weiter aendern; nur mit den Rohbytes laesst sich eine Verbesserung rueckwirkend auf die Historie anwenden - dieselbe Ueberlegung wie bei der Trennung von raw_items und codings. Kompression rund 22 %, etwa 20 kB je Abruf. Items ohne Titel werden weiter uebersprungen, jetzt aber gezaehlt. Bestandszeilen bekommen die neuen Felder beim naechsten Lauf nachgetragen, ohne als Revision zu zaehlen; der Inhalts-Hash bleibt dafuer auf Titel/Teaser/URL beschraenkt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ZAdZb3EifGb9nvQ5Zp2TE
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
-- Migration 002: Rohe Feed-Antworten ablegen, Parser-Felder ergaenzen
|
||||
--
|
||||
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f migrations/002-rohablage-und-felder.sql
|
||||
--
|
||||
-- Setzt 001 voraus. Bestandszeilen bekommen die neuen Spalten leer; sie
|
||||
-- fuellen sich, sobald die Quelle das Item das naechste Mal ausliefert.
|
||||
-- Der Inhalts-Hash bleibt bewusst auf Titel/Teaser/URL beschraenkt, sonst
|
||||
-- gaelte beim ersten Lauf nach dem Update jedes Bestandsitem als revidiert.
|
||||
|
||||
begin;
|
||||
|
||||
alter table raw_items
|
||||
add column if not exists position integer,
|
||||
add column if not exists volltext text,
|
||||
add column if not exists kategorien text[],
|
||||
add column if not exists medien jsonb,
|
||||
add column if not exists links text[],
|
||||
add column if not exists aktualisiert timestamptz;
|
||||
|
||||
comment on column raw_items.kategorien is
|
||||
'Vom Verlag selbst vergebene Themenlabel - Vorfilter und Prompt-Kontext';
|
||||
comment on column raw_items.position is
|
||||
'Rang im Feed beim ersten Sehen. Spaeter nicht fortgeschrieben';
|
||||
|
||||
create table if not exists feed_abrufe (
|
||||
id bigserial primary key,
|
||||
quelle text not null references quellen(id),
|
||||
slot timestamptz not null,
|
||||
abgerufen_am timestamptz not null default now(),
|
||||
http_status integer,
|
||||
header jsonb,
|
||||
koerper_hash text not null,
|
||||
koerper bytea not null,
|
||||
bytes_roh integer,
|
||||
bytes_gz integer,
|
||||
|
||||
unique (quelle, koerper_hash)
|
||||
);
|
||||
|
||||
create index if not exists feed_abrufe_quelle_idx
|
||||
on feed_abrufe (quelle, abgerufen_am desc);
|
||||
|
||||
alter table poll_laeufe
|
||||
add column if not exists items_uebersprungen integer not null default 0,
|
||||
add column if not exists bytes_roh integer;
|
||||
|
||||
commit;
|
||||
Reference in New Issue
Block a user