1.0.3 • Published 1 year ago

@floatsheep/nial-package v1.0.3

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

Anime-EveryWhere-NIAL

Being about it

本项目是 Anime Everywhere 的 NIAL(Network Interface Abstraction Layer)

值得一提,受限于本人技术水平,本项目中部分代码使用 AI 编写

Usefulness

方便的通过 YAML 对一些网站进行爬取和数据返回

Usage

pnpm install @floatsheep/nial-package

在你的代码中添加

import NIAL from "@floatsheep/nial-package";

const nial = new NIAL();

const yamlConfig = `
projects:
  - subproject: 樱花动漫
    type: HTML-Get
    url: http://www.iyinghua.io/search/0/
    linkElement: div.lpic > ul > li > a
    titleElement: div.lpic > ul > li > h2 > a
    elementArgs: true
    elementAttr: title
`;

nial.push(yamlConfig);

nial.get().then((result) => console.log(result)).catch((error) => console.error(error));

Configuration resolver

在当前的 NIAL 版本中,基本配置如下:

projects:
  - subproject:
    type:
    url:
    linkElement:
    titleElement:
    elementArgs:
    elementAttr:

subproject 代表一个配置,多个 subproject 可以支持多个配置

type 代表类型,目前的版本中提供 HTML-GetAPI-Get

url 代表要抓取的地址,注意! NIAL 不会拼接地址,因此你必须手动拼接后传递给 NIAL

linkElementtitleElementtype 设置为 HTML-Get 后的特有选项,遵循 cheerio 的选择器。linkElement 用于定位超链接,titleElement 用于定位标题

elementArgstype 设置为 HTML-Get 后的特有选项,用于更好的定位标题,类型为 Boolean。设置为 true 后将会根据 elementAttr 的设置来抓取标题,设置为 false 后就会直接读取标题选择器的文本

elementAttrtype 设置为 HTML-Get 后的特有选项,用于更好的定位标题,对于如下的 HTML 具有更好的抓取能力

<a class="text-green" href="/iNewsId/7302.html" title="一念永恒第3季"
  >一念永恒第3季</a
>

在这种情况下,只需要设置 elementAttrtitle,就会抓取 a 标签的 title 属性

同理,标题的 Attr 不为 title 时,也可以按需更改

Node.js 环境下配置一样

Demonstration

projects:
  - subproject: 樱花动漫 1
    type: HTML-Get
    url: http://www.iyinghua.io/search/工作细胞/
    linkElement: div.lpic > ul > li > a
    titleElement: div.lpic > ul > li > h2 > a
    elementArgs: true
    elementAttr: title
  - subproject: 叮咚动漫 2
    type: HTML-Get
    url: https://dingdongdm.fun/search/一念永恒/
    linkElement: div.ff-row > div > ul > li > h3 > a
    titleElement: div.ff-row > div > ul > li > h3 > a
    elementArgs: true
    elementAttr: title

正确返回

{
  "version": "1",
  "integrity": "full",
  "status": 200,
  "data": [
    {
      "title": "工作细胞!!最强之敌再临,体内肠道大骚动!",
      "link": "/show/5293.html",
      "provider": "樱花动漫"
    },
    {
      "title": "工作细胞black",
      "link": "/show/5016.html",
      "provider": "樱花动漫"
    },
    {
      "title": "工作细胞 第二季",
      "link": "/show/4930.html",
      "provider": "樱花动漫"
    },
    { "title": "工作细胞", "link": "/show/4227.html", "provider": "樱花动漫" },
    {
      "title": "一念永恒第3季",
      "link": "/iNewsId/7302.html",
      "provider": "叮咚动漫"
    },
    {
      "title": "一念永恒",
      "link": "/iNewsId/4242.html",
      "provider": "叮咚动漫"
    }
  ]
}

错误返回

{ "version": "1", "integrity": "mistake", "status": 0, "data": [] }

需要注意的是,NIAL 只有当 yaml 中的所有配置均无法抓取时才会返回 status: 0,因此,你不能够根据 status 判断

Exporter

在正常情况下,输出应该如下:

{
  "version": "1",
  "integrity": "full",
  "status": 200,
  "data": [
    ...
  ]
}

如果给定的 yaml 配置中有部分抓取失败,输出如下:

{
  "version": "1",
  "integrity": "part",
  "status": 200,
  "data": [
    ...
  ]
}

如果给定的 yaml 配置全部抓取失败,输出如下:

{
  "version": "1",
  "integrity": "mistake",
  "status": 0,
  "data": []
}

你可以通过获取 integrity 的值来判断 yaml 的抓取情况

Precautions

在网页 / Electron 等中,需要修改内容安全策略或构建 HTTP-Proxy-Server 来处理潜在的问题

对于 Electron 来说,另一个方法是使用 IPC 通信,让 Anime-EveryWhere-NIAL 的请求在 Node.js 中处理

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago