import axios from "axios"; import { getRandomOffset } from "@/utils/others/quillutils"; interface Author { authorId: string; name: string; } interface Paper { paperId: string; title: string; abstract: string; year: number; authors: Author[]; venue: string; url: string; } async function getSemanticPapers( query: string, year: string, offset = -1, limit = 2 ) { try { const maxOffset = 20 - limit; // 假设总记录数为 20 if (offset === -1) offset = getRandomOffset(maxOffset); const url = `https://proxy.paperai.life/proxy/https://api.semanticscholar.org/graph/v1/paper/search`; const response = await axios.get(url, { headers: { "x-api-key": process.env.NEXT_PUBLIC_SEMANTIC_API_KEY, }, params: { query: query, offset: offset, limit: limit, year: year, fields: "title,year,authors.name,abstract,venue,url,journal,externalIds", }, }); // 提取并处理论文数据 const papers = response.data.data.map((paper: Paper) => { // 提取每篇论文的作者名字 const authorNames = paper.authors.map((author) => author.name); return { ...paper, authors: authorNames, // 替换原有的authors字段为仅包含名字的数组 }; }); return papers; } catch (error: any) { // console.error("Error fetching data from Semantic Scholar API:", error); throw new Error( `Error fetching data from Semantic Scholar API:${JSON.stringify( error.response, null, 2 )}` ); // return null; } } // 调用函数示例 // fetchSemanticPapers("covid", 50, 2, "2015-2023").then((data) => { // console.log(data); // }); export default getSemanticPapers;