Skip to content

Instantly share code, notes, and snippets.

@198d
Created July 24, 2012 16:29
Show Gist options
  • Save 198d/3171036 to your computer and use it in GitHub Desktop.
Save 198d/3171036 to your computer and use it in GitHub Desktop.
var jsdom = require('jsdom'),
optimist = require('optimist'),
prompt = require('prompt'),
util = require('util'),
sprintf = require('sprintf').sprintf,
fs = require('fs'),
http = require('http'),
url = require('url');
var argv = optimist.argv;
var baseURL = 'http://www.nzbsearch.net'
function start(terms) {
var url = sprintf('%s/search.aspx?&st=1&q=%s', baseURL, terms.join('+'));
jsdom.env(url,
['http://code.jquery.com/jquery-1.7.2.min.js'],
function(errors, window) {
var $ = window.$;
var rows = $('tr.rgRow, tr.rgAltRow');
var results = $.map(rows, function(row) {
var row = $(row);
var link = row.find('td:eq(0) > span > a:first-child');
return {
'title': link.text(),
'path': link.attr('href'),
'size': row.find('td:eq(1) span').text()
}
});
select(results);
}
);
}
function display(results) {
util.puts.apply(null, results.map(function(result, index) {
var title = result.title.substring(0, 100);
if (title.length < result.title.length) {
title = sprintf('%s...', title.substring(0, 97));
}
return sprintf('%2d: %-100s %s', index+1, title, result.size);
}));
}
function select(results) {
display(results);
var selectionField = {
name: 'selection',
description: 'Selection',
pattern: /\d+/,
conform: function(value) {
var number = parseInt(value);
return number <= results.length;
}
}
prompt.message = 'NZBSearch'.green;
prompt.start();
prompt.get([selectionField], function(err, result) {
var index = parseInt(result.selection);
fetch(results[index-1]);
});
}
function fetch(collection) {
var parsedURL = url.parse(baseURL);
var stream = fs.createWriteStream(sprintf('%s.nzb', argv._.join('.')));
http.get({hostname: parsedURL.hostname, path: collection.path}, function(response) {
response.on('data', function(chunk) {
stream.write(chunk);
});
});
}
start(argv._);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment