Beispiel #1
0
def GetHttpData(url, data=None, cookie=None, headers=None):

    xbmc.log("Fetch URL :%s, with data: %s" % (url, data))
    try:
        req = urllib2.Request(url)
        req.add_header('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) {0}{1}'.
                       format('AppleWebKit/537.36 (KHTML, like Gecko) ',
                              'Chrome/28.0.1500.71 Safari/537.36'))
        req.add_header('Accept-encoding', 'gzip')
        if cookie is not None:
            req.add_header('Cookie', cookie)
        if headers is not None:
            for header in headers:
                req.add_header(header, headers[header])
        if data:
            response = urllib2.urlopen(req, data, timeout=3)
        else:
            response = urllib2.urlopen(req, timeout=3)
        httpdata = response.read()
        if response.headers.get('content-encoding', None) == 'gzip':
            httpdata = gzip.GzipFile(fileobj=StringIO.StringIO(httpdata)).read()
        response.close()
        match = re.compile('encoding=(.+?)"').findall(httpdata)
        if not match:
            match = re.compile('meta charset="(.+?)"').findall(httpdata)
        if match:
            charset = match[0].lower()
            if (charset != 'utf-8') and (charset != 'utf8'):
                httpdata = unicode(httpdata, charset).encode('utf8')
    except Exception:
        print_exc()
        httpdata = '{"status": "Fail"}'
    return httpdata
Beispiel #2
0
    def onAction(self, action):
        ACTION_UP = 3
        ACTION_DOWN = 4
        ACTION_PREVIOUS_MENU = 10

        if action==ACTION_PREVIOUS_MENU:
            self.close()

        if action==ACTION_DOWN:
            im = Image.open(img_file)
            im_w=im.size[0]
            im_h=im.size[1]
            x = self.getControl(32900).getX()
            y = self.getControl(32900).getY()
            i=0
            i=i-im_h
            i=i+720
            y=y-100
            xbmc.log('i = ' + str(i))
            xbmc.log('y = ' +str(y))
            if y > i: 
                self.getControl(32900).setPosition(x,y)

        if action==ACTION_UP:
            im = Image.open(img_file)
            im_w=im.size[0]
            im_h=im.size[1]
            x = self.getControl(32900).getX()
            y = self.getControl(32900).getY()
            if y < 0:
                y=y+100 
                self.getControl(32900).setPosition(x,y)
Beispiel #3
0
def GetHttpData(url, data=None, cookie=None, headers=None):

    xbmc.log("Fetch URL :%s, with data: %s" % (url, data))
    try:
        req = urllib2.Request(url)
        req.add_header(
            'User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) {0}{1}'.format(
                'AppleWebKit/537.36 (KHTML, like Gecko) ',
                'Chrome/28.0.1500.71 Safari/537.36'))
        req.add_header('Accept-encoding', 'gzip')
        if cookie is not None:
            req.add_header('Cookie', cookie)
        if headers is not None:
            for header in headers:
                req.add_header(header, headers[header])
        if data:
            response = urllib2.urlopen(req, data, timeout=3)
        else:
            response = urllib2.urlopen(req, timeout=3)
        httpdata = response.read()
        if response.headers.get('content-encoding', None) == 'gzip':
            httpdata = gzip.GzipFile(
                fileobj=StringIO.StringIO(httpdata)).read()
        response.close()
        match = re.compile('encoding=(.+?)"').findall(httpdata)
        if not match:
            match = re.compile('meta charset="(.+?)"').findall(httpdata)
        if match:
            charset = match[0].lower()
            if (charset != 'utf-8') and (charset != 'utf8'):
                httpdata = unicode(httpdata, charset).encode('utf8')
    except Exception:
        print_exc()
        httpdata = '{"status": "Fail"}'
    return httpdata
