Skip to content

Commit

Permalink
Added Lime Torrent ✌️ and Proxy for pirate bay ⚠️
Browse files Browse the repository at this point in the history
  • Loading branch information
BalajiDany committed Jan 2, 2021
1 parent f953397 commit e38f6ca
Show file tree
Hide file tree
Showing 13 changed files with 498 additions and 38 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.project.eniac.config.engine;

import com.project.eniac.engine.impl.kickass.KickassTorrentSearchEngine;
import com.project.eniac.engine.impl.limetorrent.LimeTorrentSearchEngine;
import com.project.eniac.engine.impl.piratebay.PirateBay10TorrentSearchEngine;
import com.project.eniac.engine.impl.piratebay.PirateBayTorrentSearchEngine;
import com.project.eniac.engine.spec.TorrentSearchEngine;
import com.project.eniac.service.spec.HttpClientProviderService;
Expand All @@ -15,7 +17,7 @@ public class TorrentSearchEngineConfiguration {
@Bean
@ConditionalOnProperty(value = "project.eniac.engine.torrent.piratebay.enable", havingValue = "true", matchIfMissing = true)
TorrentSearchEngine piratebayTorrentSearchEngine(HttpClientProviderService httpClientService) {
return new PirateBayTorrentSearchEngine(httpClientService);
return new PirateBay10TorrentSearchEngine(httpClientService);
}

@Bean
Expand All @@ -24,4 +26,10 @@ TorrentSearchEngine kickassTorrentSearchEngine(HttpClientProviderService httpCli
return new KickassTorrentSearchEngine(httpClientService);
}

@Bean
@ConditionalOnProperty(value = "project.eniac.engine.torrent.limetorrent.enable", havingValue = "true", matchIfMissing = true)
TorrentSearchEngine LimeTorrentSearchEngine(HttpClientProviderService httpClientProviderService) {
return new LimeTorrentSearchEngine(httpClientProviderService);
}

}
20 changes: 14 additions & 6 deletions src/main/java/com/project/eniac/engine/EngineConstant.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,9 @@

