1 package net.pterodactylus.rhynodge.filters.torrents;
4 import java.util.concurrent.atomic.AtomicBoolean;
5 import java.util.stream.Collectors;
7 import net.pterodactylus.rhynodge.filters.TorrentSiteFilter;
9 import org.jsoup.nodes.Document;
10 import org.jsoup.nodes.Element;
11 import org.jsoup.nodes.Node;
12 import org.jsoup.parser.Tag;
13 import org.jsoup.select.Elements;
16 * {@link TorrentSiteFilter} implementation that can parse TorrentHound
19 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
21 public class TorrentHoundFilter extends TorrentSiteFilter {
24 protected Elements getDataRows(Document document) {
25 return document.select("table.searchtable:gt(0) tr:gt(0)");
29 protected String extractName(Element dataRow) {
30 return dataRow.select("td > a").stream().map(element -> {
31 AtomicBoolean foundBr = new AtomicBoolean(false);
32 List<Node> nodes = element.childNodes().stream().filter(textNode -> {
33 if (textNode.nodeName().equals("br")) {
36 return !foundBr.get();
37 }).collect(Collectors.toList());
38 Element e = new Element(Tag.valueOf("span"), "");
39 nodes.stream().forEach(node -> e.appendChild(node));
45 protected String extractSize(Element dataRow) {
46 return dataRow.select("span.size").text();
50 protected String extractMagnetUri(Element dataRow) {
51 return dataRow.select("div.sfloat a[title=Magnet download]").attr("href");
55 protected String extractDownloadUri(Element dataRow) {
56 return dataRow.select("div.sfloat a[title=.torrent download]").attr("href");
60 protected int extractFileCount(Element dataRow) {
65 protected int extractSeedCount(Element dataRow) {
66 return Integer.valueOf(dataRow.select("span.seeds").text().replaceAll("[^0-9]", ""));
70 protected int extractLeechCount(Element dataRow) {
71 return Integer.valueOf(dataRow.select("span.leeches").text().replaceAll("[^0-9]", ""));