Beispiel #4
0
def GetHttpData(url, data=None, cookie=None, headers=None):

    xbmc.log("Fetch URL :%s, with data: %s" % (url, data))
    try:
        req = urllib2.Request(url)
        req.add_header('User-Agent', 'PUClient/3.5.5 (iPhone; iOS 10.0.1; Scale/2.00)')
        req.add_header('Accept-encoding', 'gzip')
        if cookie is not None:
            req.add_header('Cookie', cookie)
        if headers is not None:
            for header in headers:
                req.add_header(header, headers[header])
        if data:
            response = urllib2.urlopen(req, data, timeout=3)
        else:
            response = urllib2.urlopen(req, timeout=3)
        httpdata = response.read()
        if response.headers.get('content-encoding', None) == 'gzip':
            httpdata = gzip.GzipFile(fileobj=StringIO.StringIO(httpdata)).read()
        response.close()
        match = re.compile('encoding=(.+?)"').findall(httpdata)
        if not match:
            match = re.compile('meta charset="(.+?)"').findall(httpdata)
        if match:
            charset = match[0].lower()
            if (charset != 'utf-8') and (charset != 'utf8'):
                httpdata = unicode(httpdata, charset).encode('utf8')
    except Exception:
        print_exc()
        httpdata = '{"status": "Fail"}'
    return httpdata
 def log(self, msg, level=xbmc.LOGNOTICE):
     '''
     Writes a string to the XBMC log file. The addon name is inserted into 
     the beginning of the message automatically to help you find relevent 
     messages in the log file.
     
     The available log levels are defined in the :mod:`xbmc` module and are
     currently as follows::
     
         xbmc.LOGDEBUG = 0
         xbmc.LOGERROR = 4
         xbmc.LOGFATAL = 6
         xbmc.LOGINFO = 1
         xbmc.LOGNONE = 7
         xbmc.LOGNOTICE = 2
         xbmc.LOGSEVERE = 5
         xbmc.LOGWARNING = 3
     
     Args:
         msg (str or unicode): The message to be written to the log file.
     
     Kwargs:
         level (int): The XBMC log level to write at.
     '''
     #msg = unicodedata.normalize('NFKD', unicode(msg)).encode('ascii',
     #                                                         'ignore')
     xbmc.log('%s: %s' % (self.get_name(), msg), level)
Beispiel #6
0
    def filter(record):
        """Returns True for all records if running in the CLI, else returns
        True.

        When running inside XBMC it calls the xbmc.log() method and prevents
        the message from being double printed to STDOUT.
        :type record: logging.LogRecord
        """

        # When running in XBMC, any logged statements will be double printed
        # since we are calling xbmc.log() explicitly. Therefore we return False
        # so every log message is filtered out and not printed again.
        if CLI_MODE:
            return True
        else:
            # Must not be imported until here because of import order issues
            # when running in CLI
            from xbmcswift2 import xbmc
            xbmc_level = XBMCFilter.xbmc_levels.get(
                XBMCFilter.python_to_xbmc.get(record.levelname))
            msg = '[%s] %s' % (record.name, record.getMessage())
            xbmc.log(ensure_str(msg), xbmc_level)
            if record.exc_info:
                xbmc.log(''.join(format_exception(*record.exc_info)), xbmc_level)
            return False
Beispiel #7
0
    def onClick(self, controlID):
        """
            Notice: onClick not onControl
            Notice: it gives the ID of the control not the control object
        """
        input_text = self.input_text
        xbmc.log(str(controlID))

        if CTRL_ID_OK == controlID:
            if len(self.input_text) < 4:
                utils.show_msg('验证码必须是4位!')
                return
            self._ok = True
            self.close()
        elif not input_text and CTRL_ID_BACKSPACE == controlID:
            input_text = input_text[:-1]
            self.input_text = input_text
            self.getControl(CTRL_ID_TEXT).setLabel(input_text)
        elif CTRL_ID_REFRESH == controlID:
            self._download_img()
            img_control = self.getControl(CTRL_ID_IMG)
            img_control.setImage('')
            img_control.setImage(self._tmp_imgfile)
            # self.getControl(CTRL_ID_IMG).setImage(
            #     self._imgurl + '&t=%s' % time.time())
        elif len(input_text) < 4 and (ord('0') <= controlID <= ord('9')
                                      or ord('A') <= controlID <= ord('Z')):
                char = chr(controlID)
                xbmc.log(char)
                input_text += char
                self.input_text = input_text
                self.getControl(CTRL_ID_TEXT).setLabel(input_text)
Beispiel #8
0
def GetHttpData(url, data=None, cookie=None, headers=None):

    xbmc.log("Fetch URL :%s, with data: %s" % (url, data))
    try:
        req = urllib2.Request(url)
        req.add_header('User-Agent',
                       'PUClient/3.5.5 (iPhone; iOS 10.0.1; Scale/2.00)')
        req.add_header('Accept-encoding', 'gzip')
        if cookie is not None:
            req.add_header('Cookie', cookie)
        if headers is not None:
            for header in headers:
                req.add_header(header, headers[header])
        if data:
            response = urllib2.urlopen(req, data, timeout=3)
        else:
            response = urllib2.urlopen(req, timeout=3)
        httpdata = response.read()
        if response.headers.get('content-encoding', None) == 'gzip':
            httpdata = gzip.GzipFile(
                fileobj=StringIO.StringIO(httpdata)).read()
        response.close()
        match = re.compile('encoding=(.+?)"').findall(httpdata)
        if not match:
            match = re.compile('meta charset="(.+?)"').findall(httpdata)
        if match:
            charset = match[0].lower()
            if (charset != 'utf-8') and (charset != 'utf8'):
                httpdata = unicode(httpdata, charset).encode('utf8')
    except Exception:
        print_exc()
        httpdata = '{"status": "Fail"}'
    return httpdata
