Example #1
0
 def action(self, data):
     if self.scid is None:
         return
     url = "%s/Stats" % (sctop.BASE_URL)
     data.update({'est': self.estimateFinishTime})
     data.update({'se': self.se, 'ep': self.ep})
     try:
         if self.itemDuration > 0:
             data.update({'dur': self.itemDuration})
     except Exception:
         pass
     self.log("[SC] action: %s" % str(data))
     util.post_json(url, data, {'X-UID': sctop.uid})
Example #2
0
def resolve(url):
    m = _regex(url)
    if m:
        util.init_urllib()
        data = util.request(url)
        if data.find('Toto video neexistuje') > 0:
            util.error('Video bylo smazano ze serveru')
            return
        player = 'http://www.streamuj.tv/new-flash-player/mplugin4.swf'
        headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0',
                    'Referer':'http://www.streamuj.tv/mediaplayer/player.swf',
                    'Cookie':','.join("%s=%s"%(c.name, c.value) for c in util._cookie_jar)}
        burl = b64decode('aHR0cDovL2Z1LWNlY2gucmhjbG91ZC5jb20vcGF1dGg=')
        key = util.request('http://www.streamuj.tv/_key.php?auth=3C27f5wk6qB3g7nZ5SDYf7P7k1572rFH1QxV0QQ')
        index = 0
        result = []
        qualities = re.search('rn\:[^\"]*\"([^\"]*)',data,re.IGNORECASE|re.DOTALL)
        langs = re.search('langs\:[^\"]*\"([^\"]+)',data,re.IGNORECASE|re.DOTALL)
        languages = []
        if not langs:
            languages = [''] # pretend there is at least language so we read 1st stream info
        else:
            languages = langs.group(1).split(',')
        for lang in languages:
            streams = re.search('res'+str(index)+'\:[^\"]*\"([^\"]+)',data,re.IGNORECASE|re.DOTALL)
            subs = re.search('sub'+str(index)+'\:[^\"]*\"([^\"]+)',data,re.IGNORECASE|re.DOTALL)
            if subs: 
                subs = re.search('[^>]+>([^$]+)',subs.group(1),re.IGNORECASE|re.DOTALL)
            if streams and qualities:
                streams = streams.group(1).split(',')
                rn = qualities.group(1).split(',')
                qindex = 0
                for stream in streams:
                    res = json.loads(util.post_json(burl,{'link':stream,'player':player,'key':key}))
                    stream = res['link']
                    q = rn[qindex]
                    if q == 'HD':
                        q = '720p'
                    else:
                        q = 'SD'
                    l = ' '+lang
                    if subs:
                        l += ' + subs'
                        s = subs.group(1)
                        s = json.loads(util.post_json(burl,{'link':s,'player':player, 'key':key}))
                        result.append({'url':stream,'quality':q,'subs':s['link'],'headers':headers,'lang':l})
                    else:
                        result.append({'url':stream,'quality':q,'headers':headers, 'lang':l})
                    qindex+=1
            index+=1
        return result
Example #3
0
    def sendStats(self, item, action, baseUrl, apiVer, deviceId):
        #send data to server about watching movie
        #sclog.logDebug('Stats start...')
        udata = self.userData()
        urlStats = baseUrl + '/Stats?ver='+apiVer+'&uid='+deviceId
        
        dur = float(item['duration'])
        brate = int(item['bitrate'])
        ep = ''
        se = ''
        if 'episode' in item:
            ep = str(item['episode'])
        if 'season' in item:
            se = str(item['season'])
        now = datetime.datetime.now()
        endIn = now + datetime.timedelta(seconds=int(dur))
        endStr = endIn.strftime('%H:%M:%S')

        data = { 'vip':udata.isVip, 'vd': udata.vipDaysLeft, 'est':endStr, 'scid':str(item['id']), 
                 'action': action, 'ws':udata.userId, 'dur':dur, 'bitrate':brate,
                 'ep':ep, 'se':se }
            
        #sclog.logDebug('data=%'%data)

        headers = {'Content-Type':'application/json', 'X-Uid':deviceId}
        response = util.post_json(urlStats, data, headers)

        sclog.logDebug('Stats(%s)=%s'%(item['id'], response))

        return udata
Example #4
0
    def mark_as_watched(self, item):
        mediatype= self.getItemType(item)
        postdata = {}
        if mediatype==1:
            postdata = {"movies": [{"ids": self.getTraktIds(item)}]}
        if mediatype==2:
            postdata = {'shows':[{'ids':self.getTraktIds(item)}]}
        if mediatype==3:
            postdata = {'shows':[{'seasons':[{'number':int('%s'%item['season'])}], 'ids':self.getTraktIds(item)}]}
        if mediatype==4:
            postdata = {'shows':[{'seasons':[{'episodes':[{'number':int('%s'%item['episode'])}], 'number':int('%s'%item['season'])}], 'ids':self.getTraktIds(item)}]}

        self.log.logDebug("mark_as_watched postdata=%s"%postdata)
            
        data = json.loads(util.post_json(self.API+'/sync/history', data=postdata, headers={'Content-Type':'application/json', 'Authorization':'Bearer %s'%self.TOKEN, 'trakt-api-version':self.API_VERSION, 'trakt-api-key':self.CLIENT_ID}))
        self.log.logDebug("mark_as_watched response:\n%s"%data)
        if mediatype==1:
            if int(data['added']['movies'])!=1:
                raise Exception('Movie item not mark as watched.')
        if mediatype==2 or mediatype==3:
            if int(data['added']['episodes'])<1:
                raise Exception('TvShow (season) not mark as watched.')
        if mediatype==4:
            if int(data['added']['episodes'])!=1:
                raise Exception('TvShow episode not mark as watched.')
Example #5
0
    def remove_from_watchlist(self, item):
        mediatype = self.getItemType(item)
        postdata = {}
        if mediatype == 1:
            postdata = {"movies": [{"ids": self.getTraktIds(item)}]}
        # to watchlist can be added only whole tvseason
        if mediatype == 2 or mediatype == 3 or mediatype == 4:
            postdata = {'shows': [{'ids': self.getTraktIds(item)}]}

        data = json.loads(
            util.post_json(self.API + '/sync/watchlist/remove',
                           data=postdata,
                           headers={
                               'Content-Type': 'application/json',
                               'Authorization': 'Bearer %s' % self.TOKEN,
                               'trakt-api-version': self.API_VERSION,
                               'trakt-api-key': self.CLIENT_ID
                           }))
        self.log.logDebug("remove_from_watchlist response:\n%s" % data)
        if mediatype == 1:
            if int(data['deleted']['movies']) != 1:
                raise Exception('Movie item not removed from watchlist.')
        if mediatype == 2 or mediatype == 3 or mediatype == 4:
            if int(data['deleted']['shows']) != 1:
                raise Exception('TvShow item not removed from watchlist.')
Example #6
0
    def get_token(self, code):
        try:
            data = json.loads(
                util.post_json(self.API_AUTH + '/token',
                               data={
                                   'code': code,
                                   'client_id': self.CLIENT_ID,
                                   'client_secret': self.CLIENT_SECRET
                               },
                               headers={'Content-Type': 'application/json'}))
            self.TOKEN = data['access_token']
            self.REFRESH_TOKEN = data['refresh_token']

            expire = data['expires_in']  #seconds
            created = data['created_at']

            self.EXPIRE = expire + created

            self.log.logDebug("Get token return token=%s, rtoken=%s, exp=%s" %
                              (self.TOKEN, self.REFRESH_TOKEN, self.EXPIRE))

            #update settings
            self.writeSetting('trakt_token', '%s' % self.TOKEN)
            self.writeSetting('trakt_refresh_token', '%s' % self.REFRESH_TOKEN)
            self.writeSetting('trakt_token_expire', '%s' % self.EXPIRE)

        except urllib2.HTTPError as err:
            return None
        return self.TOKEN
Example #7
0
    def refresh_token(self,
                      redirect_uri='urn:ietf:wg:oauth:2.0:oob',
                      grant_type='refresh_token'):
        data = json.loads(
            util.post_json(self.API + '/oauth/token',
                           data={
                               'refresh_token': self.REFRESH_TOKEN,
                               'client_id': self.CLIENT_ID,
                               'client_secret': self.CLIENT_SECRET,
                               'redirect_uri': redirect_uri,
                               'grant_type': grant_type
                           },
                           headers={'Content-Type': 'application/json'}))
        self.TOKEN = data['access_token']
        self.REFRESH_TOKEN = data['refresh_token']

        expire = data['expires_in']  #seconds
        created = data['created_at']

        self.EXPIRE = expire + created

        #update settings
        self.writeSetting('trakt_token', '%s' % self.TOKEN)
        self.writeSetting('trakt_refresh_token', '%s' % self.TOKEN)
        self.writeSetting('trakt_token_expire', '%s' % self.EXPIRE)
Example #8
0
 def list(self, url):
     if url.find("#fm#") == 0:
         return self.list_folder(url[5:])
     url = self._url(url)
     page = util.request(
         url, headers={"X-Requested-With": "XMLHttpRequest", "Referer": url, "Cookie": "uloz-to-id=1561277170;"}
     )
     script = util.substr(page, "var kn", "</script>")
     keymap = None
     key = None
     k = re.search('{([^\;]+)"', script, re.IGNORECASE | re.DOTALL)
     if k:
         keymap = json.loads("{" + k.group(1) + '"}')
     j = re.search('kapp\(kn\["([^"]+)"', script, re.IGNORECASE | re.DOTALL)
     if j:
         key = j.group(1)
     if not (j and k):
         self.error("error parsing page - unable to locate keys")
         return []
     burl = b64decode("I2h0dHA6Ly9kZWNyLWNlY2gucmhjbG91ZC5jb20vZGVjcnlwdC8/a2V5PSVzJnZhbHVlPSVz")
     murl = b64decode("aHR0cDovL2RlY3ItY2VjaC5yaGNsb3VkLmNvbS9kZWNyeXB0Lw==")
     data = util.substr(page, '<ul class="chessFiles', "</ul>")
     result = []
     req = {"seed": keymap[key], "values": keymap}
     decr = json.loads(util.post_json(murl, req))
     for li in re.finditer('<li data-icon="(?P<key>[^"]+)', data, re.IGNORECASE | re.DOTALL):
         body = urllib.unquote(b64decode(decr[li.group("key")]))
         m = re.search(
             '<li>.+?<div data-icon="(?P<key>[^"]+)[^<]+<img(.+?)src="(?P<logo>[^"]+)(.+?)<div class="fileInfo(?P<info>.+?)</h4>',
             body,
             re.IGNORECASE | re.DOTALL,
         )
         if not m:
             continue
         value = keymap[m.group("key")]
         info = m.group("info")
         iurl = burl % (keymap[key], value)
         item = self.video_item()
         item["title"] = ".. title not found.."
         title = re.search('<div class="fileName.+?<a[^>]+>(?P<title>[^<]+)', info, re.IGNORECASE | re.DOTALL)
         if title:
             item["title"] = title.group("title")
         size = re.search('<span class="fileSize[^>]+>(?P<size>[^<]+)', info, re.IGNORECASE | re.DOTALL)
         if size:
             item["size"] = size.group("size").strip()
         time = re.search('<span class="fileTime[^>]+>(?P<time>[^<]+)', info, re.IGNORECASE | re.DOTALL)
         if time:
             item["length"] = time.group("time")
         item["url"] = iurl
         item["img"] = m.group("logo")
         self._filter(result, item)
     # page navigation
     data = util.substr(page, '<div class="paginator', "</div")
     mnext = re.search('<a href="(?P<url>[^"]+)" class="next', data)
     if mnext:
         item = self.dir_item()
         item["type"] = "next"
         item["url"] = mnext.group("url")
         result.append(item)
     return result
Example #9
0
    def sendStats(self, item, action, baseUrl, apiVer, deviceId):
        #send data to server about watching movie
        #sclog.logDebug('Stats start...')
        udata = self.userData()
        urlStats = baseUrl + '/Stats?ver='+apiVer+'&uid='+deviceId
        
        dur = float(item['duration'])
        brate = int(item['bitrate'])
        ep = ''
        se = ''
        if 'episode' in item:
            ep = str(item['episode'])
        if 'season' in item:
            se = str(item['season'])
        now = datetime.datetime.now()
        endIn = now + datetime.timedelta(seconds=int(dur))
        endStr = endIn.strftime('%H:%M:%S')

        data = { 'vip':udata.isVip, 'vd': udata.vipDaysLeft, 'est':endStr, 'scid':str(item['id']), 
                 'action': action, 'ws':udata.userId, 'dur':dur, 'bitrate':brate,
                 'ep':ep, 'se':se }
            
        #sclog.logDebug('data=%'%data)

        headers = {'Content-Type':'application/json', 'X-Uid':deviceId}
        response = util.post_json(urlStats, data, headers)

        sclog.logDebug('Stats(%s)=%s'%(item['id'], response))

        return udata
Example #10
0
    def refresh_token(self,
                      redirect_uri='urn:ietf:wg:oauth:2.0:oob',
                      grant_type='refresh_token'):
        try:
            data = json.loads(
                util.post_json(self.API + '/oauth/token',
                               data={
                                   'refresh_token': self.REFRESH_TOKEN,
                                   'client_id': self.CLIENT_ID,
                                   'client_secret': self.CLIENT_SECRET,
                                   'redirect_uri': redirect_uri,
                                   'grant_type': grant_type
                               },
                               headers={'Content-Type': 'application/json'}))
            self.TOKEN = data['access_token']
            self.REFRESH_TOKEN = data['refresh_token']

            expire = data['expires_in']  #seconds
            created = data['created_at']

            self.EXPIRE = expire + created

            #update settings
            self.writeSetting('trakt_token', '%s' % self.TOKEN)
            self.writeSetting('trakt_refresh_token', '%s' % self.REFRESH_TOKEN)
            self.writeSetting('trakt_token_expire', '%s' % self.EXPIRE)
        except urllib2.HTTPError as err:
            if err.code == 401:
                raise TraktRefreshException(
                    'Refresh trakt access token failed (reset settings).')
            raise err
        except:
            raise
def resolve(url):
    m = _regex(url)
    if m:
        data = util.request(url)
        if data.find('Toto video neexistuje') > 0:
            util.error('Video bylo smazano ze serveru')
            return
        player = 'http://www.streamuj.tv/new-flash-player/mplugin4.swf'
        headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0',
                    'Referer':'http://www.streamuj.tv/mediaplayer/player.swf'}
        burl = b64decode('aHR0cDovL2Z1LWNlY2gucmhjbG91ZC5jb20vcGF1dGg=')
        key = util.request('http://www.streamuj.tv/_key.php?auth=3C27f5wk6qB3g7nZ5SDYf7P7k1572rFH1QxV0QQ')
        index = 0
        result = []
        qualities = re.search('rn\:[^\"]*\"([^\"]*)',data,re.IGNORECASE|re.DOTALL)
        langs = re.search('langs\:[^\"]*\"([^\"]+)',data,re.IGNORECASE|re.DOTALL)
        for lang in langs.group(1).split(','):
            streams = re.search('res'+str(index)+'\:[^\"]*\"([^\"]+)',data,re.IGNORECASE|re.DOTALL)
            subs = re.search('sub'+str(index)+'\:[^\"]*\"([^\"]+)',data,re.IGNORECASE|re.DOTALL)
            if subs: 
                subs = re.search('[^>]+>([^$]+)',subs.group(1),re.IGNORECASE|re.DOTALL)
            if streams and qualities:
                streams = streams.group(1).split(',')
                rn = qualities.group(1).split(',')
                qindex = 0
                for stream in streams:
                    res = json.loads(util.post_json(burl,{'link':stream,'player':player,'key':key}))
                    stream = res['link']
                    q = rn[qindex]
                    if q == 'HD':
                        q = '720p'
                    else:
                        q = 'SD'
                    l = ' '+lang
                    if subs:
                        l += ' + subs'
                        s = subs.group(1)
                        s = json.loads(util.post_json(burl,{'link':s,'player':player, 'key':key}))
                        result.append({'url':stream,'quality':q,'subs':s['link'],'headers':headers,'lang':l})
                    else:
                        result.append({'url':stream,'quality':q,'headers':headers, 'lang':l})
                    qindex+=1
            index+=1
        return result
