└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # MangaLibAPI 2 | > Мини документация для MangaLib API 3 | ## Мангалибы выпустили новый апи для нового фронта сайта! 4 | 5 | ## Вступление 6 | Приветствую, эта документация была создана ввиду отсутствия какой либо информации для разработчиков о внутренней части ресурса MangaLib. Приятного прочтения! 7 | ### Donate 8 | Вы также можете отблагодарить меня по реквизитам ниже. 9 | 10 | `TON: EQCPOg3vwwh79Hzk-9kaPMEvAERmXNCLQCGXhb921SMhlES-` 11 | 12 | `BTC: bc1qvp97952xdkmph94zyhp6yulvwpjwyesz365nq9` 13 | 14 | ## Использование 15 | *Запросы вы можете отправлять только по http2, иначе их заблокирует cloudflare.* 16 | 17 | Поддержка http2 имеется: 18 | + у библиотеки [httpx](https://www.python-httpx.org/http2/)(python) 19 | + у C#([клик](https://stackoverflow.com/questions/32685151/how-to-make-the-net-httpclient-use-http-2-0)) 20 | + у JS([клик](https://www.npmjs.com/package/haxios)) 21 | 22 | Остальное думаю найдете сами. 23 | 24 | Также хочу заметить, что некоторые endpoint-ы дублируются на сайтах и возвращают одно и тоже. 25 | 26 | При желании дополнить, можете кинуть pull-request. 27 | 28 | ## Документация 29 | 30 | ``` 31 | // Список констант 32 | site_id 33 | + animelib - 5 34 | + mangalib - 1 35 | + ranobelib - 3 36 | + yaoilib - 2 37 | ``` 38 | ### Авторизация 39 | `POST https://lib.social/login` - войти 40 | 41 | ``` 42 | { 43 | "_token": "", // берем с главной QuerySelector("meta[name=_token]") 44 | "login": "", // почта 45 | "password": "", // пароль 46 | "remember": "on" 47 | } 48 | ``` 49 | 50 | *В итоге: Нам кидают ответ, берете location хедер и все, задача онли почистить и токен у вас* 51 | 52 | ### Форум 53 | 54 | #### Действия с тредом 55 | `POST https://lib.social/api/forum/discussion/id/action` 56 | 57 | **Требуется авторизация!** 58 | 59 | ``` 60 | // Закрыть тред 61 | { 62 | actionType: locked 63 | } 64 | ``` 65 | ------ 66 | #### ЧаВо 67 | 68 | 69 | `GET https://lib.social/api/faq/questions` 70 | 71 | ``` 72 | [ 73 | { 74 | "title": "Что такое ранг?", 75 | "id": 4, 76 | "category_id": 2 77 | }, 78 | { 79 | "title": "Что такое уровень?", 80 | "id": 5, 81 | "category_id": 2 82 | }, 83 | { 84 | "title": "Что такое опыт?", 85 | "id": 6, 86 | "category_id": 2 87 | }, 88 | ... 89 | ] 90 | ``` 91 | ------ 92 | #### Получение информации о треде 93 | 94 | `GET https://lib.social/api/forum/discussion/id` 95 | 96 | ``` 97 | { 98 | "discussion": { 99 | "id": 123456, 100 | "chatter_category_id": 1, 101 | "title": "Привет bot", 102 | "user_id": 1397, 103 | "source_id": null, 104 | "source_type": null, 105 | "sticky": 2, 106 | "locked": 0, 107 | "views": 0, 108 | "answered": 0, 109 | "last_reply_at": "2023-03-07T21:28:29.000000Z", 110 | "created_at": "2023-02-18T16:29:43.000000Z", 111 | "updated_at": "2023-03-08T12:35:13.000000Z", 112 | "deleted_at": null, 113 | "yaoi": 0, 114 | "username": "serg1k", 115 | "avatar": "qq0gJSJ7KdWH.jpg", 116 | "category_id": 1, 117 | "category_name": "Баги и проблемы", 118 | "category_slug": "bugs", 119 | "category_color": "#f44336", 120 | "category_icon": "bug", 121 | "notification": false, 122 | "relation": null 123 | }, 124 | "post": { 125 | "id": 1234567, 126 | "post_id": 0, 127 | "chatter_discussion_id": 123455, 128 | "user_id": 1397, 129 | "body": { 130 | "ops": [] 131 | }, 132 | "created_at": "2023-02-18T16:29:43.000000Z", 133 | "updated_at": "2023-03-04T08:03:28.000000Z", 134 | "deleted_at": null 135 | } 136 | } 137 | ``` 138 | ------ 139 | #### Посты в треде 140 | 141 | `GET https://lib.social/api/forum/posts?page=1&discussion_id=id` 142 | 143 | *Примечание: да-да сайт публично показывает платформу с которой вы комментируете* 144 | 145 | ``` 146 | { 147 | "current_page": 1, 148 | "data": [ 149 | { 150 | "id": 1234567, 151 | "post_id": 0, 152 | "chatter_discussion_id": 123456, 153 | "user_id": 1234567, 154 | "body": { 155 | "ops": [ 156 | { 157 | "insert": "Привет bot!" 158 | ], 159 | "userAgent": { 160 | "platform": { 161 | "name": "AndroidOS", 162 | "version": "11" 163 | }, 164 | "browser": { 165 | "name": "Chrome", 166 | "version": "110.0.0.0" 167 | }, 168 | "device": "WebKit", 169 | "isDesktop": false, 170 | "isTablet": false, 171 | "isPhone": true 172 | } 173 | }, 174 | "created_at": "2023-03-04T08:10:09.000000Z", 175 | "updated_at": "2023-03-04T08:10:09.000000Z", 176 | "deleted_at": null, 177 | "username": "serg1k", 178 | "avatar": "qq0gJSJ7KdWH.jpg", 179 | "reply_username": null, 180 | "reply_user_id": null 181 | } 182 | ] 183 | } 184 | ``` 185 | ------ 186 | #### Новый пост 187 | 188 | `POST https://lib.social/api/forum/posts` 189 | 190 | **Требуется авторизация!** 191 | 192 | ``` 193 | { 194 | "chatter_discussion_id": id, // id треда куда публикуем 195 | "body": { 196 | ops: [ 197 | { 198 | "insert": "Привет bot!" 199 | } 200 | ] 201 | } 202 | } 203 | ``` 204 | ------ 205 | #### Новый тред 206 | 207 | `POST https://lib.social/api/forum/discussion` 208 | 209 | **Требуется авторизация!** 210 | 211 | ``` 212 | { 213 | "title": "Привет бот!", 214 | "body": { 215 | "ops": [ 216 | { 217 | "insert": "Как дела?" 218 | } 219 | ] 220 | }, 221 | "chatter_category_id": 7, 222 | "source_type": null, 223 | "source_id": null, 224 | "yaoi": false 225 | } 226 | ``` 227 | 228 | ### Пользователи 229 | 230 | #### Поиск по нику 231 | 232 | `GET https://mangalib.me/search?type=user&q=username` 233 | 234 | ``` 235 | [ 236 | { 237 | "id": 1234567, 238 | "value": "username", 239 | "avatar": "avatar_pic_id.jpg" 240 | } 241 | ] 242 | ``` 243 | ------ 244 | #### Аватарка 245 | 246 | `GET https://mangalib.me/uploads/users/{userid}/{avatar_pic_id}.jpg` 247 | 248 | 249 | `Возвращает аватарку` 250 | 251 | ### Контент сайта 252 | 253 | #### Поиск по названию 254 | 255 | `GET https://mangalib.me/search?type=manga&q=titlename` 256 | 257 | *Примечание: если вам требуется найти ранобэ/аниме просто замените домен, не меняя параметр type. Такой вот костыль.* 258 | 259 | ``` 260 | [ 261 | { 262 | "id": 3757, 263 | "name": "Ijiranaide, Nagatoro-san", 264 | "rus_name": "Не издевайся, Нагаторо-сан", 265 | "eng_name": "Please don't bully me, Nagatoro", 266 | "slug": "ijiranaide-nagatoro-san", 267 | "status_id": 1, 268 | "otherNames": "イジらないで、長瀞さん / Iji-ranaide, Nagatoro-san / 괴롭히지 말아줘, 나가토로 양 / 不要欺負我、長瀞同學 / ยัยตัวแสบแอบน่ารัก นางาโทโระ / Uğraşma Benimle, Nagatoro / Nie drocz się ze mną, Nagatoro! /", 269 | "releaseDate": "2017", 270 | "summary": "Нагаторо - переведённая ученица в старшей школе, которой нравится дразнить своего семпая. Но он всё стерпит. И пусть ему придётся пройти через все виды издевательств - он всё простит, потому что влюблён.", 271 | "cover": "b4SpJNdF67Kj", 272 | "background": "zLQ39MddCwQE", 273 | "hot": 1, 274 | "caution": 1, 275 | "views": 5066550, 276 | "rate": 18688, 277 | "rate_avg": "4.81", 278 | "chap_count": 148, 279 | "type_id": 1, 280 | "user_id": 381497, 281 | "close_view": 0, 282 | "site": 1, 283 | "edit": 2, 284 | "moderated": 1, 285 | "created_at": "2018-01-20T21:07:27.000000Z", 286 | "updated_at": "2023-03-08T12:58:55.000000Z", 287 | "last_chapter_at": "2023-03-01 12:48:01", 288 | "moder_id": 1, 289 | "metadata": { 290 | "locked_fields": [ 291 | "cover", 292 | "edit", 293 | "caution", 294 | "status_id", 295 | "manga_status_id", 296 | "publisher", 297 | "artists", 298 | "authors", 299 | "releaseDate", 300 | "type_id", 301 | "eng_name", 302 | "rus_name", 303 | "name" 304 | ], 305 | "announcement_link": "", 306 | "external_links": [ 307 | "https://manganelo.com/manga/please_dont_bully_me_nagatoro", 308 | "https://pocket.shonenmagazine.com/episode/13932016480029136187", 309 | "https://www.mangaupdates.com/series.html?id=145530" 310 | ], 311 | "chapters": { 312 | "count": 1, 313 | "items": [ 314 | { 315 | "id": 2354365, 316 | "number": "123", 317 | "volume": 16, 318 | "name": "Эй, Сэмпай...", 319 | "branch_id": null, 320 | "status": null 321 | } 322 | ] 323 | }, 324 | "pricing_type": "1", 325 | "chapter_expired_type": "1" 326 | }, 327 | "manga_status_id": 1, 328 | "views_day": 0, 329 | "views_week": 0, 330 | "views_month": 0, 331 | "rating_score": 4.497942177129953, 332 | "shiki_id": 110737, 333 | "value": "Ijiranaide, Nagatoro-san", 334 | "coverImage": "https://cover.imglib.info/uploads/cover/ijiranaide-nagatoro-san/cover/b4SpJNdF67Kj_250x350.jpg", 335 | "coverImageThumbnail": "https://cover.imglib.info/uploads/cover/ijiranaide-nagatoro-san/cover/b4SpJNdF67Kj_thumb.jpg", 336 | "href": "https://mangalib.me/ijiranaide-nagatoro-san", 337 | "covers": { 338 | "default": "https://cover.imglib.info/uploads/cover/ijiranaide-nagatoro-san/cover/b4SpJNdF67Kj_250x350.jpg", 339 | "thumbnail": "https://cover.imglib.info/uploads/cover/ijiranaide-nagatoro-san/cover/b4SpJNdF67Kj_thumb.jpg" 340 | }, 341 | "title_status_id": 1 342 | } 343 | ] 344 | ``` 345 | ------ 346 | #### Получение информации по id/slug 347 | 348 | `GET https://mangalib.me/manga-short-info?id=55901&slug=chainsaw-man-2` 349 | 350 | *Примечание: вы можете добавить параметр type, если знаете тип материала.* 351 | 352 | Type может быть: 353 | + anime 354 | + manga 355 | 356 | ``` 357 | { 358 | "first_chapter": { 359 | "volume": 12, 360 | "number": "98" 361 | }, 362 | "id": 55901, 363 | "name": "Chainsaw Man 2", 364 | "rus_name": "Человек-бензопила 2", 365 | "eng_name": "Chainsaw Man 2", 366 | "slug": "chainsaw-man-2", 367 | "releaseDate": "2022", 368 | "summary": "Прямое продолжение первой части.", 369 | "cover": "Gm9UeJU3bTpz", 370 | "caution": 2, 371 | "rate": 18948, 372 | "rate_avg": "4.89", 373 | "authors": [ 374 | { 375 | "name": "Tatsuki Fujimoto", 376 | "slug": "tatsuki-fujimoto", 377 | "id": 93024, 378 | "pivot": { 379 | "manga_id": 55901, 380 | "author_id": 93024 381 | } 382 | } 383 | ], 384 | "artists": [ 385 | { 386 | "name": "Tatsuki Fujimoto", 387 | "slug": "tatsuki-fujimoto", 388 | "id": 93024, 389 | "pivot": { 390 | "manga_id": 55901, 391 | "author_id": 93024 392 | } 393 | } 394 | ], 395 | "categories": [ 396 | { 397 | "id": 34, 398 | "name": "боевик", 399 | "slug": "action", 400 | "dsc": "Работа, содержащая насилие, драки, схватки и быстрыми сменами действия.", 401 | "created_at": "2016-03-05T11:28:35.000000Z", 402 | "updated_at": "2016-03-30T22:36:49.000000Z", 403 | "pivot": { 404 | "media_id": 55901, 405 | "genre_id": 34, 406 | "media_type": "manga" 407 | } 408 | }, 409 | ... 410 | ], 411 | "tags": [ 412 | { 413 | "id": 151, 414 | "name": "Демоны", 415 | "slug": "150-demony", 416 | "site_id": 1, 417 | "created_at": "2020-01-06T07:36:12.000000Z", 418 | "updated_at": "2020-01-06T07:36:12.000000Z", 419 | "pivot": { 420 | "media_id": 55901, 421 | "tag_id": 151, 422 | "media_type": "manga" 423 | } 424 | }, 425 | ... 426 | ], 427 | "status": { 428 | "id": 1, 429 | "label": "Продолжается", 430 | "created_at": "2016-03-05 16:35:36", 431 | "updated_at": "0000-00-00 00:00:00", 432 | "type": 1 433 | }, 434 | "coverImage": "https://cover.imglib.info/uploads/cover/chainsaw-man-2/cover/Gm9UeJU3bTpz_250x350.jpg", 435 | "href": "https://mangalib.me/chainsaw-man-2" 436 | } 437 | ``` 438 | ------ 439 | #### Список тайтлов 440 | 441 | `POST https://mangalib.me/api/list` 442 | 443 | *Примечание: на сайте(ах) очень много фильтров, этот endpoint изпользуется почти везде, где требуется запросить несколько тайтлов(тайтлы переводчиков, каталог, тайтлы авторов и т.д.), поэтому будут указаны лишь базовые фильтры. <Как найти остальные?> - Очень просто! - Открываете нужную вам страничку и DevTools на ней, выбираете Network, ставите пункт Fetch/XHR и меняете фильтр на сайте(см. картинку) на нужный вам, смотрите в запросы и находите запрос list, тыкаете на него, вкладка Payload.* 444 | 445 | ![картинка1](https://user-images.githubusercontent.com/97462968/223760616-e9aba766-7f13-42fe-b748-7595851c2e87.png) 446 | 447 | ``` 448 | // Фильтры с главной RanobeLib 449 | { 450 | "sort": "rate", 451 | "dir": "desc", 452 | "page": 1, 453 | "types": [ 454 | "10" 455 | ], 456 | "site_id": "3", 457 | "type": "manga", 458 | "caution_list": [ 459 | "Отсутствует", 460 | "16+", 461 | "18+" 462 | ] 463 | } 464 | 465 | ``` 466 | ------ 467 | #### Похожие по id 468 | 469 | `GET https://mangalib.me/similar/id` 470 | 471 | ``` 472 | { 473 | "items": [ 474 | { 475 | "id": 7276, 476 | "slug": "zettai-junshukyousei-kozukuri-kyokashou-anime", 477 | "name": "Zettai Junshu☆Kyousei Kozukuri Kyokashou!!", 478 | "rus_name": "Абсолютная покорность: Секс по лицензии", 479 | "eng_name": null, 480 | "cover": "1568f96a-45cf-4eae-9f6f-1fd33f24be3a", 481 | "type_id": 20, 482 | "status_id": 7, 483 | "anime_status_id": 2, 484 | "type_text": "", 485 | "status_text": "", 486 | "userVote": null, 487 | "subtitle": "Схож по жанрам", 488 | "title": { 489 | "id": 7276, 490 | "slug": "zettai-junshukyousei-kozukuri-kyokashou-anime", 491 | "name": "Zettai Junshu☆Kyousei Kozukuri Kyokashou!!", 492 | "rus_name": "Абсолютная покорность: Секс по лицензии", 493 | "eng_name": null, 494 | "cover": "1568f96a-45cf-4eae-9f6f-1fd33f24be3a", 495 | "type_id": 20, 496 | "status_id": 7, 497 | "anime_status_id": 2, 498 | "type_text": "", 499 | "status_text": "", 500 | "userVote": null, 501 | "subtitle": "Схож по жанрам", 502 | "covers": { 503 | "default": "https://animelib.me/uploads/anime/7276/cover/1568f96a-45cf-4eae-9f6f-1fd33f24be3a.jpg", 504 | "thumbnail": "/uploads/anime/7276/cover/1568f96a-45cf-4eae-9f6f-1fd33f24be3a_thumb.jpg" 505 | }, 506 | "coverImage": "https://animelib.me/uploads/anime/7276/cover/1568f96a-45cf-4eae-9f6f-1fd33f24be3a.jpg", 507 | "coverImageThumbnail": "/uploads/anime/7276/cover/1568f96a-45cf-4eae-9f6f-1fd33f24be3a_thumb.jpg", 508 | "href": "https://mangalib.me/anime/7276-zettai-junshukyousei-kozukuri-kyokashou-anime", 509 | "title_status_id": 2 510 | }, 511 | "covers": { 512 | "default": "https://animelib.me/uploads/anime/7276/cover/1568f96a-45cf-4eae-9f6f-1fd33f24be3a.jpg", 513 | "thumbnail": "/uploads/anime/7276/cover/1568f96a-45cf-4eae-9f6f-1fd33f24be3a_thumb.jpg" 514 | }, 515 | "coverImage": "https://animelib.me/uploads/anime/7276/cover/1568f96a-45cf-4eae-9f6f-1fd33f24be3a.jpg", 516 | "coverImageThumbnail": "/uploads/anime/7276/cover/1568f96a-45cf-4eae-9f6f-1fd33f24be3a_thumb.jpg", 517 | "href": "https://mangalib.me/anime/7276-zettai-junshukyousei-kozukuri-kyokashou-anime", 518 | "title_status_id": 2 519 | }, 520 | ... 521 | ] 522 | } 523 | ``` 524 | ------ 525 | #### Постеры 526 | Постеры отдаются с хедером `Referer: https://mangalib.me/` 527 | --------------------------------------------------------------------------------