This is a bit of an off-color post for me, but today I faced a major frustration: I went on Amazon to buy a TV Show that I've been wanting to watch... and I couldn't get it on Blu-Ray.

The high-def version is held hostage to rent-only services like Amazon Prime that only allow you to cache a streamable copy of the "Purchased" show on your hard drive.

I'm not a fan of torrenting*, but when it's the only option I have for casting my vote for digital ownership, it's how I cast my vote.

Anyway, one of the less terrible sites I'd recommend if you're in the unfortunate position of wanting to own a show for which there is no "legitimate" option is https://eztv.it (currently https://eztv.re).

Once you find the show that you want to own a copy of, there are often a few different contributors and perhaps a few different versions (English Dub, 720p, 1080p, etc).

Here's a little script that will filter the view based on keywords:

function filterEztv(keywords) {
  var sh = [];
  $$('tr.forum_header_border').filter(function ($el) {

    if (!keywords.every(function (kw) {
      return -1 !== $el.innerText.indexOf(kw);
    })) {
      $el.hidden = true;
      return;
    }
    return true;

  }).forEach(function ($el) {

    console.log('# Magnet:', $el.querySelector('a[href^="magnet"]').href);
    if ($el.querySelector('a[href$="torrent"]')) {
      sh.push("wget -c '" + encodeURI($el.querySelector('a[href$="torrent"]').href) + "' # Torrent");
    }

  });

  return sh;
}

For example here's how I filter the list to only Season 1 of a show uploaded by FooBar, tagged as 720p:

console.log(filterEztv([" S01E", "720p", "FooBar"]).join("\n"));

* in the colloquial sense, meaning its dubious use - not the technology itself, which is a great technology.

Bonus Update (2018-11-14):

Here's how to sort the https://eztv.re/showlist/ show list by popularity:

var myTable = document.querySelectorAll("table.forum_header_border")[1];
var myTrs = Array.prototype.slice.call(myTable.querySelectorAll('tr[name="hover"]'));
myTrs.sort(function (a, b) {
  a = parseInt(a.querySelector('span').innerText.replace(/.*?\((.*) votes\).*/, '$1').replace(/,/g, ''), 10);
  b = parseInt(b.querySelector('span').innerText.replace(/.*?\((.*) votes\).*/, '$1').replace(/,/g, ''), 10);
  console.log(a, b, b - a);
  return b - a;
}).forEach(function (tr) {
  myTable.appendChild(tr);
});

By AJ ONeal

If you loved this and want more like it, sign up!


Did I make your day?
Buy me a coffeeBuy me a coffee  

(you can learn about the bigger picture I'm working towards on my patreon page )