Example #12
0
 def list(self,url):
     if url.find('#fm#') == 0:
         return self.list_folder(url[5:])
     url = self._url(url)
     page = util.request(url,headers={'X-Requested-With':'XMLHttpRequest','Referer':url,'Cookie':'uloz-to-id=1561277170;'})
     script = util.substr(page,'var kn','</script>')
     keymap = None
     key = None
     k = re.search('{([^\;]+)"',script,re.IGNORECASE | re.DOTALL)
     if k:
         keymap = json.loads("{"+k.group(1)+"\"}")
     j = re.search('kapp\(kn\[\"([^\"]+)"',script,re.IGNORECASE | re.DOTALL)
     if j:
         key = j.group(1)
     if not (j and k):
         self.error('error parsing page - unable to locate keys')
         return []
     burl = b64decode('I2h0dHA6Ly9jcnlwdG8uamV6em92by5uZXQvZGVjcnlwdC8/a2V5PSVzJnZhbHVlPSVzCg==')
     murl = b64decode('aHR0cDovL2NyeXB0by5qZXp6b3ZvLm5ldC9kZWNyeXB0Lwo=')
     murl = 'http://crypto.jezzovo.net/decrypt/'
     data = util.substr(page,'<ul class=\"chessFiles','</ul>') 
     result = []
     req = {'seed':keymap[key],'values':keymap}
     decr = json.loads(util.post_json(murl,req))
     for li in re.finditer('<li data-icon=\"(?P<key>[^\"]+)',data, re.IGNORECASE |  re.DOTALL):
         body = urllib.unquote(b64decode(decr[li.group('key')]))
         m = re.search('<li>.+?<div data-icon=\"(?P<key>[^\"]+)[^<]+<img(.+?)src=\"(?P<logo>[^\"]+)(.+?)<div class=\"fileInfo(?P<info>.+?)</h4>',body, re.IGNORECASE |  re.DOTALL)
         if not m:
             continue
         value = keymap[m.group('key')]
         info = m.group('info')
         iurl = burl % (keymap[key],value)
         item = self.video_item()
         item['title'] = '.. title not found..'
         title = re.search('<div class=\"fileName.+?<a[^>]+>(?P<title>[^<]+)',info, re.IGNORECASE|re.DOTALL)
         if title:
             item['title'] = title.group('title')
         size = re.search('<span class=\"fileSize[^>]+>(?P<size>[^<]+)',info, re.IGNORECASE|re.DOTALL)
         if size:
             item['size'] = size.group('size').strip()
         time = re.search('<span class=\"fileTime[^>]+>(?P<time>[^<]+)',info, re.IGNORECASE|re.DOTALL)
         if time:
             item['length'] = time.group('time')
         item['url'] = iurl
         item['img'] = m.group('logo')
         self._filter(result,item)
     # page navigation
     data = util.substr(page,'<div class=\"paginator','</div')
     mnext = re.search('<a href=\"(?P<url>[^\"]+)\" class="next',data)
     if mnext:
         item = self.dir_item()
         item['type'] = 'next'
         item['url'] = mnext.group('url')
         result.append(item)
     return result
Example #13
0
def getTrakt(url, post=None):
    try:
        url = urlparse.urljoin('http://api.trakt.tv', url)

        headers = {'trakt-api-key': sctop.trCL, 'trakt-api-version': '2'}

        if getTraktCredentialsInfo() == False:
            util.debug("[SC] gt 1 data: %s %s" % (str(url), str(post)))
            if post is not None:
                result = util.post_json(url, post, headers)
            else:
                result = util.request(url, headers)
            util.debug("[SC] gt 1 result: %s" % str(result))
            return result

        headers['Authorization'] = 'Bearer %s' % sctop.getSetting(
            'trakt.token')
        #util.debug('[SC] token %s' % sctop.getSetting('trakt.token'))

        if post is not None:
            result, code = sctop.post_json(url, post, headers, "extend")
        else:
            result, code = sctop.request(url, headers, "extend")
        #util.debug("[SC] trakt gt result: %s %s" % (str(result), str(code)))
        if not (code == 401 or code == 405): return result

        oauth = 'http://api.trakt.tv/oauth/token'
        opost = {
            'client_id': sctop.trCL,
            'client_secret': sctop.trSC,
            'redirect_uri': 'urn:ietf:wg:oauth:2.0:oob',
            'grant_type': 'refresh_token',
            'refresh_token': sctop.getSetting('trakt.refresh')
        }

        result, code = sctop.post_json(oauth, opost, headers, "extend")
        if code == 401:
            authTrakt()
            result, code = sctop.post_json(oauth, opost, headers, "extend")
        result = json.loads(result)

        token, refresh = result['access_token'], result['refresh_token']

        sctop.setSetting(id='trakt.token', value=token)
        sctop.setSetting(id='trakt.refresh', value=refresh)

        headers['Authorization'] = 'Bearer %s' % token

        util.debug('[SC] token: %s' % token)

        result = sctop.post_json(url, post, headers)
        return result
    except Exception as e:
        util.error(e)
        pass
Example #14
0
    def get_device_code(self):
        self.log.logDebug('get device URL='+self.API_AUTH+'/code')
        data = json.loads(util.post_json(self.API_AUTH+'/code', data={'client_id':self.CLIENT_ID}, headers={'Content-Type':'application/json'}))
        interval = data['interval'] #seconds
        expire = data['expires_in'] #seconds
        verUrl = data['verification_url']
        devCode = data['device_code']
        userCode = data['user_code']
        tryies = expire/interval

        return devCode, verUrl, userCode, interval
