# FlixInfo [![npm version](https://badge.fury.io/js/flixinfo.svg)](https://badge.fury.io/js/flixinfo) [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC) Get detailed movie and TV series information using Netflix IDs. FlixInfo is a Node.js library that fetches comprehensive movie/TV show data by combining Netflix content information with The Movie Database (TMDb) data. ## 🎯 Features - **Netflix Content Details**: Fetch movie/TV show information directly from Netflix - **TMDb Integration**: Enrich data with The Movie Database information including details, credits, images, and trailers - **Multi-language Support**: Support for different languages via TMDb API - **Regional Support**: Works with both Turkish (tr.flixable.com) and Global (flixable.com) Netflix content - **Google Search Fallback**: Automatic Google search integration when direct TMDb lookup fails - **Comprehensive Data**: Returns Netflix data + TMDb data + IMDB ratings in a single response ## πŸ“¦ Installation ```bash npm install flixinfo ``` ## πŸš€ Quick Start ```javascript const FlixInfo = require('flixinfo'); // Initialize with your TMDb API key const flixInfo = new FlixInfo('YOUR_TMDB_API_KEY'); // Get movie/TV show information async function getMovieInfo() { try { const info = await flixInfo.getNetflixInfo( 81151514, // Netflix ID 'en-EN', // Language for TMDb API 'tr' // Netflix location ('tr' for Turkey, other for global) ); console.log(info); } catch (error) { console.error('Error:', error); } } getMovieInfo(); ``` ## πŸ”§ API Reference ### Constructor ```javascript new FlixInfo(tmdbApiKey) ``` **Parameters:** - `tmdbApiKey` (string): **Required** - Your TMDb API key. Get one from [https://www.themoviedb.org/settings/api](https://www.themoviedb.org/settings/api) ### Methods #### `getNetflixInfo(netflixId, theMovieDbLanguage, netflixLocation)` Fetches comprehensive movie/TV show information. **Parameters:** - `netflixId` (number): **Required** - Netflix content ID - `theMovieDbLanguage` (string): **Required** - Language code for TMDb API (e.g., 'en-EN', 'tr-TR') - `netflixLocation` (string): **Required** - Netflix location ('tr' for Turkish content, anything else for global) **Returns:** Returns a Promise that resolves to an object containing: ```javascript { result: 1, // Success indicator error: 0, // Error indicator watch: "movie" | "tv", // Content type imdb: { id: "string", // IMDB ID (if available) rate: "string" // IMDB rating (if available) }, netflix: { title: "string", // Title on Netflix year: "string", // Release year poster_url: "string", // Netflix poster URL age_rates: "string", // Age rating season: "string", // Season count (for TV shows) runtime: "string", // Runtime (for movies) overview: "string", // Description/overview genres: ["string"], // Array of genres cast: ["string"] // Array of cast members }, tmdb: { google_search: boolean, // Whether Google search was used details: {}, // TMDb details object credits: {}, // TMDb credits object images: {}, // TMDb images object trailers: {} // TMDb trailers object } } ``` ## πŸ“ Finding Netflix IDs You can find Netflix IDs using: 1. **Flixable**: Browse [tr.flixable.com](https://tr.flixable.com) (Turkish) or [flixable.com](https://flixable.com) (Global) 2. **Netflix URL**: The ID is the number in the Netflix URL: `https://www.netflix.com/title/NETFLIX_ID` 3. **Browser Extensions**: Various browser extensions can show Netflix IDs ## 🌍 Supported Languages TMDb API supports various languages. Common examples: - `'en-EN'` - English - `'tr-TR'` - Turkish - `'de-DE'` - German - `'fr-FR'` - French - `'es-ES'` - Spanish - `'it-IT'` - Italian See [TMDb API Documentation](https://developers.themoviedb.org/3/getting-started/languages) for complete list. ## 🎬 Usage Examples ### Basic Movie Information ```javascript const FlixInfo = require('flixinfo'); const flixInfo = new FlixInfo('YOUR_TMDB_API_KEY'); // Get movie info (Inception - Netflix ID: 70131314) const movieInfo = await flixInfo.getNetflixInfo(70131314, 'en-EN', 'tr'); console.log(`Title: ${movieInfo.netflix.title}`); console.log(`Year: ${movieInfo.netflix.year}`); console.log(`Genres: ${movieInfo.netflix.genres.join(', ')}`); ``` ### TV Series Information ```javascript // Get TV series info (Ragnarok - Netflix ID: 80232926) const seriesInfo = await flixInfo.getNetflixInfo(80232926, 'en-EN', 'tr'); console.log(`Series: ${seriesInfo.netflix.title}`); console.log(`Seasons: ${seriesInfo.netflix.season}`); console.log(`First Air Date: ${seriesInfo.tmdb.details.first_air_date}`); ``` ### Turkish Content ```javascript // Get Turkish content with Turkish language support const turkishInfo = await flixInfo.getNetflixInfo(81151514, 'tr-TR', 'tr'); console.log(`TΓΌrkΓ§e BaşlΔ±k: ${turkishInfo.netflix.title}`); console.log(`TΓΌr: ${turkishInfo.netflix.genres.join(', ')}`); console.log(`Γ–zet: ${turkishInfo.netflix.overview}`); ``` ### Error Handling ```javascript const FlixInfo = require('flixinfo'); try { const flixInfo = new FlixInfo('YOUR_TMDB_API_KEY'); const info = await flixInfo.getNetflixInfo(81151514, 'en-EN', 'tr'); console.log(info); } catch (error) { console.error('Error occurred:', error); // Common errors: // - 'missing tmdb api key' - Invalid or missing API key // - 'this content was not found!' - Netflix ID not found // - 'tmdb api connection error' - TMDb API connectivity issues // - 'language parameters not found' - Invalid language parameter } ``` ## πŸ§ͺ Testing Run the test suite: ```bash npm test ``` The tests use Mocha, Chai, and Nock for HTTP mocking. Tests cover: - API key validation - Movie and TV show information retrieval - Error handling - Connection failures ## πŸ› οΈ Development ### Project Structure ``` flixinfo/ β”œβ”€β”€ lib/ β”‚ β”œβ”€β”€ index.js # Main FlixInfo class β”‚ └── module.js # Helper functions (IMDB, TMDb, Google search) β”œβ”€β”€ config/ β”‚ └── index.js # Configuration constants β”œβ”€β”€ example/ β”‚ └── getinfo.js # Usage example β”œβ”€β”€ test/ β”‚ └── flixinfo.test.js # Test suite β”œβ”€β”€ index.js # Entry point └── package.json ``` ### Dependencies - **cheerio**: Server-side HTML parsing - **request**: HTTP client for API calls - **config**: Configuration management ### Dev Dependencies - **mocha**: Test framework - **chai**: Assertion library - **nock**: HTTP mocking for tests ## πŸ“ Notes ### Data Sources 1. **Netflix Data**: Sourced from Flixable (Netflix catalog) 2. **TMDb Data**: Enriched with The Movie Database 3. **IMDB Data**: Cross-referenced with IMDB ratings 4. **Google Search**: Fallback when TMDb lookup fails ### Limitations - Requires active Netflix content (removed content won't be found) - Dependent on Flixable availability - TMDb API rate limits apply - Some content may lack complete information ### Error Scenarios - Netflix content not found or removed - Invalid TMDb API key - Network connectivity issues - Flixable service unavailability - TMDb API downtime ## 🀝 Contributing 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## πŸ“„ License This project is licensed under the ISC License - see the [LICENSE](LICENSE) file for details. ## πŸ”— Links - [GitHub Repository](https://github.com/sbilketay/flixinfo) - [The Movie Database API](https://developers.themoviedb.org/3) - [Flixable (Turkish)](https://tr.flixable.com) - [Flixable (Global)](https://flixable.com) ## πŸ› Issues Found a bug or have a feature request? Please [open an issue](https://github.com/sbilketay/flixinfo/issues). --- **Disclaimer**: This library is for educational purposes only. Respect Netflix's terms of service and all applicable copyright laws.