OrangeTV/src/app/api/shortdrama/parse/all/route.ts

68 lines
2.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { NextRequest, NextResponse } from 'next/server';
import { API_CONFIG } from '@/lib/config';
export async function GET(request: NextRequest) {
try {
const { searchParams } = new URL(request.url);
const id = searchParams.get('id');
if (!id) {
return NextResponse.json(
{ error: 'id parameter is required' },
{ status: 400 }
);
}
const apiUrl = new URL(`${API_CONFIG.shortdrama.baseUrl}/vod/parse/all`);
apiUrl.searchParams.append('id', id);
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 60000); // 60秒超时为获取全集地址提供充足时间
const response = await fetch(apiUrl.toString(), {
method: 'GET',
headers: API_CONFIG.shortdrama.headers,
signal: controller.signal,
});
clearTimeout(timeoutId);
if (!response.ok) {
throw new Error(`API request failed: ${response.status}`);
}
const data = await response.json();
// 直接返回API响应数据播放页面会处理数据结构转换
return NextResponse.json(data);
} catch (error) {
console.error('Short drama all parse API error:', error);
// 返回模拟的短剧数据作为备用
const { searchParams: errorSearchParams } = new URL(request.url);
const errorId = errorSearchParams.get('id');
const mockData = {
videoId: parseInt(errorId || '1') || 1,
videoName: '短剧播放示例',
results: Array.from({ length: 10 }, (_, index) => ({
index: index,
label: `${index + 1}`,
parsedUrl: `https://example.com/video${index + 1}.mp4`,
parseInfo: {
headers: {},
type: 'mp4'
},
status: 'success',
reason: null
})),
totalEpisodes: 10,
successfulCount: 10,
failedCount: 0,
cover: 'https://via.placeholder.com/300x400',
description: '这是一个示例短剧,用于测试播放功能。'
};
return NextResponse.json(mockData);
}
}