Example #15
0
    def list(self,url):
        if url.find('#fm#') == 0:
            return self.list_folder(url[5:])
        url = self._url(url)
        page = util.request(url,headers={'X-Requested-With':'XMLHttpRequest','Referer':url,'Cookie':'uloz-to-id=1561277170;'}).decode('string-escape')
        script = util.substr(page,'var kn','</script>')
        keymap = None
        key = None
        k = re.search(r'({.+?})',script)
        if k:
            keymap = util.json.loads(k.group(1))
        j = re.search(r'ad.push\(\[kn, kn\["([^"]+)', script)
        if j:
            key = j.group(1)
        if not (j and k):
            self.error('error parsing page - unable to locate keys')
            return []
        burl = b64decode('I2h0dHA6Ly9kZWNyLWNlY2gucmhjbG91ZC5jb20vZGVjcnlwdC8/a2V5PSVzJnZhbHVlPSVz')
        murl = b64decode('aHR0cDovL2RlY3ItY2VjaC5yaGNsb3VkLmNvbS9kZWNyeXB0Lw==')
        result = []
        req = {'seed':keymap[key],'values':keymap}
        decr = json.loads(util.post_json(murl,req))
        for li in re.finditer('<div data-icon=\"(?P<key>[^\"]+)',page, re.IGNORECASE |  re.DOTALL):
            body = urllib.unquote(b64decode(decr[li.group('key')]))
            div_name = util.substr(body, '<div class="name"', '</div>')
            title_url_match = re.search(r'<a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)', div_name)

            if not title_url_match:
                continue
            item = self.video_item()
            item['title'] = title_url_match.group('title')
            item['url'] = title_url_match.group('url')

            div_media = util.substr(body, 'div class="media"', '<div class="tools">')
            img_match = re.search(r'img src="([^"]+)', div_media)
            if img_match:
                item['img'] = "http:" + img_match.group(1)
            time_match = re.search(r'<span>ÄŒas</span>(.+)', div_media)
            if time_match:
                item['length'] = time_match.group(1).strip()
            size_match = re.search(r'<span>Velikost</span>([^<]+)', div_media)
            if size_match:
                item['size'] = size_match.group(1).strip()
            self._filter(result,item)
        # page navigation
        data = util.substr(page,'<div class=\"paginator','</div')
        mnext = re.search('<a href=\"(?P<url>[^\"]+)\" class="next',data)
        if mnext:
            item = self.dir_item()
            item['type'] = 'next'
            item['url'] = util.decode_html(mnext.group('url'))
            result.append(item)
        return result
Example #16
0
    def list(self,url):
        if url.find('#fm#') == 0:
            return self.list_folder(url[5:])
        url = self._url(url)
        page = util.request(url,headers={'X-Requested-With':'XMLHttpRequest','Referer':url,'Cookie':'uloz-to-id=1561277170;'}).decode('string-escape')
        script = util.substr(page,'var kn','</script>')
        keymap = None
        key = None
        k = re.search(r'({.+?})',script)
        if k:
            keymap = util.json.loads(k.group(1))
        j = re.search(r'ad.push\(\[kn, kn\["([^"]+)', script)
        if j:
            key = j.group(1)
        if not (j and k):
            self.error('error parsing page - unable to locate keys')
            return []
        burl = b64decode('I2h0dHA6Ly9kZWNyLWNlY2gucmhjbG91ZC5jb20vZGVjcnlwdC8/a2V5PSVzJnZhbHVlPSVz')
        murl = b64decode('aHR0cDovL2RlY3ItY2VjaC5yaGNsb3VkLmNvbS9kZWNyeXB0Lw==')
        result = []
        req = {'seed':keymap[key],'values':keymap}
        decr = json.loads(util.post_json(murl,req))
        for li in re.finditer('<div data-icon=\"(?P<key>[^\"]+)',page, re.IGNORECASE |  re.DOTALL):
            body = urllib.unquote(b64decode(decr[li.group('key')]))
            div_name = util.substr(body, '<div class="name"', '</div>')
            title_url_match = re.search(r'<a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)', div_name)

            if not title_url_match:
                continue
            item = self.video_item()
            item['title'] = title_url_match.group('title')
            item['url'] = title_url_match.group('url')

            div_media = util.substr(body, 'div class="media"', '<div class="tools">')
            img_match = re.search(r'img src="([^"]+)', div_media)
            if img_match:
                item['img'] = "http:" + img_match.group(1)
            time_match = re.search(r'<span>ÄŒas</span>(.+)', div_media)
            if time_match:
                item['length'] = time_match.group(1).strip()
            size_match = re.search(r'<span>Velikost</span>([^<]+)', div_media)
            if size_match:
                item['size'] = size_match.group(1).strip()
            self._filter(result,item)
        # page navigation
        data = util.substr(page,'<div class=\"paginator','</div')
        mnext = re.search('<a href=\"(?P<url>[^\"]+)\" class="next',data)
        if mnext:
            item = self.dir_item()
            item['type'] = 'next'
            item['url'] = util.decode_html(mnext.group('url'))
            result.append(item)
        return result
Example #17
0
    def mark_as_watched(self, item):
        mediatype = self.getItemType(item)
        postdata = {}
        if mediatype == 1:
            postdata = {"movies": [{"ids": self.getTraktIds(item)}]}
        if mediatype == 2:
            postdata = {'shows': [{'ids': self.getTraktIds(item)}]}
        if mediatype == 3:
            postdata = {
                'shows': [{
                    'seasons': [{
                        'number': int('%s' % item['season'])
                    }],
                    'ids': self.getTraktIds(item)
                }]
            }
        if mediatype == 4:
            postdata = {
                'shows': [{
                    'seasons': [{
                        'episodes': [{
                            'number': int('%s' % item['episode'])
                        }],
                        'number':
                        int('%s' % item['season'])
                    }],
                    'ids':
                    self.getTraktIds(item)
                }]
            }

        self.log.logDebug("mark_as_watched postdata=%s" % postdata)

        data = json.loads(
            util.post_json(self.API + '/sync/history',
                           data=postdata,
                           headers={
                               'Content-Type': 'application/json',
                               'Authorization': 'Bearer %s' % self.TOKEN,
                               'trakt-api-version': self.API_VERSION,
                               'trakt-api-key': self.CLIENT_ID
                           }))
        self.log.logDebug("mark_as_watched response:\n%s" % data)
        if mediatype == 1:
            if int(data['added']['movies']) != 1:
                raise Exception('Movie item not mark as watched.')
        if mediatype == 2 or mediatype == 3:
            if int(data['added']['episodes']) < 1:
                raise Exception('TvShow (season) not mark as watched.')
        if mediatype == 4:
            if int(data['added']['episodes']) != 1:
                raise Exception('TvShow episode not mark as watched.')
