├── .gitattributes ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── package.json ├── src ├── endpoints.json ├── errors │ └── Error.js ├── index.js └── methods │ ├── download.js │ └── request.js └── tests └── index.js /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /package-lock.json 2 | /node_modules -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | #.npmignore 2 | 3 | package-lock.json 4 | node_modules -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | PERMISSION IS GRANTED FOR COPYING, MODIFYING, OR SHARING THIS CODE. 2 | 3 | YOU MAY NOT PUBLISH A COPIED VERSION OF THIS CODE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Anime-Images-API Javascript Wrapper 2 | 3 | ### About: 4 | This ia a Javascript Wrapper For [Anime-Images-Api](https://anime-api.hisoka17.repl.co/) 5 | 6 | About The API: 7 | 8 | Anime-Images API is a powerful Rest API built with Node.JS 9 | 10 | > 1000+ Images 11 | 12 | > 10+ Endpoints. With more being Added 13 | 14 | > Lightning fast responses 15 | 16 | 17 | ### Basic Usage: 18 | ```js 19 | const Anime_Images = require('anime-images-api') 20 | const API = new Anime_Images() 21 | async function getIMG(){ 22 | let { image } = await API.sfw.hug() 23 | console.log(image) 24 | } 25 | getIMG() 26 | //Or get an NSFW Image: 27 | getNSFWImg() 28 | async function getNSFWImg(){ 29 | let { image } = await API.nsfw.hentai() 30 | console.log(image) 31 | } 32 | ``` 33 | Output: 34 | ``` 35 | https://anime-api.hisoka17.repl.co/images/hug80.gif 36 | ``` 37 | ### Endpoint Methods: 38 | `API.sfw`: 39 | 40 | | Endpoint | Description | 41 | |----------|---------------------| 42 | | hug() | Sends a hug Gif | 43 | | kiss() | Sends a kiss Gif | 44 | | slap() | Sends a slap Gif | 45 | | punch() | Sends a punch Gif | 46 | | wink() | Sends a winking Gif | 47 | | pat() | Sends a pat Gif | 48 | | kill() | Sends a kill Gif | 49 | | cuddle() | Sends a cuddle Gif | 50 | 51 | 52 | 53 | 54 | ### Download the image: 55 | ```js 56 | const Anime_Images = require('anime-images-api') 57 | const API = new Anime_Images() 58 | 59 | (async () => { 60 | let image = await API.sfw.hug(); 61 | image.download('images', 'hugging') //Path, Filename 62 | .then(() => console.log('Finished Downloading')) 63 | })() 64 | ``` 65 | ### Discord Bot example: 66 | ```js 67 | const Discord = require('discord.js'); 68 | const client = new Discord.Client() 69 | const API = require('anime-images-api') 70 | const images_api = new API() 71 | 72 | client.on('message', function(m){ 73 | if (m.content.startsWith('image')){ 74 | images_api.sfw.hug().then(response => { 75 | m.channel.send(response.image) 76 | }) 77 | } 78 | }) 79 | ``` 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "anime-images-api", 3 | "version": "2.0.0", 4 | "description": "A javascript wrapper for Anime-Images-API", 5 | "main": "src/index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "api", 11 | "anime", 12 | "images", 13 | "nsfw", 14 | "nekos", 15 | "lewd" 16 | ], 17 | "author": "Hisoka", 18 | "license": "ISC", 19 | "dependencies": { 20 | "node-superfetch": "^0.1.11" 21 | }, 22 | "homepage": "https://anime-api.hisoka17.repl.co", 23 | "repository": {"url": "https://github.com/ItsHisoka17/Anime-Images-API-Wrapper"} 24 | } 25 | -------------------------------------------------------------------------------- /src/endpoints.json: -------------------------------------------------------------------------------- 1 | { 2 | "sfw": { 3 | "hug": "/img/hug", 4 | "kiss": "/img/kiss", 5 | "slap": "/img/slap", 6 | "wink": "/img/wink", 7 | "pat": "/img/pat", 8 | "kill": "/img/kill", 9 | "cuddle": "/img/cuddle", 10 | "punch": "/img/punch", 11 | "waifu": "/img/waifu" 12 | }, 13 | "nsfw": { 14 | "hentai": "/img/nsfw/hentai", 15 | "boobs": "/img/nsfw/boobs", 16 | "lesbian": "/img/nsfw/lesbian" 17 | } 18 | } -------------------------------------------------------------------------------- /src/errors/Error.js: -------------------------------------------------------------------------------- 1 | 2 | class ImageApiError extends Error { 3 | constructor(message) { 4 | super(message); 5 | this.message = message; 6 | } 7 | } 8 | ImageApiError.prototype.name = 'ImageApiError' 9 | module.exports = ImageApiError; -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const __request = require('./methods/request') 2 | const download = require('./methods/download') 3 | const endpoints = require('./endpoints.json') 4 | class GetImages { 5 | 6 | constructor(){ 7 | let type = this; 8 | type.download = download; 9 | type.sfw = {}; 10 | type.nsfw = {}; 11 | for (const endpoint of Object.keys(endpoints.sfw)){ 12 | type.sfw[endpoint] = async function(){ 13 | let res = await __request(endpoints.sfw[endpoint]) 14 | return res; 15 | } 16 | }; 17 | for (const endpoint of Object.keys(endpoints.nsfw)){ 18 | type.nsfw[endpoint] = async () => { 19 | let res = await __request(endpoints.nsfw[endpoint]) 20 | return res; 21 | } 22 | } 23 | } 24 | 25 | listEndpoints(){ 26 | let allEndpoints = {}; 27 | for (const type of [endpoints.sfw, endpoints.nsfw]){ 28 | Object.assign(allEndpoints, type) 29 | } 30 | 31 | return Object.keys(allEndpoints).map(e => '- ' + e.split('')[0].toUpperCase()+e.split('').slice(1).join('')).join('\n\n') 32 | } 33 | } 34 | module.exports = GetImages; -------------------------------------------------------------------------------- /src/methods/download.js: -------------------------------------------------------------------------------- 1 | const https = require('https'); 2 | const fs = require('fs') 3 | 4 | module.exports = function download(url, path, filename){ 5 | https.get(url, function(res){ 6 | let file = fs.createWriteStream(`${path}/${filename}`) 7 | return res.pipe(file); 8 | }) 9 | } -------------------------------------------------------------------------------- /src/methods/request.js: -------------------------------------------------------------------------------- 1 | const request = require('node-superfetch') 2 | const downloadFile = require('./download') 3 | const ImageAPIError = require('../errors/Error') 4 | 5 | module.exports = async function __request(path){ 6 | return new Promise(async (resolve, reject) => { 7 | let baseURL = 'https://anime-api.hisoka17.repl.co/' 8 | let res = await request.get(`${baseURL}${path}`) 9 | if (!res.ok || res.status !== 200) reject(new ImageAPIError(`Error ${res.status}: ${res.statusText}`)) 10 | let body = { 11 | image: res.body.url, 12 | url: res.url, 13 | response: res.body, 14 | /** 15 | * 16 | * @param {string} path 17 | * @param {string} name 18 | * @returns {Promise} 19 | */ 20 | download: async (path, name) => { 21 | downloadFile(res.body.url, path, `${name.replace(/^\.(png|gif|jpg|jpeg)$/, '')}.${res.body.url.split('.').pop()}`) 22 | } 23 | } 24 | return resolve(body) 25 | }) 26 | } 27 | -------------------------------------------------------------------------------- /tests/index.js: -------------------------------------------------------------------------------- 1 | const API = require('../src/index'); 2 | 3 | let getimage = new API(); 4 | 5 | async function getImage(){ 6 | console.log((await getimage.sfw.hug()).image) 7 | } 8 | getImage(); --------------------------------------------------------------------------------