Beispiel #9
0
def getMoviesByPerson(person_id,page,source):
    movieIds=[]
    data = {}
    data['api_key'] = '99e8b7beac187a857152f57d67495cf4'
    data['page'] = page
    data['language']='en'
    url_values = urllib.urlencode(data)
    url = 'https://api.themoviedb.org/3/person/' + actor + '/movie_credits'
    url = 'https://api.themoviedb.org/3/person/' + person_id + '/movie_credits'
    full_url = url + '?' + url_values
    req = urllib2.Request(full_url)
    infostring = urllib2.urlopen(req).read()
    xbmc.log(infostring)
    infostring = json.loads(infostring)
    for cast in infostring['cast']:
        id=cast['id']
        movieIds.append(id)
    if source=='actor':
        for cast in infostring['cast']:
            id=cast['id']
            movieIds.append(id)
    if source=='director':
        for crew in infostring['crew']:
            if crew['job']=='Director':
                id=crew['id']
                movieIds.append(id)

    return movieIds
Beispiel #10
0
    def onClick(self, controlID):
        """
            Notice: onClick not onControl
            Notice: it gives the ID of the control not the control object
        """
        input_text = self.input_text
        xbmc.log(str(controlID))

        if CTRL_ID_OK == controlID:
            if len(self.input_text) < 4:
                utils.show_msg('验证码必须是4位!')
                return
            self._ok = True
            self.close()
        elif not input_text and CTRL_ID_BACKSPACE == controlID:
            input_text = input_text[:-1]
            self.input_text = input_text
            self.getControl(CTRL_ID_TEXT).setLabel(input_text)
        elif CTRL_ID_REFRESH == controlID:
            self._download_img()
            img_control = self.getControl(CTRL_ID_IMG)
            img_control.setImage('')
            img_control.setImage(self._tmp_imgfile)
            # self.getControl(CTRL_ID_IMG).setImage(
            #     self._imgurl + '&t=%s' % time.time())
        elif len(input_text) < 4 and (ord('0') <= controlID <= ord('9')
                                      or ord('A') <= controlID <= ord('Z')):
            char = chr(controlID)
            xbmc.log(char)
            input_text += char
            self.input_text = input_text
            self.getControl(CTRL_ID_TEXT).setLabel(input_text)
Beispiel #11
0
def play(url):
    resolved = ''
    stream_url = ''
    item = None
    try:
        import urlresolver
        resolved = urlresolver.HostedMediaFile(url).resolve()
        if not resolved or resolved == False or len(resolved) < 1:
            resolved = urlresolver.resolve(url)
            if resolved is None or len(resolved) < 1:
                resolved = urlresolver.resolve(urllib.unquote(url))
        if len(resolved) > 1:
            plugin.notify(msg="PLAY {0}".format(resolved.partition('.')[-1]), title="URLRESOLVER", delay=1000)
            plugin.set_resolved_url(resolved)
            item = ListItem.from_dict(path=resolved)
            item.add_stream_info('video', stream_values={})
            item.set_is_playable(True)
            return item
    except:
        resolved = ''
        plugin.notify(msg="FAILED {0}".format(url.partition('.')[-1]), title="URLRESOLVER", delay=1000)
    try:
        import YDStreamExtractor
        info = YDStreamExtractor.getVideoInfo(url, resolve_redirects=True)
        resolved = info.streamURL()
        for s in info.streams():
            try:
                stream_url = s['xbmc_url'].encode('utf-8', 'ignore')
                xbmc.log(msg="**YOUTUBE-DL Stream found: {0}".format(stream_url))
            except:
                pass
        if len(stream_url) > 1:
            resolved = stream_url
        if len(resolved) > 1:
            plugin.notify(msg="Playing: {0}".format(resolved.partition('.')[-1]), title="YOUTUBE-DL", delay=1000)
            plugin.set_resolved_url(resolved)
            item = ListItem.from_dict(path=resolved)
            item.add_stream_info('video', stream_values={})
            item.set_is_playable(True)
            return item
    except:
        plugin.notify(msg="Failed: {0}".format(resolved.partition('.')[-1]), title="YOUTUBE-DL", delay=1000)

    if len(resolved) > 1:
        plugin.set_resolved_url(resolved)
        item = ListItem.from_dict(path=resolved)
        return item
    else:
        plugin.set_resolved_url(url) #url)
        #plugurl = 'plugin://plugin.video.live.streamspro/?url={0}'.format(urllib.quote_plus(url))
        #item = ListItem.from_dict(path=plugurl)
        #item.add_stream_info('video', stream_values={})
        #item.set_is_playable(True)
        #plugin.notify(msg="RESOLVE FAIL: {0}".format(url.split('.', 1)[-1]),title="Trying {0}".format(item.path.split('.', 1)[-1]), delay=2000)
        return None