Example #18
0
    def get_device_code(self):
        self.log.logDebug('get device URL=' + self.API_AUTH + '/code')
        data = json.loads(
            util.post_json(self.API_AUTH + '/code',
                           data={'client_id': self.CLIENT_ID},
                           headers={'Content-Type': 'application/json'}))
        interval = data['interval']  #seconds
        expire = data['expires_in']  #seconds
        verUrl = data['verification_url']
        devCode = data['device_code']
        userCode = data['user_code']
        tryies = expire / interval

        return devCode, verUrl, userCode, interval
Example #19
0
 def remove_from_watchlist(self, item):
     mediatype= self.getItemType(item)
     postdata = {}
     if mediatype==1:
         postdata = {"movies": [{"ids": self.getTraktIds(item)}]}
     # to watchlist can be added only whole tvseason
     if mediatype==2 or mediatype==3 or mediatype==4:
         postdata = {'shows':[{'ids': self.getTraktIds(item)}]}
         
     data = json.loads(util.post_json(self.API+'/sync/watchlist/remove', data=postdata, headers={'Content-Type':'application/json', 'Authorization':'Bearer %s'%self.TOKEN, 'trakt-api-version':self.API_VERSION, 'trakt-api-key':self.CLIENT_ID}))
     self.log.logDebug("remove_from_watchlist response:\n%s"%data)
     if mediatype==1:
         if int(data['deleted']['movies'])!=1:
             raise Exception('Movie item not removed from watchlist.')
     if mediatype==2 or mediatype==3 or mediatype==4:
         if int(data['deleted']['shows'])!=1:
             raise Exception('TvShow item not removed from watchlist.')
Example #20
0
    def get_token(self, code):
        try:
            data = json.loads(util.post_json(self.API_AUTH+'/token', data={'code':code,'client_id':self.CLIENT_ID, 'client_secret':self.CLIENT_SECRET}, headers={'Content-Type':'application/json'}))
            self.TOKEN = data['access_token']
            self.REFRESH_TOKEN = data['refresh_token']

            expire = data['expires_in'] #seconds
            created = data['created_at']

            self.EXPIRE = expire+created

            self.log.logDebug("Get token return token=%s, rtoken=%s, exp=%s"%(self.TOKEN, self.REFRESH_TOKEN, self.EXPIRE))

            #update settings
            self.writeSetting('trakt_token', '%s'%self.TOKEN)
            self.writeSetting('trakt_refresh_token', '%s'%self.REFRESH_TOKEN)
            self.writeSetting('trakt_token_expire', '%s'%self.EXPIRE)

        except urllib2.HTTPError as err:
            return None
        return self.TOKEN
Example #21
0
    def refresh_token(self, redirect_uri='urn:ietf:wg:oauth:2.0:oob', grant_type='refresh_token'):
        try:
            data = json.loads(util.post_json(self.API+'/oauth/token', data={'refresh_token':self.REFRESH_TOKEN, 'client_id':self.CLIENT_ID, 'client_secret':self.CLIENT_SECRET, 'redirect_uri':redirect_uri, 'grant_type':grant_type}, headers={'Content-Type':'application/json'}))
            self.TOKEN = data['access_token']
            self.REFRESH_TOKEN = data['refresh_token']

            expire = data['expires_in'] #seconds
            created = data['created_at']

            self.EXPIRE = expire+created

            #update settings
            self.writeSetting('trakt_token', '%s'%self.TOKEN)
            self.writeSetting('trakt_refresh_token', '%s'%self.REFRESH_TOKEN)
            self.writeSetting('trakt_token_expire', '%s'%self.EXPIRE)
        except urllib2.HTTPError as err:
            if err.code == 401:
                raise TraktRefreshException('Refresh trakt access token failed (reset settings).')
            raise err
        except:
            raise
Example #22
0
def upload_meta(ctx, fname, version):
    """Upload metadata from a list of records in a json input file.

    If a record exists already is updated, otherwise creates a new one.
    If "version" option is passed, creates a new version for record.

    Parameters
    ----------
    ctx: dict
        Click context obj including api information 
    fname: str
        Input json filename containing records to upload
    version: bool, optional
        If True create a new version for any existing records in list

    Returns
    -------
    """

    token = ctx.obj['token']
    zen_log = ctx.obj['log']
    zen_log.info(f"Uploading metadata from {fname} to {ctx.obj['portal']}," +
                 f" production: {ctx.obj['production']}")

    # read data from input json file and process plans in file
    data = read_json(fname)
    # process data for each plan and post records returned by process_plan()
    for plan in data:
        if ctx.obj['portal'] == 'zenodo':
            zen_log.info(plan['metadata']['title'])
            record = process_zenodo_plan(plan, ctx.obj['community_id'])
        else:
            zen_log.info(plan['title'])
            record = process_invenio_plan(plan)
        r = post_json(ctx.obj['url'], token, record, zen_log)
        zen_log.debug(f"Request: {r.request}")
        zen_log.debug(f"Request url: {r.url}")
        zen_log.info(r.status_code)
    return
