Skip to content

JavaScript SDK

OmniBox JavaScript SDK 提供了丰富的 API,帮助您快速开发爬虫脚本。

引入 SDK

javascript
const OmniBox = require("omnibox_sdk");

SDK 通过 NODE_PATH 环境变量自动解析,无需手动指定路径。

API 参考

HTTP 请求

OmniBox.request(url, options)

发送 HTTP 请求。

参数:

  • url (string): 请求 URL
  • options (object, 可选): 请求选项
    • method (string): HTTP 方法,默认为 "GET"
    • headers (object): 请求头
    • body (string|object): 请求体

返回: Promise<Response>

示例:

javascript
// GET 请求
const response = await OmniBox.request("https://api.example.com/data", {
  method: "GET",
  headers: {
    "User-Agent": "Mozilla/5.0",
  },
});

// POST 请求
const response = await OmniBox.request("https://api.example.com/submit", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ key: "value" }),
});

// 解析响应
const data = JSON.parse(response.body);

日志记录

OmniBox.log(level, message)

记录日志。

参数:

  • level (string): 日志级别,可选值:"info", "warn", "error"
  • message (string): 日志消息

返回: Promise<void>

示例:

javascript
await OmniBox.log("info", "脚本执行开始");
await OmniBox.log("warn", "警告信息");
await OmniBox.log("error", "错误信息: " + error.message);

环境变量

OmniBox.getEnv(name)

获取环境变量值。

参数:

  • name (string): 环境变量名称

返回: Promise<string>

示例:

javascript
// 方式1:通过 SDK 获取(异步)
const apiKey = await OmniBox.getEnv("API_KEY");

// 方式2:直接访问(推荐,性能更好)
const apiKey = process.env.API_KEY;

网盘相关 API

OmniBox.getDriveFavoriteTags(driveType)

获取网盘收藏标签。

参数:

  • driveType (string, 可选): 网盘类型,为空则获取全部

返回: Promise<string[]>

示例:

javascript
const tags = await OmniBox.getDriveFavoriteTags("quark");

OmniBox.getDriveCategoryData(categoryType, driveType, page, pageSize)

获取网盘分类数据。

参数:

  • categoryType (string): 分类类型(history/favorite/tag
  • driveType (string, 可选): 网盘类型
  • page (number): 页码
  • pageSize (number): 每页大小

返回: Promise<Object>

示例:

javascript
const data = await OmniBox.getDriveCategoryData("favorite", "quark", 1, 20);
// 返回: { list: [], total: 0, pageCount: 0 }

OmniBox.getDriveFileList(shareURL, pdirFid)

获取网盘文件列表。

参数:

  • shareURL (string): 分享链接
  • pdirFid (string, 可选): 父目录ID,默认为 "0"(根目录)

返回: Promise<Object>

示例:

javascript
const fileList = await OmniBox.getDriveFileList("https://...", "0");
// 返回: { files: [], total: 0, has_more: false }

OmniBox.getDriveVideoPlayInfo(shareURL, fid, flag)

获取视频播放信息。

参数:

  • shareURL (string): 分享链接
  • fid (string): 文件ID
  • flag (string, 可选): 播放方式(服务端代理、本地代理、直连)

返回: Promise<Object>

示例:

javascript
const playInfo = await OmniBox.getDriveVideoPlayInfo("https://...", "file_id");
// 返回: { url: "", header: {}, danmaku: [] }

OmniBox.getDriveShareInfo(shareURL)

获取网盘分享信息。

参数:

  • shareURL (string): 分享链接

返回: Promise<Object>

示例:

javascript
const shareInfo = await OmniBox.getDriveShareInfo("https://...");

OmniBox.processScraping(resourceId, keyword, resourceName, videoFiles)

处理刮削(通用方法)。

参数:

  • resourceId (string): 资源唯一标识
  • keyword (string, 可选): 搜索关键词
  • resourceName (string, 可选): 资源名称
  • videoFiles (array): 视频文件列表

返回: Promise<Object>

示例:

javascript
const result = await OmniBox.processScraping(
  "resource_id",
  "关键词",
  "资源名称",
  []
);

OmniBox.processDriveScraping(shareURL, keyword, resourceName, videoFiles, shareInfo)

处理网盘刮削(向后兼容的别名)。在网盘场景下,shareURL 就是 resourceId

参数:

  • shareURL (string): 分享链接(网盘场景下,shareURL 就是 resourceId)
  • keyword (string, 可选): 搜索关键词
  • resourceName (string, 可选): 资源名称
  • videoFiles (array): 视频文件列表
  • shareInfo (object, 可选): 分享信息(已废弃,不再使用)

返回: Promise<Object>

示例:

javascript
const result = await OmniBox.processDriveScraping(
  "https://...",
  "关键词",
  "资源名称",
  [],
  {}
);

OmniBox.getScrapeMetadata(resourceId)

获取刮削元数据(通用方法)。

参数:

  • resourceId (string): 资源唯一标识

返回: Promise<Object>

示例:

javascript
const metadata = await OmniBox.getScrapeMetadata("resource_id");
// 返回: { scrapeData: null, videoMappings: null }

OmniBox.getDriveMetadata(shareURL)

获取网盘元数据(向后兼容的别名)。在网盘场景下,shareURL 就是 resourceId

参数:

  • shareURL (string): 分享链接(网盘场景下,shareURL 就是 resourceId)

返回: Promise<Object>

示例:

javascript
const metadata = await OmniBox.getDriveMetadata("https://...");
// 返回: { scrapeData: null, videoMappings: null }

OmniBox.getDriveInfoByShareURL(shareURL)

根据分享链接获取网盘显示名称和图标。

参数:

  • shareURL (string): 网盘分享链接

返回: Promise<Object>

示例:

javascript
const info = await OmniBox.getDriveInfoByShareURL("https://...");
// 返回: { driveType: "uc", displayName: "UC网盘", iconPath: "", iconUrl: "" }

弹幕相关 API

OmniBox.getDanmakuByFileName(fileName)

根据文件名匹配弹幕。

参数:

  • fileName (string): 文件名(用于弹幕匹配)

返回: Promise<Array<{name: string, url: string}>>

示例:

javascript
const danmaku = await OmniBox.getDanmakuByFileName("video.mp4");
// 返回: [{ name: "弹幕源1", url: "https://..." }]

完整示例

javascript
const OmniBox = require("omnibox_sdk");

async function home(params) {
  try {
    await OmniBox.log("info", "开始获取首页数据");
    
    // 获取环境变量
    const apiKey = process.env.API_KEY;
    
    // 发送 HTTP 请求
    const response = await OmniBox.request("https://api.example.com/home", {
      method: "GET",
      headers: {
        "Authorization": `Bearer ${apiKey}`,
        "User-Agent": "Mozilla/5.0",
      },
    });
    
    // 解析响应
    const data = JSON.parse(response.body);
    
    // 处理数据
    const classes = data.categories.map(cat => ({
      type_id: cat.id,
      type_name: cat.name,
    }));
    
    const list = data.videos.map(video => ({
      vod_id: video.id,
      vod_name: video.title,
      vod_pic: video.poster,
      type_id: video.categoryId,
      type_name: video.categoryName,
      vod_remarks: video.quality,
      vod_year: video.year,
    }));
    
    await OmniBox.log("info", `成功获取 ${list.length} 个视频`);
    
    return {
      class: classes,
      list: list,
    };
  } catch (error) {
    await OmniBox.log("error", `获取首页数据失败: ${error.message}`);
    return {
      class: [],
      list: [],
    };
  }
}

注意事项

  1. 异步函数:所有 SDK 方法都是异步的,需要使用 await.then()
  2. 错误处理:建议使用 try-catch 捕获错误
  3. 日志记录:使用 OmniBox.log() 记录重要信息,便于调试
  4. 环境变量:优先使用 process.env 直接访问,性能更好
  5. HTTP 请求:响应体需要手动解析 JSON

下一步

基于 MIT 许可发布