def play_slideshow(album_id):
    
    album_url = PHOTOS_ALBUM_URL.format(album_id = album_id, 
                                        lang     = LANG)
    xbmc.log('Album url: ' + album_url)
    html = _html(album_url)
    uls  = html.findAll('ul', {'class': 'pos_biglist_imglist'})
    lis  = [ul.findAll('li') for ul in uls]
    
    images = []
    images = [
        {'path': str('http://www.slbenfica.pt' + li.a['href']).encode('utf-8'),
        } for li in chain(*lis)]
    
    #xbmc.log('Images to load: ' + str(images))
    start_slideshow(images)
Beispiel #13
0
    def filter(self, record):
        '''Returns True for all records if running in the CLI, else returns
        True.

        When running inside XBMC it calls the xbmc.log() method and prevents
        the message from being double printed to STDOUT.
        '''

        # When running in XBMC, any logged statements will be double printed
        # since we are calling xbmc.log() explicitly. Therefore we return False
        # so every log message is filtered out and not printed again.
        if CLI_MODE:
            return True
        else:
            # Must not be imported until here because of import order issues
            # when running in CLI
            from xbmcswift2 import xbmc
            xbmc_level = XBMCFilter.xbmc_levels.get(
                XBMCFilter.python_to_xbmc.get(record.levelname))
            xbmc.log('%s%s' % (self.prefix, record.getMessage()), xbmc_level)
            return False
Beispiel #14
0
    def filter(self, record):
        '''Returns True for all records if running in the CLI, else returns
        True.

        When running inside XBMC it calls the xbmc.log() method and prevents
        the message from being double printed to STDOUT.
        '''

        # When running in XBMC, any logged statements will be double printed
        # since we are calling xbmc.log() explicitly. Therefore we return False
        # so every log message is filtered out and not printed again.
        if CLI_MODE:
            return True
        else:
            # Must not be imported until here because of import order issues
            # when running in CLI
            from xbmcswift2 import xbmc
            xbmc_level = XBMCFilter.xbmc_levels.get(
                XBMCFilter.python_to_xbmc.get(record.levelname))
            xbmc.log('%s%s' % (self.prefix, record.getMessage()), xbmc_level)
            return False
Beispiel #15
0
def watch(sid, season, episode, title, vid):
    if vid == 'None':  # Otherwise request was sent from choose_quality and url already exist
        vid, cookie = sdarot.get_final_video_and_cookie(sid, season, episode)

    xbmc.log(vid, 5)
    if vid:
        item = ListItem(
            **{
                'label': u'פרק {0}'.format(episode),
                'path': vid,
                'thumbnail': POSTER_PREFIX + sid + '.jpg'
            })

        item.as_xbmc_listitem().setContentLookup(False)
        item.set_property('mimetype', 'video/mp4')
        item.set_property('type', 'movie')
        item.set_info('Video', {
            'Title': title,
            'Genre': u'פרק {0}, עונה {1}'.format(episode, season)
        })

        plugin.set_resolved_url(item)
    else:
        plugin.notify(msg='הייתה בעיה, נסו שוב', title='שגיאה', image=ICON)
def get_url(identity_point_id, fingerprint, content_id, session_key, event_id):
    url = 'https://mlb-ws-mf.media.mlb.com/pubajaxws/bamrest/MediaService2_0/op-findUserVerifiedEvent/v-2.3'
    params = {
        'identityPointId': identity_point_id,
        'fingerprint': fingerprint,
        'contentId': content_id,
        'eventId': event_id,
        'playbackScenario': 'HTTP_CLOUD_WIRED_60',  # TODO ?
        'subject': 'LIVE_EVENT_COVERAGE',
        'platform': 'PS4',
        'sessionKey': session_key,
        'format': 'json'
    }

    headers = {
        'Accept': '*/*',
        'Accept-Encoding': 'deflate',
        'Accept-Language': 'en-US,en;q=0.8',
        'Connection': 'keep-alive',
        'User-Agent': UA_PS4
    }

    s = requests.Session()
    s.cookies = session.get_cookies()
    r = s.get(url, params=params, headers=headers).json()
    xbmc.log("API call {0}\n{1}\n{2}\n{3}".format(url, params, headers,
                                                  session.get_cookies()))
    if r['status_code'] != 1:
        xbmc.log("{0}".format(r))
        if r['status_code'] == -3500:
            raise mlb_exceptions.SignOnRestrictionException()
        raise mlb_exceptions.StreamNotFoundException()
    else:
        # Check if blacked out
        if r['user_verified_event'][0]['user_verified_content'][0][
                'user_verified_media_item'][0][
                    'blackout_status'] != 'SuccessStatus':
            raise mlb_exceptions.StreamNotFoundException()

        xbmc.log("get_url cookies response {0}".format(s.cookies))
        session.save_cookies(s.cookies)

        # Update session_key
        settings.setSetting(id='session_key', value=r['session_key'])

        base_url = r['user_verified_event'][0]['user_verified_content'][0][
            'user_verified_media_item'][0]['url']
        best_quality = _best_quality_for_stream(base_url)

        media_auth = s.cookies['mediaAuth']
        url = "{0}|User-Agent={1}&Cookie=mediaAuth={2}".format(
            base_url, UA_PS4, media_auth)
        url = url.replace('master_wired60.m3u8',
                          "{0}K/{0}_complete.m3u8".format(best_quality))
        return url
def get_session_key(identity_point_id, fingerprint, event_id, content_id):
    session_key = str(settings.getSetting(id="session_key"))
    if session_key:
        return session_key

    url = 'https://mlb-ws-mf.media.mlb.com/pubajaxws/bamrest/MediaService2_0/op-findUserVerifiedEvent/v-2.3'
    params = {
        'identityPointId': identity_point_id,
        'fingerprint': fingerprint,
        'eventId': event_id,
        'subject': 'LIVE_EVENT_COVERAGE',
        'platform': 'WIN8',
        '_': str(int(round(time.time()*1000))),
        'format': 'json',
        'frameworkURL': 'https://mlb-ws-mf.media.mlb.com&frameworkEndPoint=/pubajaxws/bamrest/MediaService2_0/op-findUserVerifiedEvent/v-2.3'
    }

    headers = {
        'Accept': '*/*',
        'Accept-Encoding': 'deflate',
        'Accept-Language': 'en-US,en;q=0.8',
        'Connection': 'keep-alive',
        'User-Agent': UA_PC,
        'Origin': 'http://m.mlb.com',
        'Referer': 'http://m.mlb.com/tv/e{0}/v{1}/?&media_type=video&clickOrigin=Media Grid&team=mlb&forwardUrl=http://m.mlb.com/tv/e{0}/v{1}/?&media_type=video&clickOrigin=Media%20Grid&team=mlb&template=mp5default&flowId=registration.dynaindex&mediaTypeTemplate=video'.format(event_id, content_id)
    }

    xbmc.log("API call {0}\n{1}\n{2}\n{3}".format(url, params, headers, session.get_cookies()))
    s = requests.Session()
    s.cookies = session.get_cookies()
    r = s.get(url, params=params, headers=headers).json()
    if 'session_key' not in r or not r['session_key']:
        xbmc.log("Couldn't find session key: {0}".format(r))
        if r['status_code'] == -3500:
            raise mlb_exceptions.SignOnRestrictionException()
        else:
            return ''
    else:
        xbmc.log("get_session_key cookies response {0}".format(s.cookies))
        session.save_cookies(s.cookies)
        session_key = r['session_key']
        xbmc.log("Session key: {0}".format(session_key))
        settings.setSetting(id='session_key', value=session_key)
        return session_key
def get_url(identity_point_id, fingerprint, content_id, session_key, event_id):
    url = 'https://mlb-ws-mf.media.mlb.com/pubajaxws/bamrest/MediaService2_0/op-findUserVerifiedEvent/v-2.3'
    params = {
        'identityPointId': identity_point_id,
        'fingerprint': fingerprint,
        'contentId': content_id,
        'eventId': event_id,
        'playbackScenario': 'HTTP_CLOUD_WIRED_60',  # TODO ?
        'subject': 'LIVE_EVENT_COVERAGE',
        'platform': 'PS4',
        'sessionKey': session_key,
        'format': 'json'
    }

    headers = {
        'Accept': '*/*',
        'Accept-Encoding': 'deflate',
        'Accept-Language': 'en-US,en;q=0.8',
        'Connection': 'keep-alive',
        'User-Agent': UA_PS4
    }

    s = requests.Session()
    s.cookies = session.get_cookies()
    r = s.get(url, params=params, headers=headers).json()
    xbmc.log("API call {0}\n{1}\n{2}\n{3}".format(url, params, headers, session.get_cookies()))
    if r['status_code'] != 1:
        xbmc.log("{0}".format(r))
        if r['status_code'] == -3500:
            raise mlb_exceptions.SignOnRestrictionException()
        raise mlb_exceptions.StreamNotFoundException()
    else:
        # Check if blacked out
        if r['user_verified_event'][0]['user_verified_content'][0]['user_verified_media_item'][0]['blackout_status'] != 'SuccessStatus':
            raise mlb_exceptions.StreamNotFoundException()

        xbmc.log("get_url cookies response {0}".format(s.cookies))
        session.save_cookies(s.cookies)

        # Update session_key
        settings.setSetting(id='session_key', value=r['session_key'])

        base_url = r['user_verified_event'][0]['user_verified_content'][0]['user_verified_media_item'][0]['url']
        best_quality = _best_quality_for_stream(base_url)

        media_auth = s.cookies['mediaAuth']
        url = "{0}|User-Agent={1}&Cookie=mediaAuth={2}".format(base_url, UA_PS4, media_auth)
        url = url.replace('master_wired60.m3u8', "{0}K/{0}_complete.m3u8".format(best_quality))
        return url
