JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 25
  • Score
    100M100P100Q47620F
  • License MIT

JavaScript bindings for Derpibooru API

Package Exports

  • dinky.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (dinky.js) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

dinky.js

JavaScript bindings for Derpibooru API

Build Status Code Coverage dependencies Status devDependencies Status

Installation

You can install this package from npm:

npm install dinky.js

Or with yarn:

yarn add dinky.js

Native ESM support

Dinky expose .mjs entry point, so you can use ESM natively in Node.js context using the --experimental-modules flag.

Usage

Dinky implements chainable API to build each request and all requests will return a Promise that resolves data taken from Derpibooru API.

  1. The minimal example that will return an image by known ID:
import dinky from "dinky.js"

// The following request will return the 1th uploaded image from Derpibooru.
// Equivalent to https://derpibooru.org/images/0.json request
dinky().images().id(0).then(console.log)
  1. Search for images by their tags using the .search() method:
import dinky from "dinky.js"

// You can specify tags right in the .search() method
// By default all requests will be sent to derpibooru.org, but you can
// manually set one of Derpibooru's host in constructor options if you need.
// The following example is equivalent of these requests:
// https://trixiebooru.org/search.json?q=artist:rainbow,safe&random_image=true
// ...and then this one:
// https://trixiebooru.org/images/<received image id>.json
dinky({url: "trixiebooru.org"}).search(["artist:rainbow", "safe"]).random()
  .then(console.log)
  1. Since .search() method returns Search instance you can store it into variable for the further usage:
import dinky from "dinky.js"

(async function() {
  const search = dinky()
    .search(["scootaloo", "princess luna", "safe", "sleepless in ponyville"])
    .minScore(200)

  // Will search for random image with parameters from above
  await search.random()

  // ...and once more
  await search.random()
}()).catch(console.error)
  1. Walking through the search results:
import dinky from "dinky.js"

(async function() {
  const search = dinky().search(["twilight sparkle"]).minScore(200)

  // Search class is thenable, so you don't have to call `.exec()` method
  // in async functions context.
  // This request will return search results from the first page
  await search

  await search.page(2)

  // Same thing for Images class:
  const images = dinky().images()

  await images.page(2)
}()).catch(console.error)
  1. You can set a filter to use for requests:
import dinky from "dinky.js"

dinky({filter: 37430}).search(["dinky", "derpy hooves"]).then(console.log)

// You can also set per-request filter from .exec() method
dinky({filter: 37430}).search(["dinky", "derpy hooves"]).exec({filter: 100073})
  .then(console.log)
  1. Search for "my:faves" images using a key taken from account page:
import dinky from "dinky.js"

dinky({key: "<your key here>"}).search(["trixie", "safe"]).faves()
  .then(console.log)

API

class Dinky

constructor([options]) -> {Dinky}

Creates a new instance of the Derpibooru API client

  • {object} [options = {}] – client options
  • {string} [options.url = "derpibooru.org"] - Derpibooru API hostname (you can set trixiebooru.org or derpibooru.org)
  • {string} [options.key = undefined] – your personal API key taken from your account settings
  • {number} [options.filter = undefined] – ID of a filter. The ID can be found on filters page

Instance methods

images() -> {Images}

Creates a request handler for /images.json

Creates a request handler for /search.json. This method takes a list of tags

  • {string | string[]} [tags = []] – a tag or a list of tags and returns Search instance

class Images > Request

constructor() -> {Images}

Creates a request handler for /images.json

Instance methods

id(id) -> {Promise<object>}

Returns an image with given ID

class Search > Request

Creates a request handler for /search.json.

Instance methods

Appends a tag or a list of tags to the current search request

  • {string | string[]} [list = []] – a tag or a list of tags you want to append
faves() -> {Seatch}

Sets my:faves param to the search request.

Note that this method reques user's key.

Sets my:watched param to the search request.

Note that this method reques user's key.

Sets my:upvotes param to the search request.

Note that this method reques user's key.

Specifies how many images per page should API return

  • {number} value – an amount of images you want to take. The value must be in range of 1 and 50.

Sets the minimal score of requested images.

  • {number} value – a value of minimal socre

Sets the maximal score of requested images

  • {number} value – a value of maximal socre
random() -> {Promise<object>}

If been called, the API will return random image

class Request

constructor() -> {Request}

Creates a new request handler.

Instance methods

ascending() -> {Request}

Sets images ordering to ascending

descending() -> {Request}

Sets images ordering to descending

page(offset) -> {Request}

Sets the page offset

  • {number} [offset = 1] – The page offset.
exec([options]) -> {Promise<object>}

Executes current request.

  • {object} options – a set of options to use in request. They are have priority over the constructor options.
  • {string} [options.key = undefined] – your personal API key taken from your account settings
  • {number} [options.filter = undefined] – ID of a filter. The ID can be found on filters page
then(onFulfilled, onRejected) -> {Promise<object>}

This method takes up to two arguments: callback functions for the success and failure cases of the Promise. See Promise#then() documentation for more info.

catch(onRejected) -> {Promise<any>}

This method returns a Promise and deals with rejected cases only. See Promise#catch() documentation for more info.

class NetworkError > Error

constructor() -> {NetworkError}

This class can be used to check if network error was thrown.

Instance properties

response -> {Response}

Returns a Response object.

url -> {string}

Contains the URL of the response.

status -> {number}

Contains the status code of the response (e.g., 200 for a success).

statusText -> {string}

Contains the status message corresponding to the status code (e.g., OK for 200).

Another API bindings: