curl --request POST \
--url https://sajuapi.dev/v1/fortunes/daily-stream \
--header 'X-API-Key: <api-key>'Server-Sent Events를 통한 실시간 운세 스트리밍
curl --request POST \
--url https://sajuapi.dev/v1/fortunes/daily-stream \
--header 'X-API-Key: <api-key>'/v1/fortunes/daily 엔드포인트와 동일한 파라미터를 사용합니다.
event: start
data: {"type": "start", "requestId": "req_abc123", "model": "haiku"}
event: partial
data: {"type": "partial", "data": {"todayFortune": {"actionItems": [...]}}}
event: partial
data: {"type": "partial", "data": {"investmentFortune": {...}}}
event: complete
data: {"type": "complete", "data": {...}, "meta": {...}}
data: [DONE]
function useDailyFortuneStream(birthDate: string) {
const [fortune, setFortune] = useState(null);
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
const eventSource = new EventSource(
`/v1/fortunes/daily-stream?birthDate=${birthDate}`,
{ headers: { 'X-API-Key': API_KEY } }
);
eventSource.addEventListener('partial', (e) => {
const partial = JSON.parse(e.data);
setFortune(prev => ({ ...prev, ...partial.data }));
});
eventSource.addEventListener('complete', (e) => {
const complete = JSON.parse(e.data);
setFortune(complete.data);
setIsLoading(false);
eventSource.close();
});
return () => eventSource.close();
}, [birthDate]);
return { fortune, isLoading };
}
complete 이벤트로 즉시 응답합니다:
event: complete
data: {"type": "complete", "data": {...}, "meta": {"cached": true, "costPerCall": 0}}
data: [DONE]