Skip to content

ynhhoJ/flibusta-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Flibusta API

Unofficial Flibusta API based on website search engine.


NPM

Flibsta API is available as a npm packages

Use yarn add flibusta or npm install flibusta

Examples

  1. Clone repository
  2. Use yarn install or npm install
  3. Use commands:
For simple search
yarn example-search-book-by-name [book name]
yarn example-search-authors [author name]
yarn example-search-book-by-series [series name]
For paginated search
yarn example-search-book-by-name-paginated [book name] [page number] [items limit count]
yarn example-search-authors-paginated [author name] [page number] [items limit count]
yarn example-search-book-by-series-paginated [series name] [page number] [items limit count]

API

getBooksByAuthorOpds(id)

  • id - The id of author
Example

getBooksByAuthorOpds(6116)

Response
Response
[
  {
    "author": [
      {
        "name": "Конан Π”ΠΎΠΉΠ»ΡŒ Артур",
        "uri": "/a/6116"
      }
    ],
    "title": "«Глория Π‘ΠΊΠΎΡ‚Ρ‚Β»",
    "updated": "2022-02-22T08:35:39+01:00",
    "categories": [
      "ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ²"
    ],
    "cover": "/i/0/214600/cover.jpg",
    "downloads": [
      {
        "link": "/b/214600/fb2",
        "type": "application/fb2+zip"
      },
      {
        "link": "/b/214600/html",
        "type": "application/html+zip"
      },
      {
        "link": "/b/214600/txt",
        "type": "application/txt+zip"
      },
      {
        "link": "/b/214600/rtf",
        "type": "application/rtf+zip"
      },
      {
        "link": "/b/214600/mobi",
        "type": "application/x-mobipocket-ebook"
      }
    ],
    "description": "<p class=book>ΠšΡƒΠ΄Π° исчСз Ρ„Π°Π²ΠΎΡ€ΠΈΡ‚ прСдстоящих скачСк ΠΆΠ΅Ρ€Π΅Π±Π΅Ρ† БСрСбряный ΠΈ ΠΊΡ‚ΠΎ ΡƒΠ±ΠΈΠ» Π΅Π³ΠΎ Ρ‚Ρ€Π΅Π½Π΅Ρ€Π°? ΠšΡ‚ΠΎ пытаСтся Ρ€Π°Π·Π»ΡƒΡ‡ΠΈΡ‚ΡŒ счастливых супругов ΠœΡƒΠ½Ρ€ΠΎ ΠΈ Ρ‡Ρ‚ΠΎ Π·Π° уТасноС Π»ΠΈΡ†ΠΎ появляСтся Π² ΠΎΠΊΠ½Π΅ сосСднСго Π΄ΠΎΠΌΠ°? Π’ ΠΊΠ°ΠΊΡƒΡŽ Π°Ρ„Π΅Ρ€Ρƒ оказался Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½ Π½Π΅Π·Π°Π΄Π°Ρ‡Π»ΠΈΠ²Ρ‹ΠΉ Π±ΠΈΡ€ΠΆΠ΅Π²ΠΎΠΉ ΠΌΠ°ΠΊΠ»Π΅Ρ€? И Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π»ΠΈ таинствСнныС гости ΠΈΠ· России Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ ΠΏΠ°Ρ†ΠΈΠ΅Π½Ρ‚Π° Π΄ΠΎΠΊΡ‚ΠΎΡ€Π° Π’Ρ€Π΅Π²Π΅Π»ΡŒΡΠ½Π°? На эти вопросы бСрСтся ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹ΠΉ Π¨Π΅Ρ€Π»ΠΎΠΊ Π₯олмс... </p>\n   <br/>ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄: Π›ΡŽΠ±ΠΈΠΌΠΎΠ²Π° Π“Π°Π»ΠΈΠ½Π°<br/>Π€ΠΎΡ€ΠΌΠ°Ρ‚: fb2<br/>Π―Π·Ρ‹ΠΊ: ru<br/>Π Π°Π·ΠΌΠ΅Ρ€: 62 Kb<br/>Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠΉ: 8387<br/>БСрия: Рассказы ΠΎ Π¨Π΅Ρ€Π»ΠΎΠΊΠ΅ Π₯олмсС β€” 2. Записки ΠΎ Π¨Π΅Ρ€Π»ΠΎΠΊΠ΅ Π₯олмсС #4<br/>"
  },
  ...
]