public class EngineConstant {

// General
public static final String ENGINE_GOOGLE = "Google";

public static final String ENGINE_GOOGLE_VIDEO = "Youtube";

public static final String ENGINE_PIRATEBAY = "Pirate Bay";

public static final String ENGINE_KICKASS = "Kickass";

public static final String ENGINE_BING = "Bing";

public static final String ENGINE_BING_PARACHUTE = "Bing Parachute";
Expand All @@ -18,6 +13,19 @@ public class EngineConstant {

public static final String ENGINE_DUCK_DUCK_GO = "Duck Duck Go";

// Code
public static final String ENGINE_STACK_OVERFLOW = "Stack Overflow";

// Torrent
public static final String ENGINE_PIRATEBAY = "Pirate Bay";

public static final String ENGINE_PIRATEBAY_PROXY = "Pirate Bay Proxy";

public static final String ENGINE_KICKASS = "Kickass";

public static final String ENGINE_LIME_TORRENT = "Lime torrent";

// Video
public static final String ENGINE_GOOGLE_VIDEO = "Youtube";

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.project.eniac.engine.impl.duckduckgo;

import ch.qos.logback.core.CoreConstants;
import com.project.eniac.constant.RequestHeaders;
import com.project.eniac.engine.EngineConstant;
import com.project.eniac.engine.impl.duckduckgo.utils.DuckDuckGoRequestUtil;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ public SearchResultEntity<VideoSearchResultEntity> getResponse(String response)
}

private String extractThumbnailUrl(String url) {
if (StringUtils.isBlank(url)) return url;
if (StringUtils.isBlank(url)) return url;
String videoId = this.getYoutubeId(url);

if (StringUtils.isBlank(videoId)) return url;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public class KickassTorrentSearchEngine extends TorrentSearchEngine {

private final HttpClientProviderService httpClientProviderService;

private static final String BASE_URL = "https://kickass.onl/";
private static final String BASE_URL = "https://kickass.onl";

@Override
public String getEngineName() {
Expand All @@ -48,7 +48,7 @@ public HttpClientProviderService getHttpClientService() {
@Override
public HttpUriRequest getRequest(SearchRequestEntity searchEntity) {
String url = new StringBuilder(BASE_URL)
.append("usearch/")
.append("/usearch/")
.append(ConversionUtil.encodeURL(searchEntity.getQuery()))
.append("/").toString();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
/*
* Copyright 2021
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.project.eniac.engine.impl.limetorrent;

import com.project.eniac.constant.RequestHeaders;
import com.project.eniac.engine.EngineConstant;
import com.project.eniac.engine.spec.TorrentSearchEngine;
import com.project.eniac.entity.EngineResultEntity.SearchResultEntity;
import com.project.eniac.entity.EngineResultEntity.TorrentSearchResultEntity;
import com.project.eniac.entity.SearchRequestEntity;
import com.project.eniac.service.spec.HttpClientProviderService;
import com.project.eniac.types.EngineResultType;
import com.project.eniac.utils.ConversionUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.utils.URIBuilder;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

@Slf4j
@RequiredArgsConstructor
public class LimeTorrentSearchEngine extends TorrentSearchEngine {

private final HttpClientProviderService httpClientProviderService;

private static final String BASE_URL = "https://limetorrents.unblockninja.com/";

@Override
public String getEngineName() {
return EngineConstant.ENGINE_LIME_TORRENT;
}

@Override
public HttpClientProviderService getHttpClientService() {
return this.httpClientProviderService;
}

@Override
public HttpUriRequest getRequest(SearchRequestEntity searchEntity) {
String url = new StringBuilder(BASE_URL)
.append("search/all/")
.append(ConversionUtil.encodeURL(searchEntity.getQuery()))
.append("/seeds/1/").toString();
try {

URI uri = new URIBuilder(url).build();

HttpGet request = new HttpGet(uri);
request.addHeader(RequestHeaders.KEY_ACCEPT_LANGUAGE, RequestHeaders.VALUE_ACCEPT_LANGUAGE);
request.addHeader(RequestHeaders.KEY_ACCEPT, RequestHeaders.VALUE_ACCEPT_HTML);

return request;
} catch (URISyntaxException exception) {
log.error("Exception on Creating URL : {}", url);
return null;
}
}

@Override
public SearchResultEntity<TorrentSearchResultEntity> getResponse(String response) {
List<TorrentSearchResultEntity> searchResultEntity = new ArrayList<>();

Document document = Jsoup.parse(response);
Elements elements = document.select("table.table2 > tbody > tr"); // Select all results

for (Element element : elements) {
if (!element.hasAttr("bgcolor")) continue;

TorrentSearchResultEntity torrentSearchResultEntity = this.extractEntity(element);
if (ObjectUtils.isNotEmpty(torrentSearchResultEntity)) searchResultEntity.add(torrentSearchResultEntity);
}

SearchResultEntity.SearchResultEntityBuilder<TorrentSearchResultEntity> resultEntityBuilder = SearchResultEntity
.<TorrentSearchResultEntity>builder()
.engineName(this.getEngineName())
.engineType(this.getEngineType());

// Result Delivery
if (searchResultEntity.size() > 0) {
return resultEntityBuilder
.searchResults(searchResultEntity)
.engineResultType(EngineResultType.FOUND_SEARCH_RESULT)
.build();
} else if (elements.isEmpty()) {
return resultEntityBuilder
.engineResultType(EngineResultType.NO_SEARCH_RESULT)
.build();
} else {
return resultEntityBuilder
.engineResultType(EngineResultType.ENGINE_BREAK_DOWN)
.build();
}
}

private TorrentSearchResultEntity extractEntity(Element element) {
if (ObjectUtils.isEmpty(element)) return null;
TorrentSearchResultEntity.TorrentSearchResultEntityBuilder searchResultEntity = TorrentSearchResultEntity.builder();

Element seederElement = element.selectFirst("td.tdseed");
Element leechElement = element.selectFirst("td.tdleech");
Elements anchorElements = element.select("div.tt-name > a");
Elements dateTypeAndSizeElements = element.select("td.tdnormal");

if (ObjectUtils.anyNull(seederElement, leechElement)) return null;
if (ObjectUtils.anyNull(anchorElements, dateTypeAndSizeElements)) return null;

String seedCount = seederElement.text().replace(",", "");
searchResultEntity.seeders(ConversionUtil.parseInt(seedCount));

String leechCount = leechElement.text().replace(",", "");
searchResultEntity.leechers(ConversionUtil.parseInt(leechCount));

for (Element anchorElement : anchorElements) {
if (anchorElement.hasClass("csprite_dl14")) {
String url = anchorElement.attr("href");
String magneticLink = this.extractMagneticLink(url);
searchResultEntity.torrentUrl(url);
searchResultEntity.magneticLink(magneticLink);
} else {
searchResultEntity.torrentName(anchorElement.text());
}
}

for (Element dateTypeAndSizeElement : dateTypeAndSizeElements) {
String content = dateTypeAndSizeElement.text();
String[] splittedContent = content.split(" - in ");
if (splittedContent.length > 1) {
searchResultEntity.uploadedDate(splittedContent[0]);
searchResultEntity.category(splittedContent[1]);
} else {
searchResultEntity.torrentSize(content);
}
}

return searchResultEntity.build();
}

private String extractMagneticLink(String url) {
if (StringUtils.isBlank(url)) return null;

String domainRemoved = url.replace("http://itorrents.org/torrent/", "");
String[] splittedUrl = domainRemoved.split(".torrent");

if (ObjectUtils.isEmpty(splittedUrl)) return null;
return new StringBuilder("magnet:?xt=urn:btih:")
.append(splittedUrl[0])
.toString();
}

}
Loading

0 comments on commit e38f6ca

Please sign in to comment.