1.0.54 - Mediacru.sh ripper #8
This site requires encryption that isn't supported in older versions of Java. RipMe will detect if the version of Java isn't compatible and suggest downloading the latest version of Java from Oracle.
This commit is contained in:
parent
5dc0e25008
commit
574b03e45e
2
pom.xml
2
pom.xml
@ -4,7 +4,7 @@
|
||||
<groupId>com.rarchives.ripme</groupId>
|
||||
<artifactId>ripme</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.0.53</version>
|
||||
<version>1.0.54</version>
|
||||
<name>ripme</name>
|
||||
<url>http://rip.rarchives.com</url>
|
||||
<properties>
|
||||
|
@ -0,0 +1,178 @@
|
||||
package com.rarchives.ripme.ripper.rippers;
|
||||
|
||||
import java.awt.Desktop;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.security.InvalidAlgorithmParameterException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.jsoup.Jsoup;
|
||||
|
||||
import com.rarchives.ripme.ripper.AlbumRipper;
|
||||
import com.rarchives.ripme.ui.RipStatusMessage.STATUS;
|
||||
import com.rarchives.ripme.utils.Utils;
|
||||
|
||||
public class MediacrushRipper extends AlbumRipper {
|
||||
|
||||
private static final int TIMEOUT = 60000; // Long timeout for this poorly-optimized site.
|
||||
|
||||
private static final String DOMAIN = "mediacru.sh",
|
||||
HOST = "mediacrush";
|
||||
private static final Logger logger = Logger.getLogger(MediacrushRipper.class);
|
||||
|
||||
/** Ordered list of preferred formats, sorted by preference (low-to-high) */
|
||||
private static final Map<String, Integer> PREFERRED_FORMATS = new HashMap<String,Integer>();
|
||||
static {
|
||||
PREFERRED_FORMATS.put("mp4", 0);
|
||||
PREFERRED_FORMATS.put("wemb",1);
|
||||
PREFERRED_FORMATS.put("ogv", 2);
|
||||
PREFERRED_FORMATS.put("mp3", 3);
|
||||
PREFERRED_FORMATS.put("ogg", 4);
|
||||
PREFERRED_FORMATS.put("gif", 5);
|
||||
PREFERRED_FORMATS.put("png", 6);
|
||||
PREFERRED_FORMATS.put("jpg", 7);
|
||||
PREFERRED_FORMATS.put("jpeg",8);
|
||||
};
|
||||
|
||||
public MediacrushRipper(URL url) throws IOException {
|
||||
super(url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canRip(URL url) {
|
||||
return url.getHost().endsWith(DOMAIN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public URL sanitizeURL(URL url) throws MalformedURLException {
|
||||
String u = url.toExternalForm();
|
||||
// Strip trailing "/" characters
|
||||
while (u.endsWith("/")) {
|
||||
u = u.substring(0, u.length() - 1);
|
||||
}
|
||||
// Append .json
|
||||
if (!u.endsWith(".json")) {
|
||||
u += ".json";
|
||||
}
|
||||
return new URL(u);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rip() throws IOException {
|
||||
String url = this.url.toExternalForm();
|
||||
logger.info(" Retrieving " + url);
|
||||
sendUpdate(STATUS.LOADING_RESOURCE, url);
|
||||
String jsonString = null;
|
||||
try {
|
||||
jsonString = Jsoup.connect(url)
|
||||
.ignoreContentType(true)
|
||||
.userAgent(USER_AGENT)
|
||||
.timeout(TIMEOUT)
|
||||
.execute()
|
||||
.body();
|
||||
} catch (Exception re) {
|
||||
// Check for >1024 bit encryption but in older versions of Java
|
||||
if (re.getCause().getCause() instanceof InvalidAlgorithmParameterException) {
|
||||
// It's the bug. Suggest downloading the latest version.
|
||||
int selection = JOptionPane.showOptionDialog(null,
|
||||
"You need to upgrade to the latest Java (7+) to rip this album.\n"
|
||||
+ "Do you want to open java.com and download the latest version?",
|
||||
"RipMe - Java Error",
|
||||
JOptionPane.OK_CANCEL_OPTION,
|
||||
JOptionPane.ERROR_MESSAGE,
|
||||
null,
|
||||
new String[] {"Go to java.com", "Cancel"},
|
||||
0);
|
||||
sendUpdate(STATUS.RIP_ERRORED, "Your version of Java can't handle some secure websites");
|
||||
if (selection == 0) {
|
||||
URL javaUrl = new URL("https://www.java.com/en/download/");
|
||||
try {
|
||||
Desktop.getDesktop().browse(javaUrl.toURI());
|
||||
} catch (URISyntaxException use) { }
|
||||
}
|
||||
return;
|
||||
}
|
||||
throw new IOException("Unexpected error occurred", re);
|
||||
}
|
||||
|
||||
// Convert to JSON
|
||||
JSONObject json = new JSONObject(jsonString);
|
||||
if (!json.has("files")) {
|
||||
sendUpdate(STATUS.RIP_ERRORED, "No files found at " + url);
|
||||
throw new IOException("Could not find any files at " + url);
|
||||
}
|
||||
// Iterate over all files
|
||||
JSONArray files = json.getJSONArray("files");
|
||||
for (int i = 0; i < files.length(); i++) {
|
||||
JSONObject file = (JSONObject) files.get(i);
|
||||
// Find preferred file format
|
||||
JSONArray subfiles = file.getJSONArray("files");
|
||||
String preferredUrl = getPreferredUrl(subfiles);
|
||||
if (preferredUrl == null) {
|
||||
sendUpdate(STATUS.DOWNLOAD_ERRORED, "Could not find file inside of " + file);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Download
|
||||
String prefix = "";
|
||||
if (Utils.getConfigBoolean("download.save_order", true)) {
|
||||
prefix = String.format("%03d_", i + 1);
|
||||
}
|
||||
addURLToDownload(new URL(preferredUrl), prefix);
|
||||
}
|
||||
waitForThreads();
|
||||
}
|
||||
|
||||
/**
|
||||
* Iterates over list if "file" objects and returns the preferred
|
||||
* image format.
|
||||
* @param subfiles Array of "files" (JSONObjects) which contain
|
||||
* @return Preferred media format.
|
||||
*/
|
||||
private String getPreferredUrl(JSONArray subfiles) {
|
||||
String preferredUrl = null;
|
||||
int preferredIndex = Integer.MAX_VALUE;
|
||||
// Iterate over all media types
|
||||
for (int j = 0; j < subfiles.length(); j++) {
|
||||
JSONObject subfile = subfiles.getJSONObject(j);
|
||||
String thisurl = subfile.getString("url");
|
||||
String extension = thisurl.substring(thisurl.lastIndexOf(".") + 1);
|
||||
if (!PREFERRED_FORMATS.containsKey(extension)) {
|
||||
continue;
|
||||
}
|
||||
// Keep track of the most-preferred format
|
||||
int thisindex = PREFERRED_FORMATS.get(extension);
|
||||
if (preferredUrl == null || thisindex < preferredIndex) {
|
||||
preferredIndex = thisindex;
|
||||
preferredUrl = thisurl;
|
||||
}
|
||||
}
|
||||
return preferredUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHost() {
|
||||
return HOST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGID(URL url) throws MalformedURLException {
|
||||
Pattern p = Pattern.compile("https?://[wm.]*mediacru\\.sh/([a-zA-Z0-9]+).*");
|
||||
Matcher m = p.matcher(url.toExternalForm());
|
||||
if (m.matches()) {
|
||||
return m.group(1);
|
||||
}
|
||||
throw new MalformedURLException("Could not find mediacru.sh page ID from " + url
|
||||
+ " expected format: http://mediacru.sh/pageid");
|
||||
}
|
||||
}
|
@ -21,7 +21,7 @@ import com.rarchives.ripme.utils.Utils;
|
||||
public class UpdateUtils {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(UpdateUtils.class);
|
||||
private static final String DEFAULT_VERSION = "1.0.53";
|
||||
private static final String DEFAULT_VERSION = "1.0.54";
|
||||
private static final String updateJsonURL = "http://rarchives.com/ripme.json";
|
||||
private static final String updateJarURL = "http://rarchives.com/ripme.jar";
|
||||
private static final String mainFileName = "ripme.jar";
|
||||
|
Loading…
Reference in New Issue
Block a user