getBooksByAuthorOpdsPaginated(id)

  • id - The id of author
  • page? - Optional to get books by name for page. By default 0.
  • limit? - Optional. Limit rows count in items. By default 20.
Example

getBooksByAuthorOpdsPaginated(6116)

Response
Response
{
  "items": [
    {
      "author": [
        {
          "name": "Конан Π”ΠΎΠΉΠ»ΡŒ Артур",
          "uri": "/a/6116"
        }
      ],
      "title": "«Глория Π‘ΠΊΠΎΡ‚Ρ‚Β»",
      "updated": "2022-02-22T08:35:39+01:00",
      "categories": [
        "ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ²"
      ],
      "cover": "/i/0/214600/cover.jpg",
      "downloads": [
        {
          "link": "/b/214600/fb2",
          "type": "application/fb2+zip"
        },
        {
          "link": "/b/214600/html",
          "type": "application/html+zip"
        },
        {
          "link": "/b/214600/txt",
          "type": "application/txt+zip"
        },
        {
          "link": "/b/214600/rtf",
          "type": "application/rtf+zip"
        },
        {
          "link": "/b/214600/mobi",
          "type": "application/x-mobipocket-ebook"
        }
      ],
      "description": "<p class=book>ΠšΡƒΠ΄Π° исчСз Ρ„Π°Π²ΠΎΡ€ΠΈΡ‚ прСдстоящих скачСк ΠΆΠ΅Ρ€Π΅Π±Π΅Ρ† БСрСбряный ΠΈ ΠΊΡ‚ΠΎ ΡƒΠ±ΠΈΠ» Π΅Π³ΠΎ Ρ‚Ρ€Π΅Π½Π΅Ρ€Π°? ΠšΡ‚ΠΎ пытаСтся Ρ€Π°Π·Π»ΡƒΡ‡ΠΈΡ‚ΡŒ счастливых супругов ΠœΡƒΠ½Ρ€ΠΎ ΠΈ Ρ‡Ρ‚ΠΎ Π·Π° уТасноС Π»ΠΈΡ†ΠΎ появляСтся Π² ΠΎΠΊΠ½Π΅ сосСднСго Π΄ΠΎΠΌΠ°? Π’ ΠΊΠ°ΠΊΡƒΡŽ Π°Ρ„Π΅Ρ€Ρƒ оказался Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½ Π½Π΅Π·Π°Π΄Π°Ρ‡Π»ΠΈΠ²Ρ‹ΠΉ Π±ΠΈΡ€ΠΆΠ΅Π²ΠΎΠΉ ΠΌΠ°ΠΊΠ»Π΅Ρ€? И Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π»ΠΈ таинствСнныС гости ΠΈΠ· России Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ ΠΏΠ°Ρ†ΠΈΠ΅Π½Ρ‚Π° Π΄ΠΎΠΊΡ‚ΠΎΡ€Π° Π’Ρ€Π΅Π²Π΅Π»ΡŒΡΠ½Π°? На эти вопросы бСрСтся ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹ΠΉ Π¨Π΅Ρ€Π»ΠΎΠΊ Π₯олмс... </p>\n   <br/>ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄: Π›ΡŽΠ±ΠΈΠΌΠΎΠ²Π° Π“Π°Π»ΠΈΠ½Π°<br/>Π€ΠΎΡ€ΠΌΠ°Ρ‚: fb2<br/>Π―Π·Ρ‹ΠΊ: ru<br/>Π Π°Π·ΠΌΠ΅Ρ€: 62 Kb<br/>Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠΉ: 8387<br/>БСрия: Рассказы ΠΎ Π¨Π΅Ρ€Π»ΠΎΠΊΠ΅ Π₯олмсС β€” 2. Записки ΠΎ Π¨Π΅Ρ€Π»ΠΎΠΊΠ΅ Π₯олмсС #4<br/>"
    },
    ...
  ],
  "currentPage": 0,
  "hasNextPage": true,
  "hasPreviousPage": false
}

getBooksByName(name)

  • name - The name of searched books.
Example

getBooksByName('Π¨Π΅Ρ€Π»ΠΎΠΊ')

