fix: 修复真实 VOD API 联调问题并移除不支持的筛选条件
CI / lint-and-build (push) Has been cancelled

- SearchMedia 响应字段在 item.Video 嵌套对象中,修正字段映射

- endpoint 自动补充 https:// 协议前缀

- 移除状态筛选与日期范围筛选(VOD SearchMedia Match 语法不支持)
This commit is contained in:
2026-06-29 18:05:17 +06:00
parent 6cb319a215
commit 0e78aa641b
3 changed files with 25 additions and 51 deletions
+25 -29
View File
@@ -5,11 +5,8 @@ import { decrypt } from '../utils/crypto';
export interface SearchParams {
keyword?: string;
cateId?: number;
status?: string;
pageNo?: number;
pageSize?: number;
startTime?: string;
endTime?: string;
sortBy?: string;
sortOrder?: 'Asc' | 'Desc';
}
@@ -22,7 +19,10 @@ export interface SearchResult {
}
export function createVodClient(account: Account): RPCClient {
const endpoint = account.endpoint || `vod.${account.region}.aliyuncs.com`;
let endpoint = account.endpoint || `vod.${account.region}.aliyuncs.com`;
if (!endpoint.startsWith('http://') && !endpoint.startsWith('https://')) {
endpoint = `https://${endpoint}`;
}
return new RPCClient({
accessKeyId: account.accessKeyId,
accessKeySecret: decrypt(account.accessKeySecret),
@@ -35,6 +35,10 @@ export async function searchMedia(client: RPCClient, params: SearchParams): Prom
const requestParams: Record<string, unknown> = {
PageNo: params.pageNo || 1,
PageSize: Math.min(params.pageSize || 20, 100),
SearchType: 'video',
Fields: 'Title,CoverURL,CreationTime,Status,Duration,Size,CateId,CateName,Tags',
SortBy: params.sortBy || 'CreationTime',
SortOrder: params.sortOrder || 'Desc',
};
const searchParams: string[] = [];
@@ -44,20 +48,9 @@ export async function searchMedia(client: RPCClient, params: SearchParams): Prom
if (params.cateId) {
searchParams.push(`CateId=${params.cateId}`);
}
if (params.status) {
searchParams.push(`Status='${params.status}'`);
}
if (params.startTime && params.endTime) {
searchParams.push(`CreationTime>${params.startTime}`);
searchParams.push(`CreationTime<${params.endTime}`);
}
if (searchParams.length > 0) {
requestParams.SearchType = 'video';
requestParams.Fields = 'Title,CoverURL,CreationTime,Status,Duration,Size,CateId,CateName,Tags';
requestParams.Match = searchParams.join(' and ');
requestParams.SortBy = params.sortBy || 'CreationTime';
requestParams.SortOrder = params.sortOrder || 'Desc';
}
const action = 'SearchMedia';
@@ -67,20 +60,23 @@ export async function searchMedia(client: RPCClient, params: SearchParams): Prom
>;
const mediaListRaw = (response.MediaList as Record<string, unknown>[]) || [];
const mediaList = mediaListRaw.map((item) => ({
videoId: (item.VideoId || item.MediaId) as string,
title: item.Title as string,
description: item.Description as string,
duration: item.Duration as number,
size: item.Size as number,
coverURL: item.CoverURL as string,
status: item.Status as string,
cateId: item.CateId as number,
cateName: item.CateName as string,
tags: item.Tags as string,
creationTime: item.CreationTime as string,
modificationTime: item.ModificationTime as string,
}));
const mediaList = mediaListRaw.map((item) => {
const video = (item.Video as Record<string, unknown>) || {};
return {
videoId: (video.VideoId || item.MediaId) as string,
title: video.Title as string,
description: video.Description as string,
duration: video.Duration as number,
size: video.Size as number,
coverURL: video.CoverURL as string,
status: video.Status as string,
cateId: video.CateId as number,
cateName: video.CateName as string,
tags: video.Tags as string,
creationTime: (video.CreationTime || item.CreationTime) as string,
modificationTime: video.ModificationTime as string,
};
});
return {
total: (response.Total as number) || 0,