master
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();