Response
Response
[
  {
    "book": {
      "id": 402475,
      "name": "Π¨Π΅Ρ€Π»ΠΎΠΊ Π₯олмс ΠΈ Π΄Π΅Π»ΠΎ ΠΎ папирусС (сборник) [= Π¨Π΅Ρ€Π»ΠΎΠΊ Π₯олмс ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π³Ρ€Π°Ρ„Π° Π”Ρ€Π°ΠΊΡƒΠ»Ρ‹ (сборник)]"
    },
    "authors": [
      {
        "id": 33441,
        "name": "Дэвид Π‘Ρ‚ΡŽΠ°Ρ€Ρ‚ Дэвис"
      }
    ]
  },
  ...
]

getBooksByNameFromOpds(name)

  • name - The name of searched books.
Example

getBooksByNameFromOpds('Π¨Π΅Ρ€Π»ΠΎΠΊ')

Response
Response
[
  {
    "author": [
      {
        "name": "Π’Π°Π»Ρ‹ΡˆΡ…Π°Π½ΠΎΠ² Адиль",
        "uri": "/a/31745"
      }
    ],
    "title": "`ΠŸΡƒΡ‚ΡŒ бСсхвостой ΠΏΡ‚ΠΈΡ‡ΠΊΠΈ` ΠΈΠ»ΠΈ Π˜Π΅Ρ€ΠΎΠ³Π»ΠΈΡ„ΠΈΠΊΠ° ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π¨Π΅Ρ€Π»ΠΎΠΊΠ° Π₯олмса",
    "updated": "2022-02-18T07:21:09+01:00",
    "categories": [
      "Π―Π·Ρ‹ΠΊΠΎΠ·Π½Π°Π½ΠΈΠ΅, иностранныС языки"
    ],
    "downloads": [
      {
        "link": "/b/112478/download",
        "type": "application/pdf+rar"
      }
    ],
    "description": "Π€ΠΎΡ€ΠΌΠ°Ρ‚: pdf<br/>Π―Π·Ρ‹ΠΊ: ru<br/>Π Π°Π·ΠΌΠ΅Ρ€: 564 Kb<br/>Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠΉ: 2632<br/>"
  },
  ...
]

getBooksByNameFromOpdsPaginated(name, page?, limit?)

  • name - The name of searched books.
  • page? - Optional to get books by name for page. By default 0.
  • limit? - Optional. Limit rows count in items. By default 20.
Example

getBooksByNameFromOpdsPaginated('Π¨Π΅Ρ€Π»ΠΎΠΊ', 0, 1)

Response
Response
{
  "items": [
    {
      "author": [
        {
          "name": "Π’Π°Π»Ρ‹ΡˆΡ…Π°Π½ΠΎΠ² Адиль",
          "uri": "/a/31745"
        }
      ],
      "title": "`ΠŸΡƒΡ‚ΡŒ бСсхвостой ΠΏΡ‚ΠΈΡ‡ΠΊΠΈ` ΠΈΠ»ΠΈ Π˜Π΅Ρ€ΠΎΠ³Π»ΠΈΡ„ΠΈΠΊΠ° ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π¨Π΅Ρ€Π»ΠΎΠΊΠ° Π₯олмса",
      "updated": "2022-02-18T18:01:50+01:00",
      "categories": [
        "Π―Π·Ρ‹ΠΊΠΎΠ·Π½Π°Π½ΠΈΠ΅, иностранныС языки"
      ],
      "downloads": [
        {
          "link": "/b/112478/download",
          "type": "application/pdf+rar"
        }
      ],
      "description": "Π€ΠΎΡ€ΠΌΠ°Ρ‚: pdf<br/>Π―Π·Ρ‹ΠΊ: ru<br/>Π Π°Π·ΠΌΠ΅Ρ€: 564 Kb<br/>Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠΉ: 2632<br/>"
    }
  ],
  "currentPage": 0,
  "totalCountItems": 228,
  "hasNextPage": true,
  "hasPreviousPage": false,
  "totalPages": 11
}

getBooksByNamePaginated(name, page?, limit?)

  • name - The name of searched books.
  • page? - Optional to get books by name for page. By default 0.
  • limit? - Optional. Limit rows count in items. By default 50.
Example

getBooksByNamePaginated('Π¨Π΅Ρ€Π»ΠΎΠΊ', 0, 1)