Beispiel #19
0
def best_games(date, leverage_index_csv):
    import leverage_index

    index_table = leverage_index.StaticTableLeverageIndex(leverage_index_csv)
    games = get_games(date)
    leverage_indices = [{
                            "leverage_index": index_table.get(game.inning_num, game.inning_half, game.runners_on, game.outs, game.away_score, game.home_score),
                            "state": game
                        } for game in games]
    if len(leverage_indices) == 0:
        xbmc.log("No games")
        return None
    else:
        best_games = sorted(leverage_indices, key=lambda x: x['leverage_index'], reverse=True)
        xbmc.log("{0}".format(best_games))
        xbmc.log("Best game is {0}".format(best_games[0]))
        return best_games
Beispiel #20
0
def play_sequence(url):
	plugin.log.info('Playing url: %s' % url)
	xbmc.log('playing url: %s' % url)
	plugin.set_resolved_url(url)
	show = Show()
	
	show.load_file(config)
	sequence.load_file(url, show.controllers)
	schedule = sched.scheduler(time.time, time.sleep)
	for time_stamp, method, arglist in sequence.compile(keep_state=True):
		schedule.enter(time_stamp / 1000.0, 0, method, arglist)

	if sequence.audio is not None:
		audio_fullpath = xbmc.translatePath(audio_path + '/' + sequence.audio.filename)
		xbmc.log('playing audio: %s' % audio_fullpath)
		xbmc.executebuiltin('XBMC.PlayMedia('+audio_fullpath+')')
	else:
		xbmc.log('audio was none')
	schedule.run()
	show.networks['lights'].close()
Beispiel #21
0
def play_sequence(url):
    plugin.log.info('Playing url: %s' % url)
    xbmc.log('playing url: %s' % url)
    plugin.set_resolved_url(url)
    show = Show()

    show.load_file(config)
    sequence.load_file(url, show.controllers)
    schedule = sched.scheduler(time.time, time.sleep)
    for time_stamp, method, arglist in sequence.compile(keep_state=True):
        schedule.enter(time_stamp / 1000.0, 0, method, arglist)

    if sequence.audio is not None:
        audio_fullpath = xbmc.translatePath(audio_path + '/' +
                                            sequence.audio.filename)
        xbmc.log('playing audio: %s' % audio_fullpath)
        xbmc.executebuiltin('XBMC.PlayMedia(' + audio_fullpath + ')')
    else:
        xbmc.log('audio was none')
    schedule.run()
    show.networks['lights'].close()
# XBMC includes
from xbmcswift2 import xbmcplugin
from xbmcswift2 import xbmcgui
from xbmcswift2 import xbmc
from xbmcswift2 import xbmcaddon

# DEBUG
REMOTE_DBG = False

