shafat420 9e30eb471e fix
2025-06-21 16:51:37 +06:00
fix
2025-06-21 16:51:37 +06:00
2025-04-25 12:18:41 +06:00
2025-04-25 12:18:41 +06:00
2025-04-25 12:25:55 +06:00
2025-04-25 12:18:41 +06:00

Anilist to Anime Mapper API

A specialized Node.js API that maps anime data between Anilist and streaming platforms (AnimePahe, HiAnime, AnimeKai) using advanced string similarity algorithms.

Features

  • Map Anilist anime IDs to AnimePahe, HiAnime, and AnimeKai content
  • Advanced string similarity analysis with multiple algorithms
  • Season/year matching for multi-season anime series
  • Title variation detection across platforms
  • Get streaming links with proper headers
  • Support for both subbed and dubbed anime (AnimeKai)

Installation

# Clone the repository
git clone https://github.com/yourusername/anilist-animepahe-mapper.git
cd anime-mapper

# Install dependencies
npm install

# Start the server
npm start

API Endpoints

AnimePahe Endpoints

Map Anilist ID to AnimePahe

GET /animepahe/map/:anilistId

Maps an Anilist anime ID to its corresponding AnimePahe content.

GET /animepahe/sources/:session/:episodeId

Returns streaming links for a specific AnimePahe episode.

Alternative format:

GET /animepahe/sources/:id

HiAnime Endpoints

Map Anilist ID to HiAnime

GET /hianime/:anilistId

Maps an Anilist anime ID to its corresponding HiAnime content.

Get HiAnime Servers

GET /hianime/servers/:episodeId

Get available servers for a HiAnime episode.

Parameters:

  • ep (optional): Episode number

Example:

GET /hianime/servers/one-piece-100?ep=2142

Get HiAnime Streaming Sources

GET /hianime/sources/:episodeId

Returns streaming links for a specific HiAnime episode.

Parameters:

  • ep (required): Episode number
  • server (optional): Server name (default: vidstreaming)
  • category (optional): Content type (sub, dub, raw) (default: sub)

Example:

GET /hianime/sources/one-piece-100?ep=2142&server=hd-1&category=sub

AnimeKai Endpoints

Map Anilist ID to AnimeKai

GET /animekai/map/:anilistId

Maps an Anilist anime ID to its corresponding AnimeKai content.

GET /animekai/sources/:episodeId

Returns streaming links for a specific AnimeKai episode.

Parameters:

  • server (optional): Specify a streaming server
  • dub (optional): Set to true or 1 to get dubbed sources instead of subbed

Example:

GET /animekai/sources/episode-id-here?dub=true

Handling 403 Errors

When accessing the streaming URLs (not the API endpoint), you will encounter 403 Forbidden errors unless you include the proper Referer header. This is a requirement from the underlying streaming provider.

Required Headers for Streaming

Referer: https://kwik.cx/

Example Implementation

// Javascript fetch example
fetch('https://streaming-url-from-response.m3u8', {
  headers: {
    'Referer': 'https://kwik.cx/'
  }
})

// Using axios
axios.get('https://streaming-url-from-response.m3u8', {
  headers: {
    'Referer': 'https://kwik.cx/'
  }
})

Video Player Examples

// Video.js player
const player = videojs('my-player', {
  html5: {
    hls: {
      overrideNative: true,
      xhr: {
        beforeRequest: function(options) {
          options.headers = {
            ...options.headers,
            'Referer': 'https://kwik.cx/'
          };
          return options;
        }
      }
    }
  }
});

// HLS.js player
const hls = new Hls({
  xhrSetup: function(xhr, url) {
    xhr.setRequestHeader('Referer', 'https://kwik.cx/');
  }
});
hls.loadSource('https://streaming-url-from-response.m3u8');
hls.attachMedia(document.getElementById('video'));

Mapping Approach

The API uses several techniques to find the best match between Anilist and streaming platforms:

  1. Tries multiple possible titles (romaji, english, native, userPreferred, synonyms)
  2. Uses multiple string similarity algorithms to find the best match
  3. Ranks matches based on similarity score
  4. Uses year and season information to match the correct season of a series
  5. Extracts season numbers from titles for better matching

Response Format Examples

AnimePahe Mapping Response

{
  "id": 131681,
  "animepahe": {
    "id": "5646-Re:ZERO -Starting Life in Another World- Season 3",
    "title": "Re:ZERO -Starting Life in Another World- Season 3",
    "type": "TV",
    "status": "Finished Airing",
    "season": "Fall",
    "year": 2024,
    "score": 8.5,
    "posterImage": "https://i.animepahe.ru/posters/016b3cda2c47fb5167e238a3f4e97f03e0d1bd3d5e8ffb079ad6d8665fb92455.jpg",
    "episodes": {
      "count": 16,
      "data": [...]
    }
  }
}

AnimeKai Mapping Response

{
  "id": 131681,
  "animekai": {
    "id": "re-zero-starting-life-in-another-world-season-3",
    "title": "Re:ZERO -Starting Life in Another World- Season 3",
    "malId": 51194,
    "posterImage": "https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx131681-OFQfZ5v67VYq.jpg",
    "episodes": [...]
  }
}

Episode Sources Response

{
  "headers": { "Referer": "https://kwik.cx/" },
  "sources": [
    {
      "url": "https://na-191.files.nextcdn.org/hls/01/b49063a1225cf4350deb46d79b42a7572e323274d1c9d63f3b067cc4df09986a/uwu.m3u8",
      "isM3U8": true,
      "quality": "360",
      "size": 44617958
    },
    {
      "url": "https://na-191.files.nextcdn.org/hls/01/c32da1b1975a5106dcee7e7182219f9b4dbef836fb782d7939003a8cde8f057f/uwu.m3u8",
      "isM3U8": true,
      "quality": "720",
      "size": 78630133
    },
    {
      "url": "https://na-191.files.nextcdn.org/hls/01/b85d4450908232aa32b71bc67c80e8aedcc4f32a282e5df9ad82e4662786e9d8/uwu.m3u8",
      "isM3U8": true,
      "quality": "1080",
      "size": 118025148
    }
  ]
}

Notes

  • This API is for educational purposes only
  • Respect the terms of service of all providers (Anilist, AnimePahe, HiAnime, AnimeKai)
  • Optimized for simplicity and focused exclusively on mapping functionality

Dependencies

  • Express.js - Web framework
  • @consumet/extensions - For AnimePahe integration
  • AniWatch (HiAnime) - For HiAnime integration
  • Node-cache - For response caching

Example Usage

Map by Anilist ID:

GET /animepahe/map/21
GET /hianime/21
GET /animekai/map/21

Get streaming links for an episode:

GET /animepahe/sources/session-id/episode-id
GET /animekai/sources/episode-id
GET /animekai/sources/episode-id?dub=true
Description
No description provided
Readme 86 KiB
Languages
JavaScript 100%