Response
Response
{
  "items": [
    {
      "book": {
        "id": 402475,
        "name": "Π¨Π΅Ρ€Π»ΠΎΠΊ Π₯олмс ΠΈ Π΄Π΅Π»ΠΎ ΠΎ папирусС (сборник) [= Π¨Π΅Ρ€Π»ΠΎΠΊ Π₯олмс ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π³Ρ€Π°Ρ„Π° Π”Ρ€Π°ΠΊΡƒΠ»Ρ‹ (сборник)]"
      },
      "authors": [
        {
          "id": 33441,
          "name": "Дэвид Π‘Ρ‚ΡŽΠ°Ρ€Ρ‚ Дэвис"
        }
      ]
    }
  ],
  "currentPage": 0,
  "totalCountItems": 228,
  "totalPages": 5,
  "hasNextPage": true,
  "hasPreviousPage": false
}

getBooksBySeries(name, page?, limit?)

  • name - The name of searched books series.
Example

getBooksBySeries('Π¨Π΅Ρ€Π»ΠΎΠΊ')

Response
Response
[
  {
    "id": 242,
    "name": "Π¨Π΅Ρ€Π»ΠΎΠΊ Π₯олмс с ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡΠΌΠΈ",
    "books": 11
  },
  {
    "id": 30097,
    "name": "Π¨Π΅Ρ€Π»ΠΎΠΊ Π₯олмс. Π˜Π³Ρ€Π° продолТаСтся",
    "books": 61
  },
  {
    "id": 4154,
    "name": "Π¨Π΅Ρ€Π»ΠΎΠΊ Π₯олмс. НовыС ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ",
    "books": 8
  },
  ...
]

getBooksBySeriesPaginated(name, page?, limit?)

  • name - The name of searched books series.
  • page? - Optional to get books by name for page. By default 0.
  • limit? - Optional. Limit rows count in items. By default 50.
Example

getBooksBySeriesPaginated('Π¨Π΅Ρ€Π»ΠΎΠΊ', 0, 1)

Response
Response
{
  "items": [
    {
      "id": 242,
      "name": "Π¨Π΅Ρ€Π»ΠΎΠΊ Π₯олмс с ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡΠΌΠΈ",
      "books": 11
    }
  ],
  "currentPage": 0,
  "totalCountItems": 39,
  "totalPages": 1,
  "hasNextPage": false,
  "hasPreviousPage": false
}

getAuthors(name)

  • name - The name of searched author.
Example

getAuthors('ΠΊΠΎΠ½Π°Π½')

Response
Response
[
  {
    "id": 6116,
    "name": "Артур Конан Π”ΠΎΠΉΠ»ΡŒ",
    "books": 584,
    "translations": -1
  },
  {
    "id": 17933,
    "name": "Адриан Конан Π”ΠΎΠΉΠ»",
    "books": 37,
    "translations": -1
  },
  {
    "id": 147059,
    "name": "АндрСас Конанос (Π°Ρ€Ρ…ΠΈΠΌΠ°Π½Π΄Ρ€ΠΈΡ‚)",
    "books": 19,
    "translations": -1
  },
  {
    "id": 6118,
    "name": "Бьюзан ΠšΠΎΠ½Π°Π½Ρ‚",
    "books": 4,
    "translations": -1
  },
  {
    "id": 58754,
    "name": "АлСксандр ΠšΠΎΠ½Π°Π½Ρ‹Ρ…ΠΈΠ½",
    "books": -1,
    "translations": 1
  }
]

getAuthorsPaginated(name, page?, limit?)

  • name - The name of searched author.
  • page? - Optional to get books by name for page. By default 0.
  • limit? - Optional. Limit rows count in items. By default 50.
Example

getAuthorsPaginated('ΠΊΠΎΠ½Π°Π½', 0, 1)

Response
Response
{
  "items": [
    {
      "id": 6116,
      "name": "Артур Конан Π”ΠΎΠΉΠ»ΡŒ",
      "books": 584,
      "translations": -1
    }
  ],
  "currentPage": 0,
  "totalCountItems": 5,
  "totalPages": 1,
  "hasNextPage": false,
  "hasPreviousPage": false
}

getCoverByBookId(id)

  • id - The book id
