master
Raw Download raw file
 1/* my-hypem.sh
 2 * 
 3 * Scrapes mp3's off of hypem.com
 4 * Rabbit Hole / Software Stack:
 5 * 	nodejs - needed to interface with a db for storage / program exercise
 6 * 		(not yet implemented)
 7 * 	spookyjs - needed to drive this crazy train from nodejs
 8 * 		(not yet implmented)
 9 * 	casperjs - needed for binary file downloading
10 * 		(tested with 1.0.0-RC4)
11 * 	phantomjs - needed for webkit browser awesomness
12 * 		(tested with 1.7.0)
13 *
14 * Run:  $ casperjs my-hypem.sh --url=<url>
15 * 
16 * Thanks to http://userscripts.org/scripts/review/112466 for the inspiration
17 */
18
19/* TODO
20 *  - add a flat file db to remember songs that have been downloaded before
21 *  - auto upload to google music
22 *    + in a playlist
23 */
24
25var casper = require('casper').create({
26	pageSettings: { 
27		webSecurityEnabled: false 
28	},
29	verbose: true,
30	logLevel: "error" //"debug"
31});
32
33// Basic informational usage message
34function usage(){
35	console.log('my-hypem: usage: casperjs my-hypem.js --url=<target>');
36	console.log('\texample: casperjs my-hypem.js --url=http://hypem.com/popular');
37}
38
39casper.start();
40var test = false;
41
42// Check for help or required url option
43if (casper.cli.has("h") || casper.cli.has("help")) {
44	usage();
45	casper.exit(0);	
46} else if (casper.cli.has("test") || casper.cli.has("t")) {
47	test = true;
48} else if (!casper.cli.has("url")) {
49	console.log("Error - url option required!");
50	usage();
51	casper.exit(1);
52}
53
54var target = casper.cli.get("url");
55
56console.log("Connecting...");
57casper.thenOpen(target, function() {
58	var TrackList = casper.evaluate(function () {
59		console.log("retrieved:" + displayList.tracks);
60		return displayList.tracks;
61	});
62	if (TrackList === undefined || TrackList.length < 1){
63		console.log('TrackList Empty! Retry?');
64	} else {
65		for(i=0; i<TrackList.length; i++){
66			var url = 'http://hypem.com/serve/f/509/'+
67				TrackList[i].id +'/'+
68				TrackList[i].key;
69			var name = TrackList[i].artist + ' - ' +
70				TrackList[i].song + '.mp3';
71			if (test) {
72				console.log('Test-run   : ' + name);
73			} else {
74				console.log('Downloading: ' + name);
75				this.download(url,name);
76			}
77		}
78	}
79});
80
81casper.run();