Skip to content

Commit 9a782d0

Browse files
committed
Implement FapwizRipper
1 parent dad21cd commit 9a782d0

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package com.rarchives.ripme.ripper.rippers;
2+
3+
import java.io.IOException;
4+
import java.net.MalformedURLException;
5+
import java.net.URL;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.regex.Matcher;
9+
import java.util.regex.Pattern;
10+
11+
import org.jsoup.nodes.Document;
12+
import org.apache.logging.log4j.LogManager;
13+
import org.apache.logging.log4j.Logger;
14+
import org.jsoup.nodes.Element;
15+
import org.jsoup.select.Elements;
16+
17+
import com.rarchives.ripme.ripper.AbstractHTMLRipper;
18+
19+
public class FapwizRipper extends AbstractHTMLRipper {
20+
21+
private static final Logger logger = LogManager.getLogger(FapwizRipper.class);
22+
23+
private static final Pattern CATEGORY_PATTERN =
24+
Pattern.compile("https?://fapwiz.com/category/([a-zA-Z1-9_-]+)/?$");
25+
26+
private static final Pattern USER_PATTERN =
27+
Pattern.compile("https?://fapwiz.com/([a-zA-Z1-9_-]+)/?$");
28+
29+
private static final Pattern POST_PATTERN =
30+
Pattern.compile("https?://fapwiz.com/([a-zA-Z1-9_-]+)/([a-zA-Z1-9_-]+)/?$");
31+
32+
public FapwizRipper(URL url) throws IOException {
33+
super(url);
34+
}
35+
36+
@Override
37+
public String getHost() {
38+
return "fapwiz";
39+
}
40+
41+
@Override
42+
public String getDomain() {
43+
return "fapwiz.com";
44+
}
45+
46+
@Override
47+
public String getGID(URL url) throws MalformedURLException {
48+
Matcher m;
49+
50+
m = CATEGORY_PATTERN.matcher(url.toExternalForm());
51+
if (m.matches()) {
52+
return "category_" + m.group(1);
53+
}
54+
55+
m = USER_PATTERN.matcher(url.toExternalForm());
56+
if (m.matches()) {
57+
return "user_" + m.group(1);
58+
}
59+
60+
m = POST_PATTERN.matcher(url.toExternalForm());
61+
if (m.matches()) {
62+
return m.group(1) + "_" + m.group(2);
63+
}
64+
65+
throw new MalformedURLException("Expected fapwiz URL format: " +
66+
"fapwiz.com/NAME - got " + url + " instead");
67+
}
68+
69+
@Override
70+
public List<String> getURLsFromPage(Document doc) {
71+
List<String> result = new ArrayList<>();
72+
73+
Matcher m;
74+
75+
m = CATEGORY_PATTERN.matcher(url.toExternalForm());
76+
if (m.matches()) {
77+
// structure of user page - does it work for category pages too?
78+
doc.select(".post-items-holder img").forEach(e -> {
79+
String imgSrc = e.attr("src");
80+
// Replace -thumbnail.jpg with .mp4
81+
String videoSrc = imgSrc.replace("-thumbnail.jpg", ".mp4");
82+
result.add(videoSrc);
83+
});
84+
}
85+
86+
m = USER_PATTERN.matcher(url.toExternalForm());
87+
if (m.matches()) {
88+
// structure of user page
89+
doc.select(".post-items-holder img").forEach(e -> {
90+
String imgSrc = e.attr("src");
91+
// Replace -thumbnail.jpg with .mp4
92+
String videoSrc = imgSrc.replace("-thumbnail.jpg", ".mp4");
93+
result.add(videoSrc);
94+
});
95+
}
96+
97+
m = POST_PATTERN.matcher(url.toExternalForm());
98+
if (m.matches()) {
99+
doc.select("video source").forEach(video -> {
100+
result.add(video.attr("src"));
101+
});
102+
}
103+
104+
return result;
105+
}
106+
107+
@Override
108+
public void downloadURL(URL url, int index) {
109+
sleep(2000);
110+
addURLToDownload(url, getPrefix(index));
111+
}
112+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.rarchives.ripme.tst.ripper.rippers;
2+
3+
import java.io.IOException;
4+
import java.net.URI;
5+
import java.net.URISyntaxException;
6+
import java.net.URL;
7+
8+
import com.rarchives.ripme.ripper.rippers.FapwizRipper;
9+
import org.junit.jupiter.api.Assertions;
10+
import org.junit.jupiter.api.Tag;
11+
import org.junit.jupiter.api.Test;
12+
13+
public class FapwizRipperTest extends RippersTest {
14+
@Test
15+
@Tag("flaky")
16+
public void testRip() throws IOException, URISyntaxException {
17+
FapwizRipper ripper = new FapwizRipper(new URI("https://Fapwiz.com/blowjob-bunny-puts-on-a-show/").toURL());
18+
testRipper(ripper);
19+
}
20+
21+
@Test
22+
public void testGetGID() throws IOException, URISyntaxException {
23+
URL url = new URI("https://Fapwiz.com/blowjob-bunny-puts-on-a-show/").toURL();
24+
FapwizRipper ripper = new FapwizRipper(url);
25+
Assertions.assertEquals("blowjob-bunny-puts-on-a-show", ripper.getGID(url));
26+
}
27+
}

0 commit comments

Comments
 (0)