Code Monkey home page Code Monkey logo

tv-shows's Introduction

tv-shows

Build Status

Personal TV shows manager.

Install

npm install @niksy/tv-shows --save

Usage

const Manager = require('@niksy/tv-shows');
const manager = new Manager([
	{
		title: 'Game of Thrones',
		tvmazeId: 82,
		addic7edId: 1245,
		searchQuery: [
			'game of thrones',
			'of thrones'
		]
	},
	// ...
]);

manager.getEpisodesByDate(new Date());
manager.getEpisodesByShowId(82);
/* [
	{
		show: {
			title: 'Game of Thrones',
			webChannel: false,
			tvmazeId: 82,
			addic7edId: 1245,
			searchQuery: [
				'game of thrones',
				'of thrones'
			]
		},
		season: 6
		number: 4,
		title: 'Book of the Stranger'
	},
	// ...
] */

API

Manager(shows, [options])

Type: Function

shows

Type: Object[]

List of shows. See show configuration for how to structure individual shows list item.

options

Type: Object

subtitleLanguage

Type: Integer|String
Default: 1 (English)

Subtitles language. See addic7ed-subtitles-api description.

quality

Type: String[]
Default: ['720p']

Video/audio quality. Used in torrent search queries.

country

Type: String[]
Defulat: ['US', 'GB']

Countries for which schedule will be looked for.

excludeTorrentService

Type: String[]
Default: []

List of torrent services to exclude from checking. Useful when some service is down.

Available values are:

  • leetx
  • piratebay
  • extratorrent
  • eztv
  • torrentapi

manager.getEpisodesByDate(date)

Returns: Promise

Gets TV shows episodes schedule by given date.

date

Type: Date

Schedule date.

manager.getEpisodesByShowId(id)

Returns: Promise

Gets TV shows episodes by given TVmaze show ID.

id

Type: Number

TVmaze show ID.

Episode API

Every episode is instance of Episode class with methods for getting list of torrents and subtitles.

episode.getTorrents()

Returns: Promise

Gets list of torrents for episode. Consumes APIs for several torrent trackers and sensibly sorts them:

  • PROPER and REPACK releases are at the top
  • Torrents with larger number of seeds are at the top
  • Duplicate torrents (based on Magnet hash) are removed

episode.getSubtitles()

Returns: Promise

Gets list of subtitles from Addic7ed.com for episode. Sorts list where:

  • PROPER and REPACK releases are at the top
  • Entries with larger number of downloads are at the top

Show configuration

Every show is JSON object with following properties:

Property Type Description
title String Show title.
webChannel Boolean Is the show web channel show (e.g. Netflix production) or standard network show.
tvmazeId Number TVmaze show ID.
addic7edId Number Addic7ed.com show ID.
searchQuery String[] List of search queries used to search torrent trackers.
advancedSearchQuery String[] List of advanced search queries used to search torrent trackers. {{ value }} placeholders get replaced with season and episode values.

Example

[
	{
		"title": "Game of Thrones",
		"webChannel": false,
		"tvmazeId": 123,
		"addic7edId": 456,
		"searchQuery": [
			"game of thrones",
			"of thrones"
		],
		"advancedSearchQuery": [
			"game of thrones {{ season }} {{ episode }}"
		]
	}
]

License

MIT © Ivan Nikolić

tv-shows's People

Contributors

niksy avatar

Stargazers

Md Sad Rahman Dillu avatar Hossin Azmoud avatar

Watchers

 avatar James Cloos avatar

tv-shows's Issues

Extend configuration

  • Add support for different subtitle languages
  • Add support for video quality setting (SD, 720p, 1080p)

Add support for webshows

Currently, TVMaze calendar API shows only network TV shows, but not webshows such as those on Netflix or Hulu.

One way to add support for that is tagging those shows with special property in tv-shows.json, e.g. webShow: true, and fetching all episodes of the show filtered by date. This will require rewrite of parsing and fetching mechanism, but will provide us with better integration capability in future (e.g. Croatian network TV shows).

Examples of API responses for House of Cards (Netflix):

EZTV results should be filtered

Returned results can be whole list, so it should be filtered with query:

.then(function ( torrents ) {
            if ( torrents.length > 10 ) {
                return [];
            }
            return torrents
                .map(function ( torrent ) {
                    return {
                        title: torrent.title,
                        seeders: 0,
                        leechers: 0,
                        pubDate: resolveDate(torrent.date),
                        magnetLink: torrent.magnet
                    };
                });
        })
// ...

Improve CLI

  • Handle network error
  • Use proper spinners
  • Make table function accept option as argument
  • Make Terminal window focused after doing Transmission work (http://forums.macrumors.com/threads/applescript-window-focus.288310/#post-3452396)
  • "Works with" column is unecessary
  • Subtitles sometimes have date "just now", which isn’t true
  • from2 module sometimes returns criptic errors (TypeError: this._from is not a function) which should be handled properly
  • Fetching subtitles by language should be done by language ID on Addic7ed (no unecessary filtering)
  • If there are no shows, show message
  • Add possibility to select show regardless of date (flag --choose-show which ignores --date flag)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.