# append pydev remote debugger
if REMOTE_DBG:
    # Make pydev debugger works for auto reload.
    # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
    try:
        sys.path.append(r'C:\eclipse\plugins\org.python.pydev_3.8.0.201409251235\pysrc')
        xbmc.log('PYTHONPATH:' + str(sys.path)) 
        import pydevd
    # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True)
    except ImportError:
        sys.stderr.write("Error: " +
            "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
        sys.exit(1)

#######################
#   GLOBALS Definition
#######################

__plugin_name__ = "SL Benfica"
__plugin_id__   = 'plugin.video.slbenfica.pt'
 def __init__(self):
     xbmc.Player.__init__(self)
     self.returnlink = xbmc.getInfoLabel('Container.FolderPath')
     xbmc.log("returnlink: " + repr(self.returnlink), xbmc.LOGNOTICE)
Beispiel #24
0
def remote_play():
    utils.clearStatus()
    ss = utils.getPlayerStatus()
    csong = ss['song']
    psong = ss['song']
    cstatus = ss['status']
    pstatus = ss['status']
    isplaying = False
    eventlist = []
    while (not xbmc.abortRequested):
        ss = utils.getPlayerStatus()
        #psong = csong
        pstatus = cstatus
        csong = ss['song']
        cstatus = ss['status']
        if psong == csong:
            if pstatus != cstatus:
                isplaying = not isplaying
                if isplaying:
                    #resume the song
                    xbmc.log('resuming song %s' % csong)
                    xbmc.executebuiltin('XBMC.PlayerControl(Play)')
                    for e in eventlist:
                        schedule.enter(e[0], e[1], e[2], e[3])
                    eventlist = []
                    schedule.run()
                    #show.networks['lights'].close()

                else:
                    #stop/pause the song
                    xbmc.log('stopping song: %s' % csong)
                    xbmc.executebuiltin('XBMC.PlayerControl(Play)')
                    for e in schedule.queue:
                        eventlist.append(e)
                        schedule.cancel(e)

        else:
            #start new song
            xbmc.log('start new song: %s' % csong)
            for e in schedule.queue:
                schedule.cancel(e)

            if csong == 'Carol of the Bells':
                psong = csong
                fullpath = xbmc.translatePath(seq_location + '/cotb.lseq')
                play_sequence(fullpath)

            elif csong == 'Rock Around the Christmas Tree':
                psong = csong
                fullpath = xbmc.translatePath(seq_location + '/rock_ar.lseq')
                play_sequence(fullpath)

            elif csong == 'O Little Town of Bethlehem':
                psong = csong
                fullpath = xbmc.translatePath(seq_location + '/bethlehem.lseq')
                play_sequence(fullpath)

            elif csong == 'The First Noel':
                psong = csong
                fullpath = xbmc.translatePath(seq_location + '/noel.lseq')
                play_sequence(fullpath)
Beispiel #25
0
def __log(text):
    xbmc.log('%s plugin: %s' % (__addon_name__, repr(text)))
Beispiel #26
0
def __log_api(text):
    xbmc.log('%s api: %s' % (__addon_name__, repr(text)))
Beispiel #27
0
def remote_play():
	utils.clearStatus()
	ss = utils.getPlayerStatus()
	csong = ss['song']
	psong = ss['song']
	cstatus = ss['status']
	pstatus = ss['status']
	isplaying = False
	eventlist = []
	while (not xbmc.abortRequested):
		ss = utils.getPlayerStatus()
		#psong = csong
		pstatus = cstatus
		csong = ss['song']
		cstatus = ss['status']
		if psong == csong:
			if pstatus != cstatus:
				isplaying = not isplaying
				if isplaying:
					#resume the song
					xbmc.log('resuming song %s' % csong)
					xbmc.executebuiltin('XBMC.PlayerControl(Play)')
					for e in eventlist:
						schedule.enter(e[0], e[1], e[2], e[3])
					eventlist = []
					schedule.run()
					#show.networks['lights'].close()

				else:
					#stop/pause the song
					xbmc.log('stopping song: %s' % csong)
					xbmc.executebuiltin('XBMC.PlayerControl(Play)')
					for e in schedule.queue:
						eventlist.append(e)
						schedule.cancel(e)

		else:
			#start new song
			xbmc.log('start new song: %s' % csong)
			for e in schedule.queue:
				schedule.cancel(e)

			if csong == 'Carol of the Bells':
				psong = csong
				fullpath = xbmc.translatePath(seq_location + '/cotb.lseq')
				play_sequence(fullpath)

			elif csong == 'Rock Around the Christmas Tree':
				psong = csong
				fullpath = xbmc.translatePath(seq_location + '/rock_ar.lseq')
				play_sequence(fullpath)

			elif csong == 'O Little Town of Bethlehem':
				psong = csong
				fullpath = xbmc.translatePath(seq_location + '/bethlehem.lseq')
				play_sequence(fullpath)

			elif csong == 'The First Noel':
				psong = csong
				fullpath = xbmc.translatePath(seq_location + '/noel.lseq')
				play_sequence(fullpath)
def get_session_key(identity_point_id, fingerprint, event_id, content_id):
    session_key = str(settings.getSetting(id="session_key"))
    if session_key:
        return session_key

    url = 'https://mlb-ws-mf.media.mlb.com/pubajaxws/bamrest/MediaService2_0/op-findUserVerifiedEvent/v-2.3'
    params = {
        'identityPointId':
        identity_point_id,
        'fingerprint':
        fingerprint,
        'eventId':
        event_id,
        'subject':
        'LIVE_EVENT_COVERAGE',
        'platform':
        'WIN8',
        '_':
        str(int(round(time.time() * 1000))),
        'format':
        'json',
        'frameworkURL':
        'https://mlb-ws-mf.media.mlb.com&frameworkEndPoint=/pubajaxws/bamrest/MediaService2_0/op-findUserVerifiedEvent/v-2.3'
    }

    headers = {
        'Accept':
        '*/*',
        'Accept-Encoding':
        'deflate',
        'Accept-Language':
        'en-US,en;q=0.8',
        'Connection':
        'keep-alive',
        'User-Agent':
        UA_PC,
        'Origin':
        'http://m.mlb.com',
        'Referer':
        'http://m.mlb.com/tv/e{0}/v{1}/?&media_type=video&clickOrigin=Media Grid&team=mlb&forwardUrl=http://m.mlb.com/tv/e{0}/v{1}/?&media_type=video&clickOrigin=Media%20Grid&team=mlb&template=mp5default&flowId=registration.dynaindex&mediaTypeTemplate=video'
        .format(event_id, content_id)
    }

    xbmc.log("API call {0}\n{1}\n{2}\n{3}".format(url, params, headers,
                                                  session.get_cookies()))
    s = requests.Session()
    s.cookies = session.get_cookies()
    r = s.get(url, params=params, headers=headers).json()
    if 'session_key' not in r or not r['session_key']:
        xbmc.log("Couldn't find session key: {0}".format(r))
        if r['status_code'] == -3500:
            raise mlb_exceptions.SignOnRestrictionException()
        else:
            return ''
    else:
        xbmc.log("get_session_key cookies response {0}".format(s.cookies))
        session.save_cookies(s.cookies)
        session_key = r['session_key']
        xbmc.log("Session key: {0}".format(session_key))
        settings.setSetting(id='session_key', value=session_key)
        return session_key
Beispiel #29
0
def play_basesloaded():
    delay_sec = 20
    refresh_sec = 10
    games_queue = MlbGamesQueue(delay_sec, refresh_sec, plugin)

    # Need a way of checking if there are any current games, not just
    # games that are currently *on*
    # Maybe display to user: "******"
    games = games_queue.get()
    if games is None:
        plugin.notify("No games on")
        return

    monitor = xbmc.Monitor()
    playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
    player = mlb_player.MlbPlayer(mlb_playlist=playlist)

    curr_game = None
    streams_not_found = set([])
    while not monitor.abortRequested():
        # TODO encapsulate all this logic in an object
        if not games:
            # TODO better UX for this situation
            xbmc.log("No game found")
            xbmc.sleep(5000)
            continue

        # Update state of curr_game
        if curr_game is not None:
            new_curr_game = [game for game in games if game['state'].away_team == curr_game['state'].away_team
                                                   and game['state'].home_team == curr_game['state'].home_team]
            if not new_curr_game:
                curr_game = None
            else:
                curr_game = new_curr_game[0]

        # Iterate through best games in order, choosing first one a stream exists for
        for game in games:
            if curr_game == game:
                xbmc.log("Not switching because current game is still best game")
                break

            try:
                # Only switch games if:
                #  curr_game is None (either no curr_game or it's in commercial break)
                #  The change in leverage is > 1.5 and there's a new batter in curr_game
                #  game has a better leverage than curr_game and curr_game is below average leverage (1.0) and there's a new batter in curr_game
                curr_game_none = curr_game is None
                new_batter = curr_game and curr_game['state'].new_batter
                large_leverage_diff = curr_game and (game['leverage_index'] - curr_game['leverage_index'] > 1.5)
                game_better = curr_game and game['leverage_index'] > curr_game['leverage_index']
                curr_game_below_avg = curr_game and curr_game['leverage_index'] < 1.0
                if curr_game_none or (new_batter and (large_leverage_diff or (curr_game_below_avg and game_better))):
                    if (game['state'].home_team, game['state'].away_team) in streams_not_found:
                        xbmc.log("Already know stream doesn't exist for game {0}".format(game))
                        continue

                    stream = mlbtv_stream_api.get_stream(game['state'].home_team, game['state'].away_team)

                    xbmc.log("Switching from {0} to {1}".format(curr_game, game))
                    curr_game = game
                    xbmc.log("stream: " + stream)
                    player.play_video(stream)

                if curr_game == game:
                    xbmc.log("Current game is in commercial break or is over")
                if curr_game != game and (game['leverage_index'] - curr_game['leverage_index']) <= 1.5:
                    xbmc.log("{0} is better game, but not enough better to switch from {1}".format(game, curr_game))
                elif curr_game != game and (game['leverage_index'] - curr_game['leverage_index']) > 1.5:
                    xbmc.log("{0} is a better game, but {1} still has a batter at the plate".format(game, curr_game))

                break
            except mlb_exceptions.StreamNotFoundException:
                streams_not_found.add((game['state'].home_team, game['state'].away_team),)
                xbmc.log("Stream not found for {0}. Setting cache to {1}".format(game, streams_not_found))
                continue

        if monitor.waitForAbort(refresh_sec) or not player.isPlayingVideo():
            break

        # Update games
        games = games_queue.get()