first commit
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,5 +1,7 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
public/src/thumbs
|
public/src/thumbs
|
||||||
|
.claude/
|
||||||
|
.serena/
|
||||||
|
|
||||||
# OS generated files #
|
# OS generated files #
|
||||||
######################
|
######################
|
||||||
|
|||||||
276
README.md
276
README.md
@@ -1,2 +1,274 @@
|
|||||||
# flixinfo
|
# FlixInfo
|
||||||
Get movie detail with netflix id
|
|
||||||
|
[](https://badge.fury.io/js/flixinfo)
|
||||||
|
[](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.
|
||||||
768
package-lock.json
generated
768
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user