Skip to content

API

使用Javascript API实现脚本化操作。

在软件的关于页面中可以下载API文件包,解压后包含程序示例main.mjs和相关API库文件。 所有接口均包含TS类型定义,方法名和参数名均有语义化命名,方便使用。

INFO

前端页面即使用此API进行数据交互,你甚至可以基于此接口开发自己的前端页面😊

WARNING

API文件包下载过程中即在main.mjs中包含了用户授权信息,因此请勿直接将API文件包分享给他人。

示例

抓取ArXiv上最新50条CV论文信息,并加入到数据库中。

前置代码

安装依赖

sh
npm install fast-xml-parser

工具函数

javascript
import { XMLParser } from 'fast-xml-parser';
export async function fetchArxivFeed(
    maxResults = 10,
    searchQuery = 'cat:cs.AI OR cat:cs.CV',
    sortBy = 'submittedDate',
    sortOrder = 'descending',
  ){
    const query = `search_query=${encodeURIComponent(searchQuery)}&sortBy=${sortBy}&sortOrder=${sortOrder}&max_results=${maxResults}`;
    const apiUrl = `https://export.arxiv.org/api/query?${query}`;
    const response = await fetch(apiUrl, { method: 'GET', });
    const xmlData = await response.text();
    const parser = new XMLParser();
    const parsedData = parser.parse(xmlData);
    let entries = parsedData.feed.entry;
    if (!Array.isArray(entries)) { entries = [entries]; }
    function getAuthors(entry){
      if (Array.isArray(entry.author)) { return entry.author.map((author) => author.name); }
      else if (entry.author) { return [entry.author.name]; }
      else return [];
    }
    if (entries && Array.isArray(entries)) {
      const articles = entries.map((entry) => {
        const id = entry.id.split('/').pop().split('v')[0];
        const link = entry.id;
        const title = entry.title;
        const abstract = entry.summary;
        const authors = getAuthors(entry);
        const updatedTime = entry.updated;
        const publishedTime = entry.published;
        const bibtex = `@article{${id},
        title = {${title}},
        author = {${authors.join(' and ')}},
        journal = {arXiv preprint arXiv:${id}},
        year = {${publishedTime.slice(0, 4)}},
        url = {${link}}
        }`;
        return { id, link, title, abstract, authors, updatedTime, publishedTime, bibtex};
      });
  
      return articles;
    } else { throw new Error('Invalid feed data'); }
}
javascript
// Lires-API v1.7.3 (Accessed: ...)
import { ServerConn } from "./lib/api.js";

const context = {
    endpoint: "https://...",
    key: "..."
}
// lires 服务器连接对象
const conn = new ServerConn(()=>context.endpoint, ()=>context.key)

// 抓取最新50条ArXiv上的文章
const articles = await fetchArxivFeed(50, 'cat:cs.CV');

for (const article of articles) {
    try{
        // 添加到数据库
        await conn.updateDatapoint(null, {
          bibtex: article.bibtex, 
          tags: ['arxiv-collect'], 
          url: article.link
        });
        console.log(`Article "${article.id}" added to the database.`);
    }
    catch(e){
        // 如果返回409则说明已存在
        console.error(`Error adding article "${article.id}" to the database: ${e}`);
    }
}