def getTrakt(url, post=None, output='content', method=None):
    try:
        use_ssl = sctop.getSettingAsBool('UseSSL')
        url = urlparse.urljoin(
            'http%s://api.trakt.tv' % ('s' if use_ssl else ''), url)

        headers = {'trakt-api-key': sctop.trCL, 'trakt-api-version': '2'}

        if getTraktCredentialsInfo() == False:
            util.debug("[SC] gt 1 data: %s %s" % (str(url), str(post)))
            if post is not None:
                result = util.post_json(url, post, headers)
            else:
                result = util.request(url, headers)
            util.debug("[SC] gt 1 result: %s" % str(result))
            return result

        headers[
            'Authorization'] = 'Bearer %s' % sctop.getSetting('trakt.token')
        #util.debug('[SC] token %s' % sctop.getSetting('trakt.token'))

        if post is not None:
            result, code = sctop.post_json(url, post, headers, "extend")
            info = None
        else:
            result, code, info = sctop.request(
                url, headers, "info", method=method)
        #util.debug("[SC] trakt gt result: %s %s" % (str(result), str(code)))
        if not (code == 401 or code == 405):
            if output == "content":
                return result
            else:
                return (result, code, info)

        oauth = 'http%s://api.trakt.tv/oauth/token' % ('s' if use_ssl else '')
        opost = {
            'client_id': sctop.trCL,
            'client_secret': sctop.trSC,
            'redirect_uri': 'urn:ietf:wg:oauth:2.0:oob',
            'grant_type': 'refresh_token',
            'refresh_token': sctop.getSetting('trakt.refresh')
        }

        result, code = sctop.post_json(oauth, opost, headers, "extend")
        if code == 401:
            authTrakt()
            result, code = sctop.post_json(oauth, opost, headers, "extend")
        result = json.loads(result)

        token, refresh = result['access_token'], result['refresh_token']

        sctop.setSetting(setting='trakt.token', value=token)
        sctop.setSetting(setting='trakt.refresh', value=refresh)

        headers['Authorization'] = 'Bearer %s' % token

        util.debug('[SC] token: %s' % token)

        result = sctop.post_json(url, post, headers)
        return result
    except Exception as e:
        util.error(e)
        pass
def resolve(url):
    m = _regex(url)
    if m:
        cookies = cookielib.LWPCookieJar()
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
        player = 'http://www.streamuj.tv/new-flash-player/mplugin4.swf'
        headers = {
            'User-Agent': util.UA,
            'Referer': 'http://www.streamuj.tv/mediaplayer/player.swf'
        }
        data = request(opener, url, headers)
        if data.find('Toto video neexistuje') > 0:
            util.error('Video bylo smazano ze serveru')
            return
        burl = b64decode('aHR0cDovL2Z1LWNlY2gucmhjbG91ZC5jb20vcGF1dGg=')
        key = request(
            opener,
            'http://www.streamuj.tv/_key.php?auth=3C27f5wk6qB3g7nZ5SDYf7P7k1572rFH1QxV0QQ',
            headers)
        index = 0
        result = []
        qualities = re.search('rn\:[^\"]*\"([^\"]*)', data,
                              re.IGNORECASE | re.DOTALL)
        langs = re.search('langs\:[^\"]*\"([^\"]+)', data,
                          re.IGNORECASE | re.DOTALL)
        languages = []
        if not langs:
            languages = [
                ''
            ]  # pretend there is at least language so we read 1st stream info
        else:
            languages = langs.group(1).split(',')
        for lang in languages:
            streams = re.search('res' + str(index) + '\:[^\"]*\"([^\"]+)',
                                data, re.IGNORECASE | re.DOTALL)
            subs = re.search('sub' + str(index) + '\:[^\"]*\"([^\"]+)', data,
                             re.IGNORECASE | re.DOTALL)
            if subs:
                subs = re.search('[^>]+>([^,$]+)', subs.group(1),
                                 re.IGNORECASE | re.DOTALL)
            if streams and qualities:
                streams = streams.group(1).split(',')
                rn = qualities.group(1).split(',')
                qindex = 0
                for stream in streams:
                    res = json.loads(
                        util.post_json(burl, {
                            'link': stream,
                            'player': player,
                            'key': key
                        }))
                    req = urllib2.Request(res['link'], headers=headers)
                    print 'resolve - link = %s' % res['link']
                    try:
                        resp = opener.open(req)
                        #print "content-length = %s" %resp.info().getheader("Content-Length")
                        #print "stream url = %s"% resp.geturl()
                        if int(resp.info().getheader("Content-Length")) < 2000:
                            stream = resp.read()
                        else:
                            stream = resp.geturl()
                    except Exception as e:
                        print 'skipping %s: %s' % (res['link'], e)
                        continue
                    #print 'resolve - final url = %s'% stream
                    resp.close()
                    q = rn[qindex]
                    if q == 'HD':
                        q = '720p'
                    else:
                        q = 'SD'
                    l = ' ' + lang
                    if subs:
                        l += ' + subs'
                        s = subs.group(1)
                        s = json.loads(
                            util.post_json(burl, {
                                'link': s,
                                'player': player,
                                'key': key
                            }))
                        cookie_header = ",".join("%s=%s" % (c.name, c.value)
                                                 for c in cookies)
                        subtitle_headers = {"Cookie": cookie_header}
                        subtitle_headers.update(headers)
                        result.append({
                            'url': stream,
                            'quality': q,
                            'subs': s['link'],
                            'headers': subtitle_headers,
                            'lang': l
                        })
                    else:
                        result.append({
                            'url': stream,
                            'quality': q,
                            'headers': headers,
                            'lang': l
                        })
                    qindex += 1
            index += 1
        return result
Example #25
0
            terminate_process()
            p = None
            remove_dir(dir_path)
            post_state = cmd
        elif cmd.startswith('restart:'):
            if is_process_alive():
                terminate_process()
                p = None
            if os.path.exists(dir_path):
                p = start_run_process()
                post_state = 'restart'
        elif cmd == '' and not is_process_alive():
            post_state = 'stopped'
            if p is None and last_cmd != 't:':
                #Troy has just started
                if os.path.exists(dir_path):
                    p = start_run_process()
                    post_state = 'auto_restart'

        if cmd != '':
            last_cmd = cmd
        print 'beeping' if post_state == 'stopped' else post_state
        if post_state == 'beeping' and is_process_alive():
            post_state = 'running'
        util.post_json(HTTP_SERVER + '/client', json.dumps({'client_name': client_name, 'state': post_state}))
        time.sleep(10)

    print "main process done"


