Permalink
Browse files

Remove guessit

  • Loading branch information...
1 parent f60d55e commit 80f536ee8a25587ef70841ad33fdd748d17d81bc @dz0ny committed Sep 16, 2017
Showing with 117 additions and 48 deletions.
  1. +0 −9 .travis.yml
  2. +1 −12 addon.xml
  3. +48 −10 resources/lib/api.py
  4. +1 −1 resources/lib/cache.py
  5. +67 −16 resources/lib/plugin.py
View
@@ -1,17 +1,8 @@
language: python
matrix:
include:
- - python: "2.6"
- - python: "2.7"
- python: "2.7.10"
- python: "2.7.11"
- allow_failures:
- - python: "3.2"
- - python: "3.3"
- - python: "3.4"
- - python: "3.5"
- - python: "nightly"
-
# command to install dependencies
install:
- pip install python-dateutil pytest
View
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="video.streamy" name="Streamy" version="0.0.5" provider-name="streamy">
+<addon id="video.streamy" name="Streamy" version="0.0.6" provider-name="streamy">
<requires>
<import addon="xbmc.python" version="2.25.0"/>
<import addon="script.module.routing"/>
@@ -13,18 +13,7 @@
<extension point="xbmc.addon.metadata">
<summary lang="en_GB">Plays videos from streamy</summary>
<description lang="en_GB"></description>
- <language></language>
<platform>all</platform>
<license>MIT</license>
- <forum></forum>
- <website></website>
- <email></email>
- <source></source>
- <news></news>
- <disclaimer></disclaimer>
- <assets>
- <icon>resources/icon.png</icon>
- <fanart>resources/fanart.jpg</fanart>
- </assets>
</extension>
</addon>
View
@@ -1,5 +1,8 @@
-import requests
import logging
+from collections import namedtuple
+
+import requests
+import re
from resources.lib import cache as cachetool
from trakt import Trakt
@@ -8,6 +11,7 @@
cache = cachetool.Cache()
logger = logging.getLogger(__name__)
+
class fetchapi(object):
BASE_URL = "https://movies-v2.api-fetch.website"
@@ -21,27 +25,27 @@ def __init__(self):
def get_movies(self):
data = []
- for x in range(1, 25):
+ for x in range(1, 50):
url = '{}/movies/{}?sort=trending'.format(self.BASE_URL, x)
res = cache.get(self, url)
if not res:
req = self.r.get(url)
req.raise_for_status()
res = req.json()
- cache.set(self, url, res)
+ cache.set(self, url, res, 48)
data.extend(res)
return data
def get_shows(self):
data = []
- for x in range(1, 25):
+ for x in range(1, 50):
url = '{}/shows/{}?sort=trending'.format(self.BASE_URL, x)
res = cache.get(self, url)
if not res:
req = self.r.get(url)
req.raise_for_status()
res = req.json()
- cache.set(self, url, res)
+ cache.set(self, url, res, 48)
data.extend(res)
return data
@@ -52,7 +56,7 @@ def get_show(self, id):
req = self.r.get(url)
req.raise_for_status()
res = req.json()
- cache.set(self, url, res)
+ cache.set(self, url, res, 48)
return res
def search(self, k):
@@ -62,7 +66,7 @@ def search(self, k):
req = self.r.get(url)
req.raise_for_status()
res = req.json()
- cache.set(self, url, res)
+ cache.set(self, url, res, 48)
return res
@@ -80,17 +84,15 @@ def __init__(self):
@property
def token(self):
- self.token_ = cache.get(self, 'token')
if not self.token_:
TOKEN_URL = self.BASE_URL + "?get_token=get_token"
req = self.r.get(TOKEN_URL)
req.raise_for_status()
self.token_ = req.json()["token"]
- cache.set(self, 'token', self.token_)
return self.token_
def category(self, c):
- url = "&sort=seeders&limit=100&category=" + c
+ url = '&category=' + c + "&format=json_extended&sort=seeders&limit=100"
url = self.BASE_URL + "?token=" + self.token + url
res = cache.get(self, url)
if not res:
@@ -111,6 +113,42 @@ def search(self, c):
cache.set(self, url, res)
return res
+ def sanitize(self, obj):
+ cached = dict(title=obj['title'], q='')
+ parts = re.split(r'[\W\-]+', obj['title'])
+ quas = ['720p', '1080p', 'hdrip', 'webrip', 'dvrip', 'web-dl']
+
+ for part in parts:
+ if part.encode('ascii').lower() in quas:
+ cached['q'] = part
+
+ if 'Movies' in obj['category']:
+ cached['type'] = 'movie'
+ title = []
+ for x in parts:
+ epinfo = re.match(r"(\d{4})", x)
+ if epinfo:
+ cached['year'] = int(epinfo.group(1))
+ break
+ else:
+ title.append(x)
+ cached['title'] = ' '.join(title)
+ if 'TV' in obj['category']:
+ cached['type'] = 'episode'
+ title = []
+ for x in parts:
+ epinfo = re.match(r"S(\d+)E(\d+)", x)
+ if epinfo:
+ cached['season'] = int(epinfo.group(1))
+ cached['episode'] = int(epinfo.group(2))
+ break
+ else:
+ title.append(x)
+ cached['title'] = ' '.join(title)
+
+ cached = namedtuple('rarbg', cached.keys())(**cached)
+ return cached
+
class traktAPI(object):
__client_id = "d4161a7a106424551add171e5470112e4afdaf2438e6ef2fe0548edc75924868"
View
@@ -10,7 +10,7 @@ def get(self, cls, key, default=None):
res = super(Cache, self).get(key)
return pickle.loads(res) if res else default
- def set(self, cls, key, val, exp=1):
+ def set(self, cls, key, val, exp=4):
key = '{}.{}'.format(cls.__class__, key)
val = pickle.dumps(val)
exp = datetime.timedelta(hours=exp)
View
@@ -12,9 +12,11 @@
import xbmc
import xbmcaddon
from resources.lib import kodilogging, kodiutils
-from resources.lib.api import torapi, fetchapi
+from resources.lib.api import fetchapi, torapi
from xbmcgui import ListItem
-from xbmcplugin import addDirectoryItem, endOfDirectory, setContent, addSortMethod, SORT_METHOD_UNSORTED, SORT_METHOD_DATE, SORT_METHOD_GENRE
+from xbmcplugin import (SORT_METHOD_DATE, SORT_METHOD_GENRE,
+ SORT_METHOD_UNSORTED, addDirectoryItem, addSortMethod,
+ endOfDirectory, setContent)
ADDON = xbmcaddon.Addon()
logger = logging.getLogger(ADDON.getAddonInfo('id'))
@@ -63,10 +65,10 @@ def popcorn_all():
@plugin.route('/rarbg_all')
def rarbg_all():
- directory(rarbgc, 'Movies', '17;44;45;50;')
- directory(rarbgc, 'TV', '18;41;49;')
- directory(rarbgc, 'Music', '23;24;25;26;')
- directory(rarbgc, 'XXX', '4;')
+ directory(rarbgc, 'Movies', '17;44;45;50')
+ directory(rarbgc, 'TV', '18;41;49')
+ directory(rarbgc, 'Music', '23;24;25;26')
+ directory(rarbgc, 'XXX', '4')
directory(rarbg_search, 'Search')
endOfDirectory(plugin.handle)
@@ -112,11 +114,11 @@ def show_torrents():
def show_torrent(ih=None):
if 'magnet' in plugin.args:
- req = requests.get(str_url('torrent/add'), params={
+ req = requests.get(str_url('torrents/add'), params={
'magnet': unquote(plugin.args['magnet'][0]),
})
else:
- req = requests.get(str_url('torrent/{}'.format(ih)))
+ req = requests.get(str_url('torrents/{}'.format(ih)))
req.raise_for_status()
data = req.json()
url = kodiutils.get_setting('server')
@@ -125,21 +127,43 @@ def show_torrent(ih=None):
addDirectoryItem(plugin.handle, "{}{}".format(
url, f['data']), ListItem('/'.join(f['Path'])))
else:
- addDirectoryItem(plugin.handle, "{}/torrent/{}/stream?file={}".format(
+ addDirectoryItem(plugin.handle, "{}/torrents/{}/stream?file={}".format(
url, data['ih'], data['name']), ListItem(data['name']))
endOfDirectory(plugin.handle)
-
@plugin.route('/rarbg/<c>')
def rarbgc(c):
try:
t = torapi()
for f in t.category(c):
+ name = t.sanitize(f)
+ if getattr(name, 'type', None):
+ if name.type == 'movie':
+ try:
+ name = '{0.year}: {0.title} {0.q}'.format(name)
+ except Exception:
+ name = str(name)
+ elif name.type == 'episode':
+ if getattr(name, 'date', None):
+ try:
+ name = '{0.title} {0.date} {0.q}'.format(name)
+ except Exception:
+ name = str(name)
+ else:
+ try:
+ name = '{0.title} S{0.season:02d}E{0.episode:02d} {0.q}'.format(
+ name)
+ except Exception:
+ name = str(name)
+ else:
+ name = f['title']
+ else:
+ name = f['title']
addDirectoryItem(
plugin.handle,
plugin.url_for(show_torrent, ih='add', magnet=f['download']),
- ListItem(f['filename']), True)
+ ListItem(str(name)), True)
endOfDirectory(plugin.handle)
except Exception as e:
kodiutils.notification("rarbg", str(e))
@@ -209,6 +233,18 @@ def popcorn_show(id):
endOfDirectory(plugin.handle)
+def to_yt(url):
+ if url and 'youtube' not in url:
+ return None
+ try:
+ url_data = urlparse(url)
+ query = parse_qs(url_data.query)
+ url = 'plugin://plugin.video.youtube/play/?video_id=' + query["v"][0]
+ return url
+ except Exception:
+ return None
+
+
@plugin.route('/pocorn_movies')
def pocorn_movies():
t = fetchapi()
@@ -225,21 +261,36 @@ def pocorn_movies():
})
except Exception:
pass
+ trailer = to_yt(f['trailer'])
li.setInfo(
'video',
dict(
plot=f['synopsis'],
plotoutline=f['synopsis'],
code=f['imdb_id'],
+ genre='/'.join(f['genres']),
imdbnumber=f['imdb_id'],
year=f['year'],
- trailer=f['trailer'],
+ duration=int(f['runtime']) * 60,
+ trailer=trailer,
)
)
-
- for k, v in f['torrents']['en'].iteritems():
- mag = v['url']
- break
+ try:
+ if f['trailer']:
+ li.addContextMenuItems([
+ ('Trailer', 'PlayMedia({})'.format(trailer.encode('ascii'))),
+ ])
+ except Exception:
+ pass
+ torrents = f['torrents']['en']
+
+ mag = torrents.get('1080p')
+ if not mag:
+ mag = torrents.get('720p')
+ else:
+ for k, v in torrents.iteritems():
+ mag = v['url']
+ break
addDirectoryItem(plugin.handle, plugin.url_for(
show_torrent, ih='add', magnet=mag), li, True)

0 comments on commit 80f536e

Please sign in to comment.