postData = new HashMap<>();
+
+ LOGGER.info("Retrieving " + this.url + " from offset " + offset);
+ postData.put("al", "1");
+ postData.put("offset", Integer.toString(offset));
+ postData.put("part", "1");
+ Document doc =
+ Http.url(this.url).referrer(this.url).ignoreContentType().data(postData).post();
+ String body = doc.toString();
+ if (!body.contains(" elements = doc.select("a");
+ Set photoIDsToGet = new HashSet<>();
+ for (Element a : elements) {
+ if (!a.attr("onclick").contains("showPhoto('")) {
+ continue;
+ }
+ String photoID = a.attr("onclick");
+ photoID = photoID.substring(photoID.indexOf("showPhoto('") + "showPhoto('".length());
+ photoID = photoID.substring(0, photoID.indexOf("'"));
+ if (!photoIDsToGet.contains(photoID)) {
+ photoIDsToGet.add(photoID);
+ }
+ }
+ for (String photoID : photoIDsToGet) {
+ if (!photoIDsToURLs.containsKey(photoID)) {
+ try {
+ photoIDsToURLs.putAll(getPhotoIDsToURLs(photoID));
+ } catch (IOException e) {
+ LOGGER.error("Exception while retrieving photo id " + photoID, e);
+ continue;
+ }
+ }
+ if (!photoIDsToURLs.containsKey(photoID)) {
+ LOGGER.error("Could not find URL for photo ID: " + photoID);
+ continue;
+ }
+ if (isStopped() || isThisATest()) {
+ break;
+ }
+ }
+
+ offset += elements.size();
+ // Slight hack to make this into effectively a JSON ripper
+ return new JSONObject(photoIDsToURLs);
+ }
}
diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VkRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VkRipperTest.java
index 22ccb641..327698bd 100644
--- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VkRipperTest.java
+++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VkRipperTest.java
@@ -4,6 +4,7 @@ import java.io.IOException;
import java.net.URL;
import com.rarchives.ripme.ripper.rippers.VkRipper;
+import org.json.JSONObject;
import org.junit.jupiter.api.Test;
public class VkRipperTest extends RippersTest {
@@ -17,11 +18,6 @@ public class VkRipperTest extends RippersTest {
// EXAMPLE: https://vk.com/album45506334_101886701 (a single album - custom)
@Test
public void testVkAlbumHttpRip() throws IOException {
- VkRipper ripper = new VkRipper(new URL("http://vk.com/album45506334_0"));
- testRipper(ripper);
- }
- @Test
- public void testVkAlbumHttpsRip() throws IOException {
VkRipper ripper = new VkRipper(new URL("https://vk.com/album45506334_0"));
testRipper(ripper);
}
@@ -30,4 +26,26 @@ public class VkRipperTest extends RippersTest {
VkRipper ripper = new VkRipper(new URL("https://vk.com/photos45506334"));
testRipper(ripper);
}
+
+ @Test
+ public void testFindJSONObjectContainingPhotoID() throws IOException {
+ VkRipper ripper = new VkRipper(new URL("http://vk.com/album45506334_0"));
+ String json =
+ "{\"payload\":[0,[\"album-45984105_268691406\",18,14,[{\"id\":\"-45984105_457345201\",\"base\":\"https://sun9-37.userapi.com/\",\"tagged\":[],\"likes\":0,\"shares\":0,\"o_src\":\"https://sun9-65.userapi.com/c857520/v857520962/10e24c/DPxygc3XW5E.jpg\",\"o_\":[\"https://sun9-65.userapi.com/c857520/v857520962/10e24c/DPxygc3XW5E\",130,98],\"z_src\":\"https://sun9-41.userapi.com/c857520/v857520962/10e24a/EsDDQA36qKI.jpg\",\"z_\":[\"https://sun9-41.userapi.com/c857520/v857520962/10e24a/EsDDQA36qKI\",1280,960],\"w_src\":\"https://sun9-60.userapi.com/c857520/v857520962/10e24b/6ETsA15rAdU.jpg\",\"w_\":[\"https://sun9-60.userapi.com/c857520/v857520962/10e24b/6ETsA15rAdU\",1405,1054]}]]],\"langVersion\":\"4298\"}";
+ String responseJson =
+ "{\"id\":\"-45984105_457345201\",\"base\":\"https://sun9-37.userapi.com/\",\"tagged\":[],\"likes\":0,\"shares\":0,\"o_src\":\"https://sun9-65.userapi.com/c857520/v857520962/10e24c/DPxygc3XW5E.jpg\",\"o_\":[\"https://sun9-65.userapi.com/c857520/v857520962/10e24c/DPxygc3XW5E\",130,98],\"z_src\":\"https://sun9-41.userapi.com/c857520/v857520962/10e24a/EsDDQA36qKI.jpg\",\"z_\":[\"https://sun9-41.userapi.com/c857520/v857520962/10e24a/EsDDQA36qKI\",1280,960],\"w_src\":\"https://sun9-60.userapi.com/c857520/v857520962/10e24b/6ETsA15rAdU.jpg\",\"w_\":[\"https://sun9-60.userapi.com/c857520/v857520962/10e24b/6ETsA15rAdU\",1405,1054]}";
+
+ assertTrue(
+ ripper.findJSONObjectContainingPhotoId("-45984105_457345201", new JSONObject(json))
+ .similar(new JSONObject(responseJson)));
+ }
+
+ @Test
+ public void testGetBestSourceUrl() throws IOException {
+ VkRipper ripper = new VkRipper(new URL("http://vk.com/album45506334_0"));
+ String json =
+ "{\"id\":\"-45984105_457345201\",\"base\":\"https://sun9-37.userapi.com/\",\"commcount\":0,\"date\":\"3 Dec at 1:14 am\",\"tagged\":[],\"attached_tags\":{\"max_tags_per_object\":5},\"o_src\":\"https://sun9-65.userapi.com/c857520/v857520962/10e24c/DPxygc3XW5E.jpg\",\"o_\":[\"https://sun9-65.userapi.com/c857520/v857520962/10e24c/DPxygc3XW5E\",130,98],\"y_src\":\"https://sun9-9.userapi.com/c857520/v857520962/10e249/dUDeuY10s0A.jpg\",\"y_\":[\"https://sun9-9.userapi.com/c857520/v857520962/10e249/dUDeuY10s0A\",807,605],\"z_src\":\"https://sun9-41.userapi.com/c857520/v857520962/10e24a/EsDDQA36qKI.jpg\",\"z_\":[\"https://sun9-41.userapi.com/c857520/v857520962/10e24a/EsDDQA36qKI\",1280,960]}";
+ assertEquals("https://sun9-41.userapi.com/c857520/v857520962/10e24a/EsDDQA36qKI.jpg",
+ ripper.getBestSourceUrl(new JSONObject(json)));
+ }
}