Kozmicni dogodki: generiraj posamicno (6 klicev) + boljse parsanje
Array klic je padel (Failed to parse) ker gpt-5-mini ni vrnil cistega JSON
arraya. Zdaj 6 locenih klicev z {...} objektom (isti vzorec kot horoskop),
markdown fence stripping in vecji token limit.
This commit is contained in:
parent
365da96f5b
commit
0a2f477654
@ -145,49 +145,53 @@ export async function generateCosmicEvents(): Promise<void> {
|
|||||||
const d = new Date();
|
const d = new Date();
|
||||||
const monthName = d.toLocaleDateString("de-DE", { month: "long", year: "numeric" });
|
const monthName = d.toLocaleDateString("de-DE", { month: "long", year: "numeric" });
|
||||||
|
|
||||||
try {
|
const eventSlots = [
|
||||||
const response = await openai.chat.completions.create({
|
"die aktuelle Tierkreis-Saison (Sonne im aktuellen Sternzeichen), type=season, icon=sun",
|
||||||
model: "gpt-5-mini",
|
"die aktuelle Mondphase (Vollmond oder Neumond, je nachdem was näher ist), type=moon, icon=moon oder newmoon",
|
||||||
messages: [
|
"ein aktueller Venus-Transit (Venus im aktuellen Zeichen), type=transit, icon=venus",
|
||||||
{
|
"ein aktueller Mars- oder Merkur-Aspekt (inkl. eventueller Retrograde), type=transit oder retrograde, icon=mars oder mercury",
|
||||||
role: "system",
|
"ein aktueller Saturn-Transit, type=transit, icon=saturn",
|
||||||
content: `Du bist ein erfahrener Astrologe, der die aktuellen kosmischen Ereignisse (Planetenkonstellationen, Mondphasen, Retrograden, Tierkreis-Saison) für eine deutschsprachige Volksmusik- und Schlager-Website beschreibt. Du kennst die realen astronomischen Daten. Heute ist der ${today} (${monthName}). Beschreibe ausschließlich Ereignisse, die JETZT, rund um dieses Datum tatsächlich aktiv oder relevant sind. Verwende realistische, dem aktuellen Datum entsprechende Datumsangaben. Schreibe warm und zugänglich auf Deutsch.`,
|
"ein aktueller Jupiter-Transit, type=transit, icon=jupiter",
|
||||||
},
|
];
|
||||||
{
|
|
||||||
role: "user",
|
|
||||||
content: `Erstelle die 6 wichtigsten aktuellen kosmischen Ereignisse für heute (${today}). Dazu sollten gehören: die aktuelle Tierkreis-Saison (Sonne im Zeichen), die aktuelle Mondphase, eventuelle Retrograden, sowie relevante Planetentransite (Venus, Mars, Saturn, Jupiter).
|
|
||||||
|
|
||||||
Antworte NUR mit einem JSON-Array von genau 6 Objekten (kein Markdown, keine Erklärung) in diesem exakten Format:
|
const results: any[] = [];
|
||||||
[
|
|
||||||
{
|
|
||||||
"title": "Kurzer Titel, z.B. 'Vollmond im Skorpion' oder 'Zwillinge-Saison'",
|
|
||||||
"description": "3-4 Sätze über die Bedeutung dieses Ereignisses und seinen Einfluss.",
|
|
||||||
"dateRange": "Realistische Datumsangabe passend zum heutigen Datum, z.B. '21. Mai – 20. Juni 2026' oder '11. Juni 2026'",
|
|
||||||
"icon": "EINER VON: mercury, venus, moon, newmoon, sun, saturn, jupiter, mars",
|
|
||||||
"type": "EINER VON: retrograde, moon, transit, season",
|
|
||||||
"affectedSigns": ["3-4 betroffene Sternzeichen auf Deutsch, z.B. Widder, Stier, Zwillinge, Krebs, Löwe, Jungfrau, Waage, Skorpion, Schütze, Steinbock, Wassermann, Fische"]
|
|
||||||
}
|
|
||||||
]`,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
max_completion_tokens: 2500,
|
|
||||||
});
|
|
||||||
|
|
||||||
const content = response.choices[0]?.message?.content || "";
|
for (let i = 0; i < eventSlots.length; i++) {
|
||||||
const jsonMatch = content.match(/\[[\s\S]*\]/);
|
try {
|
||||||
if (!jsonMatch) {
|
const response = await openai.chat.completions.create({
|
||||||
console.error("Failed to parse cosmic events");
|
model: "gpt-5-mini",
|
||||||
return;
|
messages: [
|
||||||
}
|
{
|
||||||
|
role: "system",
|
||||||
|
content: `Du bist ein erfahrener Astrologe für eine deutschsprachige Volksmusik- und Schlager-Website. Du kennst die realen astronomischen Daten. Heute ist der ${today} (${monthName}). Beschreibe nur Ereignisse, die rund um dieses Datum tatsächlich aktiv sind, mit realistischen Datumsangaben. Antworte ausschließlich auf Deutsch.`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
role: "user",
|
||||||
|
content: `Beschreibe folgendes aktuelles kosmisches Ereignis für heute (${today}): ${eventSlots[i]}.
|
||||||
|
|
||||||
const parsed = JSON.parse(jsonMatch[0]);
|
Antworte NUR mit einem JSON-Objekt (kein Markdown, keine Erklärung) in diesem exakten Format:
|
||||||
if (!Array.isArray(parsed) || parsed.length === 0) {
|
{
|
||||||
console.error("Cosmic events response is not a valid array");
|
"title": "Kurzer Titel, z.B. 'Vollmond im Skorpion' oder 'Zwillinge-Saison'",
|
||||||
return;
|
"description": "3-4 Sätze über die Bedeutung dieses Ereignisses und seinen Einfluss.",
|
||||||
}
|
"dateRange": "Realistische Datumsangabe passend zum heutigen Datum, z.B. '21. Mai – 20. Juni 2026' oder '11. Juni 2026'",
|
||||||
|
"icon": "EINER VON: mercury, venus, moon, newmoon, sun, saturn, jupiter, mars",
|
||||||
|
"type": "EINER VON: retrograde, moon, transit, season",
|
||||||
|
"affectedSigns": ["3-4 betroffene Sternzeichen auf Deutsch"]
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
max_completion_tokens: 3000,
|
||||||
|
});
|
||||||
|
|
||||||
for (let i = 0; i < parsed.length; i++) {
|
let content = response.choices[0]?.message?.content || "";
|
||||||
const ev = parsed[i];
|
content = content.replace(/```json/gi, "").replace(/```/g, "").trim();
|
||||||
|
const jsonMatch = content.match(/\{[\s\S]*\}/);
|
||||||
|
if (!jsonMatch) {
|
||||||
|
console.error(`Failed to parse cosmic event ${i}. Raw:`, content.slice(0, 300));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ev = JSON.parse(jsonMatch[0]);
|
||||||
const icon = VALID_ICONS.includes(ev.icon) ? ev.icon : "moon";
|
const icon = VALID_ICONS.includes(ev.icon) ? ev.icon : "moon";
|
||||||
const type = VALID_TYPES.includes(ev.type) ? ev.type : "transit";
|
const type = VALID_TYPES.includes(ev.type) ? ev.type : "transit";
|
||||||
const signs = Array.isArray(ev.affectedSigns) ? ev.affectedSigns : [];
|
const signs = Array.isArray(ev.affectedSigns) ? ev.affectedSigns : [];
|
||||||
@ -202,10 +206,11 @@ Antworte NUR mit einem JSON-Array von genau 6 Objekten (kein Markdown, keine Erk
|
|||||||
type,
|
type,
|
||||||
affectedSigns: JSON.stringify(signs),
|
affectedSigns: JSON.stringify(signs),
|
||||||
});
|
});
|
||||||
|
results.push(ev.title);
|
||||||
|
} catch (err: any) {
|
||||||
|
console.error(`Error generating cosmic event ${i}:`, err.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`Generated ${parsed.length} cosmic events for ${today}.`);
|
|
||||||
} catch (err: any) {
|
|
||||||
console.error("Error generating cosmic events:", err.message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(`Generated ${results.length} cosmic events for ${today}.`);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user