Example

getCoverByBookId(226302)

Response
Response
File blob

getGenres(name)

  • name - The name of searched genre.
Example

getGenres('Ρ€ΠΎΠΌΠ°Π½')

Response
Response
[
  {
    "id": "det_irony",
    "name": "Π˜Ρ€ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ², дамский Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€ΠΎΠΌΠ°Π½"
  },
  {
    "id": "love_contemporary",
    "name": "Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π»ΡŽΠ±ΠΎΠ²Π½Ρ‹Π΅ Ρ€ΠΎΠΌΠ°Π½Ρ‹"
  },
  {
    "id": "love_history",
    "name": "Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Π»ΡŽΠ±ΠΎΠ²Π½Ρ‹Π΅ Ρ€ΠΎΠΌΠ°Π½Ρ‹"
  },
  {
    "id": "love_detective",
    "name": "ΠžΡΡ‚Ρ€ΠΎΡΡŽΠΆΠ΅Ρ‚Π½Ρ‹Π΅ Π»ΡŽΠ±ΠΎΠ²Π½Ρ‹Π΅ Ρ€ΠΎΠΌΠ°Π½Ρ‹"
  },
  {
    "id": "love_short",
    "name": "ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Π»ΡŽΠ±ΠΎΠ²Π½Ρ‹Π΅ Ρ€ΠΎΠΌΠ°Π½Ρ‹"
  },
  {
    "id": "love",
    "name": "Π›ΡŽΠ±ΠΎΠ²Π½Ρ‹Π΅ Ρ€ΠΎΠΌΠ°Π½Ρ‹"
  },
  {
    "id": "love_sf",
    "name": "Π›ΡŽΠ±ΠΎΠ²Π½ΠΎΠ΅ фэнтСзи, любовно-фантастичСскиС Ρ€ΠΎΠΌΠ°Π½Ρ‹ "
  },
  {
    "id": "tale_chivalry",
    "name": "Рыцарский Ρ€ΠΎΠΌΠ°Π½"
  },
  {
    "id": "adv_story",
    "name": "ΠΠ²Π°Π½Ρ‚ΡŽΡ€Π½Ρ‹ΠΉ Ρ€ΠΎΠΌΠ°Π½"
  },
  {
    "id": "gothic_novel",
    "name": "ГотичСский Ρ€ΠΎΠΌΠ°Π½"
  },
  {
    "id": "great_story",
    "name": "Π ΠΎΠΌΠ°Π½, ΠΏΠΎΠ²Π΅ΡΡ‚ΡŒ"
  },
  {
    "id": "astrology",
    "name": "Астрология ΠΈ хиромантия"
  }
]

getGenresPaginated(name, page?, limit?)

  • name - The name of searched genre.
  • page? - Optional to get books by name for page. By default 0.
  • limit? - Optional. Limit rows count in items. By default 50.
Example

getGenresPaginated('Ρ€ΠΎΠΌΠ°Π½', 0, 2)

Response
Response
{
  "items": [
    {
      "id": "det_irony",
      "name": "Π˜Ρ€ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ², дамский Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€ΠΎΠΌΠ°Π½"
    },
    {
      "id": "love_contemporary",
      "name": "Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π»ΡŽΠ±ΠΎΠ²Π½Ρ‹Π΅ Ρ€ΠΎΠΌΠ°Π½Ρ‹"
    }
  ],
  "currentPage": 0,
  "totalCountItems": 12,
  "totalPages": 1,
  "hasNextPage": false,
  "hasPreviousPage": false
}

Onion Support

Thanks antis11 for an example

Example
import { SocksProxyAgent } from 'socks-proxy-agent';

import FlibustaAPI from 'flibusta';

(async () => {
  // eslint-disable-next-line unicorn/no-unreadable-array-destructuring
  const [/* original value */, /* path to the file */, authorName] = process.argv;

  const flibustaApi = new FlibustaAPI('http://flibustaongezhld6dibs2dps6vm4nvqg2kp7vgowbu76tzopgnhazqd.onion', {
    httpAgent: new SocksProxyAgent('socks5h://127.0.0.1:9050'),
  });

  const searchAuthorsResult = await flibustaApi.getAuthors(authorName);
  
  console.log(JSON.stringify(searchAuthorsResult, undefined, 2));
})();