인터뷰 홍보영상

 제품·서비스에 관한 열정과 진정성을 나타낼 수 있어요.


import React, { useState } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { Clock } from 'lucide-react'; const YouTubeScheduler = () => { // 내일 날짜를 기본값으로 설정 const getTomorrowDateTime = () => { const tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); tomorrow.setHours(9, 0, 0, 0); // 다음날 오전 9시로 설정 return tomorrow.toISOString().slice(0, 16); // YYYY-MM-DDTHH:mm 형식으로 변환 }; const [url, setUrl] = useState(''); const [scheduledTime, setScheduledTime] = useState(getTomorrowDateTime()); const [videoId, setVideoId] = useState(''); const [message, setMessage] = useState(''); const [isScheduled, setIsScheduled] = useState(false); // YouTube URL에서 video ID 추출 const extractVideoId = (url) => { const regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/; const match = url.match(regExp); return (match && match[7].length === 11) ? match[7] : null; }; // 스케줄 설정 const scheduleVideo = () => { const extractedId = extractVideoId(url); if (!extractedId) { setMessage('올바른 YouTube URL을 입력해주세요.'); return; } if (!scheduledTime) { setMessage('재생 시간을 설정해주세요.'); return; } const scheduledTimestamp = new Date(scheduledTime).getTime(); const now = new Date().getTime(); if (scheduledTimestamp <= now) { setMessage('미래 시간을 선택해주세요.'); return; } setVideoId(extractedId); setIsScheduled(true); const formattedTime = new Date(scheduledTime).toLocaleString('ko-KR', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit' }); setMessage(`${formattedTime}에 재생이 예약되었습니다.`); // 예약된 시간에 실행될 타이머 설정 const timeUntilPlay = scheduledTimestamp - now; setTimeout(() => { setMessage('영상이 재생됩니다!'); // 실제 재생 로직은 여기에 구현 }, timeUntilPlay); }; return ( YouTube 예약 재생
setUrl(e.target.value)} className="w-full" />
setScheduledTime(e.target.value)} className="w-full" />
{message && ( {message} )} {videoId && (