Merge pull request #344 from JoshKastang/issue-343

NEW: Ability to load a list of URLs via commanline (-f flag)
This commit is contained in:
metaprime 2016-12-19 00:51:53 -08:00 committed by GitHub
commit 942f1645a9

View File

@ -3,6 +3,10 @@ package com.rarchives.ripme;
import java.io.File; import java.io.File;
import java.io.FilenameFilter; import java.io.FilenameFilter;
import java.io.IOException; import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.Arrays; import java.util.Arrays;
@ -138,26 +142,54 @@ public class App {
// change the default rips directory // change the default rips directory
Utils.setConfigString("rips.directory", cl.getOptionValue('l')); Utils.setConfigString("rips.directory", cl.getOptionValue('l'));
} }
if (cl.hasOption('u')) {
// User provided URL, rip it. if (cl.hasOption('f')) {
String filename = cl.getOptionValue('f');
try { try {
URL url = new URL(cl.getOptionValue('u').trim());
rip(url); String url;
List<String> history = Utils.getConfigList("download.history");
if (!history.contains(url.toExternalForm())) { BufferedReader br = new BufferedReader(new FileReader(filename));
history.add(url.toExternalForm()); while((url = br.readLine()) != null) {
Utils.setConfigList("download.history", Arrays.asList(history.toArray())); // loop through each url in the file and proces each url individually.
if(!cl.hasOption("n")) { ripURL(url.trim(), cl.hasOption("n"));
Utils.saveConfig();
}
} }
} catch (MalformedURLException e) {
logger.error("[!] Given URL is not valid. Expected URL format is http://domain.com/..."); } catch (FileNotFoundException fne) {
System.exit(-1); logger.error("[!] File containing list of URLs not found. Cannot continue.");
} catch (Exception e) { } catch (IOException ioe) {
logger.error("[!] Error while ripping URL " + cl.getOptionValue('u'), e); logger.error("[!] Failed reading file containing list of URLs. Cannot continue.");
System.exit(-1);
} }
}
if (cl.hasOption('u')) {
String url = cl.getOptionValue('u').trim();
ripURL(url, cl.hasOption("n"));
}
}
// this function will attempt to rip the provided url
public static void ripURL(String targetURL, boolean saveConfig) {
try {
URL url = new URL(targetURL);
rip(url);
List<String> history = Utils.getConfigList("download.history");
if (!history.contains(url.toExternalForm())) {
history.add(url.toExternalForm());
Utils.setConfigList("download.history", Arrays.asList(history.toArray()));
if(saveConfig) {
Utils.saveConfig();
}
}
} catch (MalformedURLException e) {
logger.error("[!] Given URL is not valid. Expected URL format is http://domain.com/...");
// System.exit(-1);
} catch (Exception e) {
logger.error("[!] Error while ripping URL " + targetURL, e);
// System.exit(-1);
} }
} }
@ -174,6 +206,7 @@ public class App {
opts.addOption("4", "skip404", false, "Don't retry after a 404 (not found) error"); opts.addOption("4", "skip404", false, "Don't retry after a 404 (not found) error");
opts.addOption("l", "ripsdirectory", true, "Rips Directory (Default: ./rips)"); opts.addOption("l", "ripsdirectory", true, "Rips Directory (Default: ./rips)");
opts.addOption("n", "no-prop-file", false, "Do not create properties file."); opts.addOption("n", "no-prop-file", false, "Do not create properties file.");
opts.addOption("f", "urls-file", true, "Rip URLs from a file.");
return opts; return opts;
} }