import java.net.URL;
import java.net.URLConnection;
import java.io.BufferedReader;
import java.io.Console;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.File;
import java.lang.String;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/**
*
* ReverbNationDownloader
*
* @version 1.0.0 vom 03.03.2013
* @author Daniel Ruf
*/
public class reverbnationdownloader {
public static void main(String[] args) throws Exception{
String version = "1.0.0";
String program = "ReverbNationDownloader";
System.out.println(program + " " + version );
String headerName = null, returnCookie = "";
StringBuilder contents = new StringBuilder(2048);
BufferedReader br = null;
String client ="234s3rwas";
Console console = System.console();
String reverbnation_artist = console.readLine("Please enter the Artist: ");
String song_id = console.readLine("Please enter the SongID: ");
URL url2 = new URL("http://www.reverbnation.com/"+reverbnation_artist.toLowerCase()+"/song/"+song_id+"");
br = new BufferedReader(new InputStreamReader(url2.openStream()));
String line = "";
while (line != null)
{
line = br.readLine();
contents.append(line);
}
br.close();
String password ="";
String artist="";
String song="";
Pattern p = Pattern.compile("(?i)(.*)(pass: \")(.+?)(\",)(.*)");
Matcher m = p.matcher(contents.toString());
if(m.matches()) {
password =m.group(3);
}
Pattern p2 = Pattern.compile("(?i)(.*)(<span class=\"song_name\">)(.+?)(</span>)(.*)");
Matcher m2 = p2.matcher(contents.toString());
if(m2.matches()) {
song =m2.group(3);
}
Pattern p3 = Pattern.compile("(?i)(.*)(<span class=\"artist_name\">By: )(.+?)(</span>)(.*)");
Matcher m3 = p3.matcher(contents.toString());
if(m3.matches()) {
artist =m3.group(3);
}
URL url = new URL("http://www.reverbnation.com/audio_player/html_player_stream/"+password+"?client="+client+"&song_id="+song_id+"");
URLConnection urlConnection = url.openConnection();
String is_human = "is_human=true";
urlConnection.setRequestProperty("Cookie", is_human);
urlConnection.connect();
InputStream is = urlConnection.getInputStream();
OutputStream outstream = new FileOutputStream(new File(artist+ " - "+song+".mp3"));
String content_length= urlConnection.getHeaderField( "content-length" );
long fileSize = Long.valueOf(content_length).longValue();
long bytesRead = 0;
int percentage = -1;
byte[] buffer = new byte[4096];
int len;
while ((len = is.read(buffer)) > 0) {
outstream.write(buffer, 0, len);
bytesRead += len;
int n = (int)(100*bytesRead/fileSize);
percentage = n;
String n_perct = n+"% ";
System.out.print("\rDownloading track "+artist+" - "+song+" " +n_perct+"");
}
outstream.close();
System.out.println("");
System.out.println("Done");
} // end of main
} // end of class reverbnation