Code Monkey home page Code Monkey logo

getme's Introduction

GetMe downloads your favourite TV shows in the easiest way possible. GoDoc

Just run:

$ getme -a "Pioneer one"

And you're done!

What?

Join the chat at https://gitter.im/haarts/getme

GetMe allows you to:

  1. Find shows
  2. Download the appropriate torrents
  3. Continue to follow the show

All from a simple CLI interface.

What GetMe doesn't do is actually download the files. That is the job of your Bittorrent client. Almost all clients support 'watch directories'. When a torrent shows up in that directory the client will process it.

Installation

Couldn't be simpler. No external dependancies, no hassle. Either grab on of the binaries or build from source.

Binaries

Check out the releases.

Bleeding edge

You need to have Go installed. Then run:

$ go get github.com/haarts/getme

I've been using version 1.5 but I'm fairly certain every 1.x version of Go will work.

Usage

GetMe supports two modes. Adding shows/movies with -a. And updating them with, you guessed it, -u.

Usually you'd added a couple of shows and then periodically run (cron anyone?) with the update flag.

First time

The first time that you run GetMe it will exit immediately because no config file could be found. GetMe will create one for you. This file contains ONE line with a simple key value pair. This pair will tell GetMe where the watch directory is of your favourite Torrent client. You really want to check if the directory is the correct one.

Help

For more help (there isn't any but what the heck) run:

$ getme -h

Tools

The tools directory contains a Python 3 script to create a list of popular shows. This is used to present the user with the most relevant search results. As a regular user you don't need to use this file. A recent list of shows in compiled in the binaries.

There are two other binaries which I found useful at times.

pending will just query the database (aka a bunch of JSON files) and returns which seasons and episodes still appear pending.

crosscheck is a bit more complex. It will check for each episode in the database for which there should be a file on disk if that is the case. If that is wrong it either fixes the database or just outputs the offending episode. Please note that it can be perfectly normal for the database to have marked an episode as retrieved but it can not yet be found on disk. It might not have been moved yet or is still being downloaded.

Third party APIs

GetMe uses Trakt and TvMaze for finding show information. It uses Kickass and TorrentCD for finding torrents.

Why?!

There are, of course, tools which do what GetMe does. Internet is great like that. One notable example is FlexGet. This is a great tool with a great community. It has an endless list of features and options. Which is exactly why I wrote GetMe. I just wanted the job to get done without needing to care about all the nitty gritty details. If you really want everything in 1080p from a specific release group GetMe is not for you. If you just want the job done: $ ./getme -a 'Pioneer one'.

getme's People

Contributors

haarts avatar gitter-badger avatar

Stargazers

Jan Smolders avatar  avatar

Watchers

 avatar James Cloos avatar  avatar  avatar

Forkers

gitter-badger

getme's Issues

Add flags

Its time to add start up flags. I don't think it's possible to add git like sub commands which is what I initially wanted. No matter, flags will do just fine.

Add: -a, --add string
Daemon: -d, --daemon nil
From Season: -fs, --from-season int
From Episode: -fe, --from-episode int (must be used in combo with -fs)
...

Display alternatives as a table, not a list.

Currently the alternatives are displayed as a long list. With the matches from the different sources just appended to each other. Dog ugly.

I think the tabWriter could help us out. The idea is to have a column for each source (Trakt, TvRage, etc). Under that list the alternatives. Mind that the first entry of the second column has the index of len(firstColumn)+1.

Add back-off support

Some torrents we'll never be able to download (for example the first episode of a series which started in 1996). There is no need to keep trying it. Be gentle with all the webservices we're using an progressively back off trying to fetch these.

Add movie support

I'd imagine this taking a long time. But ideally I want to be able to track movies too.

The 'sources' package imports the 'store' package

This means that any other binary wanting to use the 'sources' package now contains the 'store' package too. That seems a violation of concerns.

It's tricky to envision the removal of 'store'.
Removing it would mean moving the UpdateSeasonsAndEpisodes elsewhere; where should it be moved to?
And the Source interface needs to change the function signature of Seasons. The question then is how to pass down the original source information.

Output of update with multiple shows is rubbish

Updating media from sources and downloading pending torrents.
...................................Searching for 1 torrents.
Downloading 0 torrents
Pending: foobar season 11 episode 7
Searching for 4 torrents.....
Downloading 0 torrents
Pending: baz season 0
Pending: baz season 1 episode 1
Pending: baz season 1 episode 2
Pending: baz season 1 episode 3
....................Searching for 10 torrents..........................................
Downloading 0 torrents
Pending: bar season 1 episode 1
Pending: bar season 1 episode 2
Pending: bar season 1 episode 3
Pending: bar season 1 episode 4
Pending: bar season 1 episode 5
Pending: bar season 1 episode 6
..Searching for 6 torrents.............
Downloading 0 torrents
Pending: tofu season 0
Pending: tofu season 4 episode 12
Pending: tofu season 4 episode 13
Pending: tofu season 4 episode 14
Pending: tofu season 4 episode 15
Pending: tofu season 4 episode 16
.............

Create the canonical name app/lib

I've had it with crappy searches and unintelligible torrent names.
I want a library which will take a string which supposedly represent a show name and map that to a canonical show name. The latter can come from one of the services i use like tvmaze.

Test this with a whole bunch of torrents.

Make a robust IMDB popular shows parser.

The current tool popular_shows.py requires two files in /tmp called part1.html and part2.html. These files should contain a subtree of the source IMDB page. This is because Beautiful Soup was unable to parse the original. This is a hassle and should be fixed.

Ideally you'd just run the Python script which does:

  1. Download the first page
  2. Parse the first page
  3. Append to shows list
  4. Do it all again for the second page

Ignore seasons 0

This rarely returns anything useful and if you're such a fan that you want to see the directors commentary you can search for it yourself.

Split into server/client

I'd love to split the software up in two distinct parts. A server and a client. All HTTP.

I think it is rather easy. The ui package is probably a good place to start for the server part. Every thing in main is client except the config part which has to move anyway.
The client is to be written brand new.

The added value for the end user is the fact that multiple UI can be made. CLI is not for everyone and I expect even less so for Windows users.

Handle source errors robustly

Currently when one of the sources errors out (always Trakt) the entire program comes to a halt. We don't want that. Make it so that it handles the error and continues.

getme/ui/ui.go

Line 202 in c4e083e

if !isAllNil(errors) {

Simplify snippets

Now I try to be clever by generating snippets and picking a random one at the start. Instead I should just use S00E00 first, then 0x00 and then year-month-day.

Link with #33

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.