Example #26
0
def resolve(url):
    m = _regex(url)
    if m:
        util.init_urllib()
        data = util.request(url)
        if data.find('Toto video neexistuje') > 0:
            util.error('Video bylo smazano ze serveru')
            return
        player = 'http://www.streamuj.tv/new-flash-player/mplugin4.swf'
        headers = {
            'User-Agent':
            util.UA,
            'Referer':
            'http://www.streamuj.tv/mediaplayer/player.swf',
            'Cookie':
            ','.join("%s=%s" % (c.name, c.value) for c in util._cookie_jar)
        }
        burl = b64decode('aHR0cDovL2Z1LWNlY2gucmhjbG91ZC5jb20vcGF1dGg=')
        key = util.request(
            'http://www.streamuj.tv/_key.php?auth=3C27f5wk6qB3g7nZ5SDYf7P7k1572rFH1QxV0QQ'
        )
        index = 0
        result = []
        qualities = re.search(r'rn\:[^\"]*\"([^\"]*)', data,
                              re.IGNORECASE | re.DOTALL)
        langs = re.search(r'langs\:[^\"]*\"([^\"]+)', data,
                          re.IGNORECASE | re.DOTALL)
        languages = [
            ''
        ]  # pretend there is at least language so we read 1st stream info
        if langs:
            languages = langs.group(1).split(',')
        for language in languages:
            streams = re.search(
                r'res{index}\:[^\"]*\"([^\"]+)'.format(index=index), data,
                re.IGNORECASE | re.DOTALL)
            subs = re.search(
                r'sub{index}\:[^\"]*\"([^\"]+)'.format(index=index), data,
                re.IGNORECASE | re.DOTALL)
            if subs:
                subs = re.search(r'[^>]+>([^,$]+)', subs.group(1),
                                 re.IGNORECASE | re.DOTALL)
            else:
                subs = None
            if streams and qualities:
                streams = streams.group(1).split(',')
                rn = qualities.group(1).split(',')
                qindex = 0
                for stream in streams:
                    res = json.loads(
                        util.post_json(burl, {
                            'link': stream,
                            'player': player,
                            'key': key
                        }))
                    stream = res['link']
                    q = rn[qindex]
                    if q == 'HD':
                        q = '720p'
                    else:
                        q = 'SD'
                    item = {
                        'url': stream,
                        'quality': q,
                        'headers': headers,
                        'lang': language
                    }
                    if subs:
                        link = subs.group(1)
                        response = json.loads(
                            util.post_json(burl, {
                                'link': link,
                                'player': player,
                                'key': key
                            }))
                        if 'link' in response:
                            item['lang'] += ' + subs'
                            item['subs'] = response[u'link']
                        else:
                            util.error(
                                "Could not fetch subtitles from '{}'".format(
                                    link))
                            util.error("Server response: {}".format(response))
                    result.append(item)
                    qindex += 1
            index += 1
        return result
 def list(self, url):
     if url.find('#fm#') == 0:
         return self.list_folder(url[5:])
     url = self._url(url)
     page = util.request(url,
                         headers={
                             'X-Requested-With': 'XMLHttpRequest',
                             'Referer': url,
                             'Cookie': 'uloz-to-id=1561277170;'
                         })
     script = util.substr(page, 'var kn', '</script>')
     keymap = None
     key = None
     k = re.search('{([^\;]+)"', script, re.IGNORECASE | re.DOTALL)
     if k:
         keymap = json.loads("{" + k.group(1) + "\"}")
     j = re.search('kapp\(kn\[\"([^\"]+)"', script,
                   re.IGNORECASE | re.DOTALL)
     if j:
         key = j.group(1)
     if not (j and k):
         self.error('error parsing page - unable to locate keys')
         return []
     burl = b64decode(
         'I2h0dHA6Ly9kZWNyLWNlY2gucmhjbG91ZC5jb20vZGVjcnlwdC8/a2V5PSVzJnZhbHVlPSVz'
     )
     murl = b64decode(
         'aHR0cDovL2RlY3ItY2VjaC5yaGNsb3VkLmNvbS9kZWNyeXB0Lw==')
     data = util.substr(page, '<ul class=\"chessFiles', 'var kn =')
     result = []
     req = {'seed': keymap[key], 'values': keymap}
     decr = json.loads(util.post_json(murl, req))
     for li in re.finditer('<li data-icon=\"(?P<key>[^\"]+)', data,
                           re.IGNORECASE | re.DOTALL):
         body = urllib.unquote(b64decode(decr[li.group('key')]))
         m = re.search(
             '<li.+?<div data-icon=\"(?P<key>[^\"]+)[^<]+<img(.+?)src=\"(?P<logo>[^\"]+)(.+?)<i class=\"fa fa-download(?P<info>.+?)class="fileReset"',
             body, re.IGNORECASE | re.DOTALL)
         if not m:
             continue
         value = keymap[m.group('key')]
         info = m.group('info')
         iurl = burl % (keymap[key], value)
         item = self.video_item()
         item['title'] = '.. title not found..'
         title = re.search(
             '<div class=\"fileName.+?<a[^>]+>(?P<title>[^<]+)', info,
             re.IGNORECASE | re.DOTALL)
         if title:
             item['title'] = title.group('title')
         size = re.search('<span class=\"fileSize[^>]+>(?P<size>[^<]+)',
                          info, re.IGNORECASE | re.DOTALL)
         if size:
             item['size'] = size.group('size').strip()
         time = re.search('<span class=\"fileTime[^>]+>(?P<time>[^<]+)',
                          info, re.IGNORECASE | re.DOTALL)
         if time:
             item['length'] = time.group('time')
         item['url'] = iurl
         item['img'] = m.group('logo')
         self._filter(result, item)
     # page navigation
     data = util.substr(page, '<div class=\"paginator', '</div')
     mnext = re.search('<a href=\"(?P<url>[^\"]+)\" class="next', data)
     if mnext:
         item = self.dir_item()
         item['type'] = 'next'
         item['url'] = mnext.group('url')
         result.append(item)
     return result