# iqdb-client [![jsdelivr](https://data.jsdelivr.com/v1/package/npm/iqdb-client/badge)](https://www.jsdelivr.com/package/npm/iqdb-client) [![npm](https://img.shields.io/npm/dm/iqdb-client?color=red&label=npm%20download)](https://www.npmjs.com/package/iqdb-client) ![vulnerabilities](https://img.shields.io/snyk/vulnerabilities/npm/iqdb-client) [![workflow](https://img.shields.io/github/actions/workflow/status/KotoriK/iqdb-client/test.yml?branch=master)](https://github.com/KotoriK/iqdb-client/actions/workflows/test.yml)[![dependents](https://badgen.net/npm/dependents/iqdb-client)](https://www.npmjs.com/package/iqdb-client?activeTab=dependents) iqdb.org api client for Node.js. [English](./README.md) | 中文文档 - [亮点](#%E4%BA%AE%E7%82%B9) - [破坏性更改](#%E7%A0%B4%E5%9D%8F%E6%80%A7%E6%9B%B4%E6%94%B9) - [安装](#%E5%AE%89%E8%A3%85) - [用法](#%E7%94%A8%E6%B3%95) - [参数](#%E5%8F%82%E6%95%B0) - [iqdb2d (lib='www')时可用的值:](#iqdb2d-libwww%E6%97%B6%E5%8F%AF%E7%94%A8%E7%9A%84%E5%80%BC) - [3diqdb (lib='3d')时可用的值:](#3diqdb-lib3d%E6%97%B6%E5%8F%AF%E7%94%A8%E7%9A%84%E5%80%BC) - [返回值](#%E8%BF%94%E5%9B%9E%E5%80%BC) - [进阶用法](#%E8%BF%9B%E9%98%B6%E7%94%A8%E6%B3%95) - [支持](#%E6%94%AF%E6%8C%81) - [许可协议](#%E8%AE%B8%E5%8F%AF%E5%8D%8F%E8%AE%AE) ## 亮点 * 自带类型定义 * 支持“忽略颜色”(ignore color)选项. * 支持对单一库的搜索. * 同时支持iqdb2d与iqdb3d. * 支持上传文件搜索(通过Buffer或Stream)和根据图片地址搜索 * 基于Fetch ## 破坏性更改 自```3.0.0```,由于请求客户端更换到了原生```fetch```,最低Node版本要求提升至```v18```。 自```2.0.0```,对```similarity```一词的误拼已被修复,你若修改了```IQDBClientConfig```中对应的字段,那你可能需要做出更改。如果你使用的是默认的```IQDBClientConfig```,那这一更改对你不会有什么影响。 ```IQDBSearchResultItem```中```similarity```字段的类型由```number | string```变为```number | null```,意味着解析失败时不再返回文本。 ## 安装 ```bash npm install iqdb-client # 或者使用yarn yarn add iqdb-client ``` ## 用法 ```ts const searchPic = require('iqdb-client') const result = (await searchPic('https://pixiv.cat/84035784-3.jpg', { lib: 'www' })) /** 也支持ES风格的导入*/ //更多示例请查看./src/api.test.ts if(result.ok){ console.log(result.data) } ``` ### 参数 ```ts searchPic(pic: string | Buffer | Readable, { lib, forcegray, libs,fileName }: IQDB_SEARCH_OPTIONS_ALL) ``` * **lib**: *string, 必须提供* 想要使用多库搜索时,提供'www'(for iqdb2d)或'3d'(for 3diqdb), 使用在[h.ts](./src/h.ts)```IQDB_SEARCH_LIBRARY_2D```中定义的其他值时将执行单库搜索。 * **forcegray**: *boolean* 是否忽略颜色 * **fileName**: *string* 表示表单中的‘filename’应为何值。仅在根据文件查找时有效。若没有提供,会自动生成一个随机文件名代替。 * **service**: *Array<number>* 执行多库搜索时,决定在哪些库上搜索 #### iqdb2d (lib='www')时可用的值: ```ts export enum IQDBLibs_2D { danbooru = 1, konachan = 2, 'yande.re' = 3, gelbooru = 4, 'sankaku channel' = 5, 'e-shuushuu' = 6, zerochan = 11, 'anime-picture' = 13 } ``` #### 3diqdb (lib='3d')时可用的值: ```ts export enum IQDBLibs_3D { '3dbooru' = 7, 'idol' = 9 } ``` ### 返回值 当成功完成请求, 函数会返回一个包含```{ok:boolean}```的对象, 如[返回结果示例](#%E8%BF%94%E5%9B%9E%E7%BB%93%E6%9E%9C%E7%A4%BA%E4%BE%8B)所展示的那样。如果相似度检查通过,```ok```字段会被设为```true```。 若在执行中碰到错误, 函数会返回如下一个对象: ```ts { ok:false, /*错误信息*/ err:'HTTP 400' } ``` 由于缺乏实例,错误处理还不是特别完善。欢迎就你碰到的问题提出issue。 **返回结果示例** ```json { "ok": true, "data": [{ "head": "Your image", "img": "/thu/thu_114514.jpg", "name": "84035784_p2.jpg", "similarity": null, "size": { "width": 1703, "height": 2459 }, "type": null }, { "head": "Best match", "sourceUrl": "//danbooru.donmai.us/posts/4076714", "similarity": 0.96, "img": "/danbooru/1/f/8/1f8ff3c560a0689e795938138dac7b1f.jpg", "size": { "width": 1703, "height": 2459 }, "type": "Safe", "source": ["Danbooru", "Gelbooru"] }, { "head": "Additional match", "sourceUrl": "https://yande.re/post/show/678391", "similarity": 0.92, "img": "/moe.imouto/8/0/1/801df5f665e61e6f87eb85431f2ca2a1.jpg", "size": { "width": 1703, "height": 2459 }, "type": "Safe",//是否nsfw, 可能是'Safe' | 'Ero' | 'Explicit'中的一个值 "source": ["yande.re"] }], "service": [1, 2, 3, 4, 5, 6, 11, 13] //在本次搜索中用到了的库 } ``` ## 进阶用法 ```ts interface IQDBClientConfig { baseDomain: string, similarityPass: number userAgent: string, fetchOptions?: RequestInit } const { makeSearchFunc } = require('iqdb-client') const searchPic = await makeSearchFunc({ baseDomain: `127.0.0.1`, similarityPass: 0.6, userAgent: 'testa', }) ``` 使用```makeSearchFunc()```来自定义代理使用,相似度判定等选项。```makeSearchFunc()```会返回一个新的```searchPic()``` 默认导出的```searchPic()```使用```defaultConfig```: ```ts export const defaultConfig: IQDBClientConfig = { baseDomain: 'iqdb.org', similarityPass: 0.6, userAgent: 'node', } ``` ## 支持 * 支持[iqdb.org](https://www.iqdb.org/) * 遇到问题时,提交issue或PR ## 许可协议 本仓库的代码在```MIT```许可下授权。 更多信息请查看 [LICENSE](./LICENSE)。