Contributing • Documentation • Report Issues
TL;DR use arbitrary query to consume imageboard API, each websites could using direct wildcards with asterisk symbols like ?tags=<SomeQuery>*
. The whole booru api does not have wildcard endpoint, that mean You cannot using arbitrary query to interact with. This library bringing the wildcard usage on JS/TS environment.
A query completion Booru imageboards module that uses wildcard for It's query resolver.
💻 What browser looks like |
🚀 This library also |
The completion works like a Search, It's uses wildcard but Pure scraping, and does not hit the API just works like a plugins will immediately resolve the arbitrary query. It's can be used in any JS Third-party libraries.
- Support 11 different boorus (check base.ts)
- Pure scraping, does not hit the API endpoint
- Documented and tested
- Easy to use, check your intelisense
Some tests result with the imageboards
npm install eiyuu
/ yarn add eiyuu
NOTE: NodeJS 14.x or higher |
Use the arbitrary query for jeanne_d'arc_(fate)
import { Eiyuu } from "eiyuu";
const search = new Eiyuu();
search.danbooru("janne").then(res => {
console.log(res); // Get the res[0] for the best match
});
commonjs: const { Eiyuu } = require('eiyuu');
You can passing optional useragent and follow redirects options.
constructor(useragent?: string, followRedirects?: boolean)
const search = new Eiyuu('eiyuu/version (eiyuu.js.org);', false);
Example combine eiyuu with JS Booru package @AtoraSuunva/booru
const Booru = require('booru');
const { Eiyuu } = require('eiyuu');
const resolve = new Eiyuu();
async function Danbooru() {
const query = await resolve.danbooru("jeanne"); // arbitrary request
const dan = Booru.forSite('danbooru');
dan.search(query[0], { limit: 10 }).then(posts => {
console.log(posts);
})
}
Danbooru();
Example use this module with direct request to the api
const axios = require("axios");
const { Eiyuu } = require('eiyuu');
const resolve = new Eiyuu();
async function Danbooru() {
const query = await resolve.danbooru("jeanne"); // arbitrary request
const res = await axios.get(`https://danbooru.donmai.us/posts.json?limit=10&tags=${query[0]}`);
console.log(res.data);
}
Danbooru();
Instead hanging when no results are found, You can tells the proper queries with parseString()
const axios = require("axios"); // or any http client
const { Eiyuu, parseString } = require('eiyuu'); // import the wildcard
const resolve = new Eiyuu(); // default constructor
const q = "jeanne"; // assuming this is the query
async function Danbooru() {
const res = await axios.get(`https://danbooru.donmai.us/posts.json?limit=10&tags=${q}`);
// throw when error and tells the proper queries
if (!res.data || res.data.length === 0) return resolve.danbooru(q).then(r => {
console.log("No results found. Did you mean:", parseString(r));
})
// return when found
console.log(res.data);
}
Danbooru();
The query resolved returned as array
[
"jeanne_d'arc_alter_(fate)",
"jeanne_d'arc_(fate)",
"jeanne_d'arc_alter_(avenger)_(fate)",
"jeanne_d'arc_(ruler)_(fate)",
"jeanne_d'arc_alter_(swimsuit_berserker)_(fate)",
"jeanne_d'arc_alter_santa_lily_(fate)",
"jeanne_d'arc_(swimsuit_archer)_(fate)"
] // and so on..
Check workflows and the whole build script on package.json
The documentation can be found https://sinkaroid.github.io/eiyuu
TBA
Depends on your request, Some sites has CF or captcha enabled. Rule34 for example, If they marked your IP for being spam Eiyuu's scraper will not work. Make sure your stuff run on good environments.
ja_JP
• /ei-yū/ Eiyuu / eiyū / 英雄 — hero; heroine; leads to the spirit hero probably; (?)
This tool can be freely copied, modified, altered, distributed without any attribution whatsoever. However, if you feel like this tool deserves an attribution, mention it. It won't hurt anybody.
Licence: WTF.