Merge pull request #2634 from dkboy/tv_bitsoup
Updated Bitsoup provider to include TV support
This commit is contained in:
@@ -2,39 +2,46 @@ from bs4 import BeautifulSoup
|
|||||||
from couchpotato.core.helpers.encoding import simplifyString, tryUrlencode
|
from couchpotato.core.helpers.encoding import simplifyString, tryUrlencode
|
||||||
from couchpotato.core.helpers.variable import tryInt
|
from couchpotato.core.helpers.variable import tryInt
|
||||||
from couchpotato.core.logger import CPLog
|
from couchpotato.core.logger import CPLog
|
||||||
|
from couchpotato.core.event import fireEvent
|
||||||
|
from couchpotato.core.providers.base import MultiProvider
|
||||||
|
from couchpotato.core.providers.info.base import EpisodeProvider, SeasonProvider, MovieProvider
|
||||||
from couchpotato.core.providers.torrent.base import TorrentProvider
|
from couchpotato.core.providers.torrent.base import TorrentProvider
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
log = CPLog(__name__)
|
log = CPLog(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Bitsoup(TorrentProvider):
|
class Bitsoup(MultiProvider):
|
||||||
|
|
||||||
|
def getTypes(self):
|
||||||
|
return [Movie, Season, Episode]
|
||||||
|
|
||||||
|
class Base(TorrentProvider):
|
||||||
|
|
||||||
urls = {
|
urls = {
|
||||||
'test': 'https://www.bitsoup.me/',
|
'test': 'https://www.bitsoup.me/',
|
||||||
'login' : 'https://www.bitsoup.me/takelogin.php',
|
'login' : 'https://www.bitsoup.me/takelogin.php',
|
||||||
'login_check': 'https://www.bitsoup.me/my.php',
|
'login_check': 'https://www.bitsoup.me/my.php',
|
||||||
'search': 'https://www.bitsoup.me/browse.php?',
|
'search': 'https://www.bitsoup.me/browse.php?%s',
|
||||||
'baseurl': 'https://www.bitsoup.me/%s',
|
'baseurl': 'https://www.bitsoup.me/%s',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
http_time_between_calls = 1 #seconds
|
http_time_between_calls = 1 #seconds
|
||||||
|
|
||||||
def _searchOnTitle(self, title, movie, quality, results):
|
def _search(self, media, quality, results):
|
||||||
|
|
||||||
q = '"%s" %s' % (simplifyString(title), movie['library']['year'])
|
|
||||||
arguments = tryUrlencode({
|
|
||||||
'search': q,
|
|
||||||
})
|
|
||||||
url = "%s&%s" % (self.urls['search'], arguments)
|
|
||||||
|
|
||||||
|
url = self.urls['search'] % self.buildUrl(media, quality)
|
||||||
data = self.getHTMLData(url, opener = self.login_opener)
|
data = self.getHTMLData(url, opener = self.login_opener)
|
||||||
|
|
||||||
if data:
|
if data:
|
||||||
html = BeautifulSoup(data)
|
html = BeautifulSoup(data, "html.parser")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result_table = html.find('table', attrs = {'class': 'koptekst'})
|
result_table = html.find('table', attrs = {'class': 'koptekst'})
|
||||||
|
if not result_table or 'nothing found!' in data.lower():
|
||||||
|
return
|
||||||
|
|
||||||
entries = result_table.find_all('tr')
|
entries = result_table.find_all('tr')
|
||||||
for result in entries[1:]:
|
for result in entries[1:]:
|
||||||
|
|
||||||
@@ -82,3 +89,58 @@ class Bitsoup(TorrentProvider):
|
|||||||
|
|
||||||
loginCheckSuccess = loginSuccess
|
loginCheckSuccess = loginSuccess
|
||||||
|
|
||||||
|
# Bitsoup Categories
|
||||||
|
# Movies
|
||||||
|
# Movies/3D - 17 (unused)
|
||||||
|
# Movies/DVD-R - 20
|
||||||
|
# Movies/Packs - 27 (unused)
|
||||||
|
# Movies/XviD - 19
|
||||||
|
# The site doesn't have HD Movie caterogies, they bundle HD under x264
|
||||||
|
# x264 - 41
|
||||||
|
# TV
|
||||||
|
# TV-HDx264 - 42
|
||||||
|
# TV-Packs - 45
|
||||||
|
# TV-SDx264 - 49
|
||||||
|
# TV-XVID - 7 (unused)
|
||||||
|
|
||||||
|
class Movie(MovieProvider, Base):
|
||||||
|
cat_ids = [
|
||||||
|
([41], ['720p', '1080p']),
|
||||||
|
([20], ['dvdr']),
|
||||||
|
([19], ['brrip', 'dvdrip']),
|
||||||
|
]
|
||||||
|
cat_backup_id = 0
|
||||||
|
|
||||||
|
def buildUrl(self, media, quality):
|
||||||
|
query = tryUrlencode({
|
||||||
|
'search': '"%s" %s' % (fireEvent('searcher.get_search_title',
|
||||||
|
media['library'], include_identifier = False, single = True),
|
||||||
|
media['library']['year']),
|
||||||
|
'cat': self.getCatId(quality['identifier'])[0],
|
||||||
|
})
|
||||||
|
return query
|
||||||
|
|
||||||
|
class Season(SeasonProvider, Base):
|
||||||
|
# For season bundles, bitsoup currently only has one category
|
||||||
|
def buildUrl(self, media, quality):
|
||||||
|
query = tryUrlencode({
|
||||||
|
'search': fireEvent('searcher.get_search_title', media['library'],
|
||||||
|
include_identifier = True, single = True),
|
||||||
|
'cat': 45 # TV-Packs Category
|
||||||
|
})
|
||||||
|
return query
|
||||||
|
|
||||||
|
class Episode(EpisodeProvider, Base):
|
||||||
|
cat_ids = [
|
||||||
|
([42], ['hdtv_720p', 'webdl_720p', 'webdl_1080p', 'bdrip_1080p', 'bdrip_720p', 'brrip_1080p', 'brrip_720p']),
|
||||||
|
([49], ['hdtv_sd', 'webdl_480p'])
|
||||||
|
]
|
||||||
|
cat_backup_id = 0
|
||||||
|
|
||||||
|
def buildUrl(self, media, quality):
|
||||||
|
query = tryUrlencode({
|
||||||
|
'search': fireEvent('searcher.get_search_title', media['library'],
|
||||||
|
include_identifier = True, single = True),
|
||||||
|
'cat': self.getCatId(quality['identifier'])[0],
|
||||||
|
})
|
||||||
|
return query
|
||||||
|
|||||||
Reference in New Issue
Block a user