示例#1
0
    async def __run(self):
        try:
            while True:
                try:
                    await self.__set_status('connection')
                    self.__markets = await self.get_markets()
                    await self._prepare_ws_connection()
                    async with websockets.connect(
                            self._ws_path,
                            extra_headers=self._ws_headers,
                    ) as websocket:
                        self.__ws_socket = websocket
                        self.__clear_channels()
                        await self._ws_auth()
                        await self._subscribe_channels()
                        async for message in websocket:
                            payload = await self._resolve_message(message)
                            if payload is not None:
                                await self.__set_status('connected')
                                await self.__exchanges_buffer.push(payload)
                except Exception as e:
                    self.__ws_socket = None
                    Logger.log_error(e)

                finally:
                    await self.__set_status('disconnected')
                    await asyncio.sleep(1)
        except Exception as e:
            Logger.log_error(e)
def callBackDialogProgressBar(function_obj, function_args, heading, failure_message=None, line1='Please wait...', line2='Retrieved $current_index of $total_it items', line3='To go back, press the Cancel button'):
    total_iteration = len(function_args)
    current_index = 0
    ProgressDisplayer().end()
    pDialog = None
    if not SUPPRESS_DIALOG_MSG:
        pDialog = xbmcgui.DialogProgress()
        pDialog.create(heading, line1, line2.replace('$total_it', str(total_iteration)).replace('$current_index', str(current_index)), line3)
        pDialog.update(1)
    Logger.logDebug('Total Iterations = ' + str(total_iteration))
    function_returns = []
    isCanceled = False
    for arg in function_args:
        try:
            returnedObj = function_obj(arg)
            if returnedObj is not None and type(returnedObj) is list:
                function_returns.extend(returnedObj)
            elif returnedObj is not None:
                function_returns.append(returnedObj)
            if not SUPPRESS_DIALOG_MSG and pDialog is not None:
                current_index = current_index + 1
                percent = (current_index * 100) / total_iteration
                pDialog.update(percent, line1, line2.replace('$total_it', str(total_iteration)).replace('$current_index', str(current_index)), line3)
                if (pDialog.iscanceled()):
                    isCanceled = True
                    break
        except Exception, e:
            if not SUPPRESS_DIALOG_MSG and pDialog is not None and failure_message is not None:
                pDialog.close()
                dialog = xbmcgui.Dialog()
                dialog.ok('[B][COLOR red]FAILED: [/COLOR][/B]Info Retrieval Process', failure_message, 'You may like to try again later or use other source if available')
            Logger.logFatal(e)
            raise Exception(ExceptionHandler.DONOT_DISPLAY_ERROR, '')
        if isCanceled:
            raise Exception(ExceptionHandler.PROCESS_STOPPED, 'It looks like you don\'t want wait more|Process was stopped in between')
示例#3
0
    def __assume_tick(self, tick_data):
        tick = None

        try:
            market = self._get_markets().loc[tick_data['params']['symbol']]
            tick = pd.Series(
                data=[
                    self.name,
                    int(
                        datetime.datetime.strptime(
                            tick_data['params']['timestamp'].split('.')[0],
                            '%Y-%m-%dT%H:%M:%S',
                        ).timestamp() * 1000),
                    '_'.join([market.at['base'].lower(), market.at['quot']]),
                    tick_data['params']['last'],
                ],
                index=formats.tick,
                name=datetime.datetime.now(),
            )
        except Exception as e:
            Logger.log_info(tick_data['params']['timestamp'].split('.')[0])
            Logger.log_error(e)

        finally:
            return tick
示例#4
0
def retieveTrailerStream(request_obj, response_obj):
    soup = None
    title = request_obj.get_data()['movieTitle']
    if request_obj.get_data().has_key('movieInfo'):
        soup = BeautifulSoup.BeautifulSoup(request_obj.get_data()['movieInfo'])
    elif request_obj.get_data().has_key('moviePageUrl'):
        contentDiv = BeautifulSoup.SoupStrainer('div', {'dir': 'ltr'})
        soup = HttpUtils.HttpClient().getBeautifulSoup(
            url=request_obj.get_data()['moviePageUrl'],
            parseOnlyThese=contentDiv)
    if soup is None:
        return
    videoLink = None
    Logger.logDebug(soup.prettify())
    frameTag = soup.findChild('iframe', recursive=True)
    if frameTag is not None:
        videoLink = frameTag['src']
    else:
        paramTag = soup.findChild('param',
                                  attrs={'name': 'movie'},
                                  recursive=True)
        if paramTag is not None:
            videoLink = paramTag['value']
        else:
            videoLink = soup.findChild('embed', recursive=True)['src']
    request_obj.set_data({'videoLink': videoLink, 'videoTitle': title})
示例#5
0
    def __assume_tick(self, message):
        tick = None

        try:
            current_date = datetime.datetime.now()
            tick = pd.Series(
                data=[
                    self.name,
                    int(time.mktime(current_date.timetuple())) * 1000,
                    '_'.join([
                        message['data']['symbol1'].lower(),
                        message['data']['symbol2'].lower(),
                    ]),
                    message['data']['price'],
                ],
                index=formats.tick,
                name=current_date,
            )

            Logger.log_info(tick)
        except Exception as e:
            Logger.log_error(e)

        finally:
            return tick
示例#6
0
    async def get_markets(self):
        markets = pd.DataFrame(data=[], columns=formats.market)

        try:
            request_url = 'currency_limits'

            stock_data = await self.rest_send(request_url)
            for market_data in stock_data['data']['pairs']:
                markets = markets.append(
                    pd.Series(
                        data=[
                            self.name,
                            market_data['symbol1'],
                            market_data['symbol2'],
                            market_data['minLotSize'],
                            market_data['maxLotSize'],
                        ],
                        index=formats.market,
                        name='_'.join(
                            [market_data['symbol1'], market_data['symbol2']]),
                    ))
        except Exception as e:
            Logger.log_error(e)

        finally:
            return markets
示例#7
0
def get_crawl_max_count():
    config = MonitorConfig()
    crawl_max_count = config.get_value('appiumConfig', 'crawl_max_count')
    Logger.println(f"【crawl_max_count={crawl_max_count}】")
    if not crawl_max_count:
        return '100'
    return crawl_max_count
示例#8
0
def retrieveVideoInfo(videoUrl):
    try:
        xbmcaddon.Addon('plugin.video.vevo')
    except:
        dialog = xbmcgui.Dialog()
        dialog.ok('[B][COLOR red]MISSING: [/COLOR][/B] VEVO add-on', '',
                  'Please install VEVO add-on created by BlueCop!',
                  'Available at http://code.google.com/p/bluecop-xbmc-repo/')
        raise
    video_info = VideoInfo()
    video_info.set_video_hosting_info(getVideoHostingInfo())
    video_info.set_video_id(videoUrl)
    addon_url = 'plugin://plugin.video.vevo/?'
    vevo_id = videoUrl.split('/')[-1]
    if videoUrl.startswith('playlist'):
        url = urllib.quote_plus(
            'http://api.vevo.com/mobile/v2/playlist/%s.json?' % vevo_id)
        addon_url += 'url=%s' % url
        addon_url += '&mode=playPlaylist'
        addon_url += '&duration=210'
        addon_url += '&page=1'
        video_info.add_video_link(XBMC_EXECUTE_PLUGIN,
                                  addon_url,
                                  addUserAgent=False,
                                  addReferer=False)
        video_info.set_video_image('')
        video_info.set_video_name(' ')
    else:
        url = 'http://videoplayer.vevo.com/VideoService/AuthenticateVideo?isrc=%s&extended=true' % vevo_id
        video = json.loads(
            HttpUtils.HttpClient().getHtmlContent(url=url))['video']
        title = ''
        try:
            title = video['title'].encode('utf-8')
        except:
            title = ''
        video_image = video['imageUrl']
        if len(video['featuredArtists']) > 0:
            feats = ''
            for featuredartist in video['featuredArtists']:
                # featuredartist_image = featuredartist['image_url']
                featuredartist_name = featuredartist['artistName'].encode(
                    'utf-8')
                feats += featuredartist_name + ', '
            feats = feats[:-2]
            title += ' (ft. ' + feats + ')'

        addon_url += 'url=%s' % vevo_id
        addon_url += '&mode=playVideo'
        addon_url += '&duration=210'
        video_info.add_video_link(VIDEO_QUAL_SD,
                                  addon_url,
                                  addUserAgent=False,
                                  addReferer=False)
        video_info.set_video_image(video_image)
        video_info.set_video_name(title)

    Logger.logDebug(addon_url)
    video_info.set_video_stopped(False)
    return video_info
示例#9
0
    async def get_markets(self):
        markets = pd.DataFrame(data=[], columns=formats.market)

        try:
            request_url = 'symbols_details'

            stock_data = await self.rest_send(request_url)
            for market_data in stock_data:
                markets = markets.append(
                    pd.Series(
                        data=[
                            self.name,
                            market_data['pair'].lower()[:3],
                            market_data['pair'].lower()[3:],
                            market_data['minimum_order_size'],
                            market_data['maximum_order_size'],
                        ],
                        index=formats.market,
                        name=market_data['pair'].lower(),
                    ))

        except Exception as e:
            Logger.log_error(e)

        finally:
            return markets
示例#10
0
文件: Movzap.py 项目: noba3/KoTos
def retrieveVideoInfo(video_id):
    
    video_info = VideoInfo()
    video_info.set_video_hosting_info(getVideoHostingInfo())
    video_info.set_video_id(video_id)
    try:
        video_info_link = 'http://movzap.com/' + str(video_id)
        html = HttpUtils.HttpClient().getHtmlContent(url=video_info_link)
        
        paramSet = re.compile("return p\}\(\'(.+?)\',(\d\d),(\d\d),\'(.+?)\'").findall(html)
        if len(paramSet) > 0:
            video_info_link = AddonUtils.parsePackedValue(paramSet[0][0], int(paramSet[0][1]), int(paramSet[0][2]), paramSet[0][3].split('|')).replace('\\', '').replace('"', '\'')
            
            img_data = re.compile(r"image:\'(.+?)\'").findall(video_info_link)
            if len(img_data) == 1:
                video_info.set_video_image(img_data[0])
            video_link = re.compile(r"file:\'(.+?)\'").findall(video_info_link)[0]
        else:
            video_link = re.compile("'file': '(.+?)'").findall(html)[0]
        video_info.set_video_stopped(False)
        video_info.add_video_link(VIDEO_QUAL_SD, video_link)
        
    except Exception, e:
        Logger.logError(e)
        video_info.set_video_stopped(True)
示例#11
0
def retrieveVideoInfo(video_id):
    
    video_info = VideoInfo()
    video_info.set_video_hosting_info(getVideoHostingInfo())
    video_info.set_video_id(video_id)
    try:

        html = HttpUtils.HttpClient().getHtmlContent(url='http://vimeo.com/' + str(video_id))
        referrerObj = re.compile('"timestamp":(.+?),"signature":"(.+?)"').findall(html)[0]
        req_sig_exp = referrerObj[0]
        req_sig = referrerObj[1]
        
        img_link = re.compile('itemprop="thumbnailUrl" content="(.+?)"').findall(html)[0]
        video_title = re.compile('"title":"(.+?)"').findall(html)[0]
        
        qual = 'sd'
        video_link = "http://player.vimeo.com/play_redirect?clip_id=%s&sig=%s&time=%s&quality=%s&codecs=H264,VP8,VP6&type=moogaloop_local&embed_location=" % (video_id, req_sig, req_sig_exp, qual)
        video_info.add_video_link(VIDEO_QUAL_SD, video_link)
        
        if(re.search('"hd":1', html)):
            qual = 'hd'
            video_link = "http://player.vimeo.com/play_redirect?clip_id=%s&sig=%s&time=%s&quality=%s&codecs=H264,VP8,VP6&type=moogaloop_local&embed_location=" % (video_id, req_sig, req_sig_exp, qual)
            video_info.add_video_link(VIDEO_QUAL_HD_720, video_link)
            
        video_info.set_video_stopped(False)
        video_info.set_video_image(img_link)
        video_info.set_video_name(video_title)
        
    except Exception, e:
        Logger.logError(e)
        video_info.set_video_stopped(True)
示例#12
0
    async def get_markets(self):
        markets = pd.DataFrame(data=[], columns=formats.market)

        try:
            request_url = 'markets'

            stock_data = await self.rest_send(request_url)
            for market_name in stock_data.keys():
                markets = markets.append(
                    pd.Series(
                        data=[
                            self.name,
                            market_name.split('_')[0],
                            market_name.split('_')[1],
                            None,
                            None,
                        ],
                        index=formats.market,
                        name=market_name.replace('_', ''),
                    ))
        except Exception as e:
            Logger.log_error(e)

        finally:
            return markets
示例#13
0
    async def get_markets(self):
        markets = pd.DataFrame(data=[], columns=formats.market)

        try:
            request_url = 'products'
            stock_data = await self.rest_send(request_url)
            for market_data in stock_data:
                markets = markets.append(
                    pd.Series(
                        data=[
                            self.name,
                            market_data['base_currency'].lower(),
                            market_data['quote_currency'].lower(),
                            market_data['min_market_funds'],
                            market_data['max_market_funds'],
                        ],
                        index=formats.market,
                        name=market_data['id'].lower(),
                    ))

        except Exception as e:
            Logger.log_error(e)

        finally:
            return markets
示例#14
0
    async def get_ticks(self):
        ticks = pd.DataFrame(data=[], columns=formats.tick)

        try:
            request_url = 'tickerall'
            stock_data = await self.rest_send(request_url)

            current_date = datetime.datetime.now()
            for market_name in stock_data['data'].keys():
                ticks = ticks.append(
                    pd.Series(
                        data=[
                            self.name,
                            int(time.mktime(current_date.timetuple())) * 1000,
                            market_name,
                            stock_data['data'][market_name]['last'],
                        ],
                        index=formats.tick,
                        name=current_date,
                    ))

            Logger.log_info(ticks)
        except Exception as e:
            Logger.log_error(e)

        finally:
            return ticks
示例#15
0
def parseSignature(s):
    ''' use decryption solution by Youtube-DL project '''
    if len(s) == 93:
        return s[86:29:-1] + s[88] + s[28:5:-1]
    elif len(s) == 92:
        return s[25] + s[3:25] + s[0] + s[26:42] + s[79] + s[43:79] + s[91] + s[80:83]
    elif len(s) == 91:
        return s[84:27:-1] + s[86] + s[26:5:-1]
    elif len(s) == 90:
        return s[25] + s[3:25] + s[2] + s[26:40] + s[77] + s[41:77] + s[89] + s[78:81]
    elif len(s) == 89:
        return s[84:78:-1] + s[87] + s[77:60:-1] + s[0] + s[59:3:-1]
    elif len(s) == 88:
        return s[7:28] + s[87] + s[29:45] + s[55] + s[46:55] + s[2] + s[56:87] + s[28]
    elif len(s) == 87:
        return s[6:27] + s[4] + s[28:39] + s[27] + s[40:59] + s[2] + s[60:]
    elif len(s) == 86:
        return s[80:72:-1] + s[16] + s[71:39:-1] + s[72] + s[38:16:-1] + s[82] + s[15::-1]
    elif len(s) == 85:
        return s[3:11] + s[0] + s[12:55] + s[84] + s[56:84]
    elif len(s) == 84:
        return s[78:70:-1] + s[14] + s[69:37:-1] + s[70] + s[36:14:-1] + s[80] + s[:14][::-1]
    elif len(s) == 83:
        return s[80:63:-1] + s[0] + s[62:0:-1] + s[63]
    elif len(s) == 82:
        return s[80:37:-1] + s[7] + s[36:7:-1] + s[0] + s[6:0:-1] + s[37]
    elif len(s) == 81:
        return s[56] + s[79:56:-1] + s[41] + s[55:41:-1] + s[80] + s[40:34:-1] + s[0] + s[33:29:-1] + s[34] + s[28:9:-1] + s[29] + s[8:0:-1] + s[9]
    elif len(s) == 80:
        return s[1:19] + s[0] + s[20:68] + s[19] + s[69:80]
    elif len(s) == 79:
        return s[54] + s[77:54:-1] + s[39] + s[53:39:-1] + s[78] + s[38:34:-1] + s[0] + s[33:29:-1] + s[34] + s[28:9:-1] + s[29] + s[8:0:-1] + s[9]
    else:
        Logger.logFatal(u'Unable to decrypt signature, key length %d not supported; retrying might work' % (len(s)))
        return s
示例#16
0
    async def execute(self, action, *args, **kwargs):
        result = None

        try:
            nonce = utils.get_nonce()
            Logger.log_info('execute')
            Logger.log_info(nonce)
            self.__await_events[nonce] = asyncio.Event()
            await self.push({
                'type':'service',
                'id': nonce,
                'action':action,
                'args':args,
                'kwargs':kwargs,})

            await self.__await_events[nonce].wait()
            Logger.log_info('executed')
            result = self.__events_results[nonce]
            Logger.log_info(result)
            del self.__events_results[nonce]
            del self.__await_events[nonce]
        except Exception as e:
            Logger.log_error(e)

        finally:
            return result
示例#17
0
    async def __process_request(self, full_url):
        try:
            request = pd.Series(data=[full_url], index=['request'])
            request.name = datetime.datetime.now()
            self.__timeline = self.__timeline.append(request)
            headers = {
                'Accept': ('text/html,application/xhtml+xml' +
                           ',application/xml;q=0.9,image/webp,' +
                           'image/apng,*/*;q=0.8'),
                'Accept-Encoding':
                'gzip, deflate, br',
                'Accept-Language':
                'en-US,en;q=0.9',
                'Cache-Control':
                'max-age=0',
                'Connection':
                'keep-alive',
                'Upgrade-Insecure-Requests':
                '1',
                'User-Agent': ('Mozilla/5.0 (Macintosh;' +
                               ' Intel Mac OS X 10_11_6) AppleWebKit/537.36 ' +
                               '(KHTML, like Gecko) Chrome/66.0.3359.139' +
                               ' Safari/537.36'),
            }

            async with aiohttp.ClientSession(headers=headers) as session:
                async with session.get(full_url) as resp:
                    text = await resp.text()
                    return utils.parse_data(text)
        except Exception as e:
            Logger.log_error(e)
示例#18
0
    async def get_ticks(self):
        ticks = pd.DataFrame(data=[], columns=formats.tick)

        try:
            request_url = 'ticker.do'
            stock_data = await self.rest_send(request_url, params={
                    'symbol': 'all'})

            current_date = datetime.datetime.now()
            for market in stock_data:
                ticks = ticks.append(pd.Series(
                        data=[
                            self.name,
                            int(time.mktime(current_date.timetuple()))*1000,
                            market['symbol'],
                            market['ticker']['latest'],],
                        index=formats.tick,
                        name=current_date,))

            Logger.log_info(ticks)
        except Exception as e:
            Logger.log_error(e)

        finally:
            return ticks
示例#19
0
    async def get_ticks(self):
        ticks = pd.DataFrame(data=[], columns=formats.tick)

        try:
            request_url = 'public/Ticker'
            stock_data = await self.rest_send(
                    request_url,
                    params={'pair':','.join(
                        self._get_markets().index.values.tolist())},)

            current_date = datetime.datetime.now()
            for market_name in stock_data['result'].keys():
                market = self._get_markets().loc[market_name]
                ticks = ticks.append(pd.Series(
                        data=[
                            self.name,
                            int(time.mktime(current_date.timetuple()))*1000,
                            '_'.join([market.at['base'], market.at['quot']]),
                            stock_data['result'][market_name]['c'][0],],
                        index=formats.tick,
                        name=current_date,))

            Logger.log_info(ticks)
        except Exception as e:
            Logger.log_error(e)

        finally:
            return ticks
示例#20
0
    async def get_ticks(self):
        ticks = pd.DataFrame(data=[], columns=formats.tick)

        try:
            request_url = 'pairs'
            stock_data = await self.rest_send(request_url)

            current_date = datetime.datetime.now()
            for market in stock_data['data']:
                if market['last_price'] is not None:
                    ticks = ticks.append(
                        pd.Series(
                            data=[
                                self.name,
                                int(time.mktime(current_date.timetuple())) *
                                1000,
                                '_'.join([
                                    market['base']['name'].lower(),
                                    market['quote']['name'].lower()
                                ]),
                                market['last_price'],
                            ],
                            index=formats.tick,
                            name=current_date,
                        ))

            Logger.log_info(ticks)
        except Exception as e:
            Logger.log_error(e)

        finally:
            return ticks
示例#21
0
 async def ws_send(self, message):
     try:
         if self.__ws_socket is not None:
             self.__request_counter += 1
             await self.__ws_socket.send(json.dumps(message))
     except Exception as e:
         Logger.log_error(e)
示例#22
0
    async def request(self, request_url, params=None, type_='get'):
        response = None

        try:
            full_url = self.__base_url + request_url

            if type_ == 'get' and params is not None:
                full_url += '?' + urllib.parse.urlencode(params)

            now = datetime.datetime.now()
            self.__timeline = self.__timeline.loc[now - datetime.timedelta(
                seconds=REQUEST_INTERVAL_SECONDS):now]
            if (self.__timeline.loc[:, "request"].count() >
                    self.__request_limit):
                self.__queue.append(full_url)
                await asyncio.sleep(REQUEST_INTERVAL_SECONDS +
                                    len(self._queue) // self.__request_limit *
                                    REQUEST_INTERVAL_SECONDS)

            if type_ == 'get':
                response = await self.__process_request(full_url)
            else:
                response = await self.__post(full_url, params=params)

            return response
        except Exception as e:
            Logger.log_error(e)

        finally:
            return response
示例#23
0
def retrieveVideoInfo(videoUrl):
    try:
        xbmcaddon.Addon('plugin.video.iplayer')
    except:
        dialog = xbmcgui.Dialog()
        dialog.ok('[B][COLOR red]MISSING: [/COLOR][/B] BBC IPlayer v2 add-on',
                  '',
                  'Please install BBC IPlayer v2 add-on created by Hitcher!',
                  'Available at http://code.google.com/p/xbmc-iplayerv2/')
        raise
    video_info = VideoInfo()
    video_info.set_video_hosting_info(getVideoHostingInfo())
    video_info.set_video_id(videoUrl)
    addon_url = 'plugin://plugin.video.iplayer/?'
    video_params = videoUrl.split('/')

    addon_url += 'pid=%s' % video_params[0]
    video_info.add_video_link(VIDEO_QUAL_SD,
                              addon_url,
                              addUserAgent=False,
                              addReferer=False)
    video_info.set_video_image(
        'http://www.bbc.co.uk/iplayer/images/episode/%s_512_288.jpg' %
        video_params[0])
    video_info.set_video_name(video_params[1].replace('_', ' '))

    Logger.logDebug(addon_url)
    video_info.set_video_stopped(False)
    return video_info
示例#24
0
def get_addfriend_inte_seconds():
    config = MonitorConfig()
    addfriend_inte_seconds = config.get_value('appiumConfig', 'addfriend_inte_seconds')
    Logger.println(f"【get_addfriend_inte_seconds={addfriend_inte_seconds}】")
    if not addfriend_inte_seconds:
        return '3600'
    return addfriend_inte_seconds
示例#25
0
    async def get_ticks(self):
        ticks = pd.DataFrame(data=[], columns=formats.tick)

        try:
            request_url = 'Api_Market/getPriceList'
            stock_data = await self.rest_send(request_url)

            current_date = datetime.datetime.now()
            for quot_name in stock_data.keys():
                for market in stock_data[quot_name]:
                    ticks = ticks.append(
                        pd.Series(
                            data=[
                                self.name,
                                int(time.mktime(current_date.timetuple())) *
                                1000,
                                '_'.join(
                                    [market['coin_from'], market['coin_to']]),
                                market['current'],
                            ],
                            index=formats.tick,
                            name=current_date,
                        ))

            Logger.log_info(ticks)
        except Exception as e:
            Logger.log_error(e)

        finally:
            return ticks
示例#26
0
def getAppiumConfig():
    deviceId = ''
    deviceVersion = ''
    try:
        # 读取设备 id
        # 正则表达式匹配出 id 信息
        deviceId = getDeviceid()[0]
        # readDeviceId = list(os.popen('adb devices').readlines())
        # deviceId = re.findall(r'^\w*\b', readDeviceId[1])[0]
        # 读取设备系统版本号
        deviceAndroidVersion = list(
            os.popen(f'adb -s {deviceId} shell getprop ro.build.version.release').readlines())
        deviceVersion = re.findall(r'^\w*\b', deviceAndroidVersion[0])[0]
    except Exception as e:
        Logger.println(f"get deviceAndroidVersion Exception【e={e}】")

    appiumConfig = {
        "platformName": "Android",
        "deviceName": deviceId,
        "udid": deviceId,
        "platformVersion": deviceVersion,
        "appPackage": "com.tencent.mm",
        "appActivity": "com.tencent.mm.ui.LauncherUI",
        "noReset": "True",
        "unicodeKeyboard": "True",
        "resetKeyboard": "True"
    }
    Logger.println(f"【appium_config={appiumConfig}】")
    return appiumConfig
示例#27
0
    async def get_ticks(self):
        ticks = pd.DataFrame(data=[], columns=formats.tick)

        try:
            request_url = 'ticker_utc'
            stock_data = await self.rest_send(request_url,
                                              params={
                                                  'currency': 'all',
                                                  'format': 'json',
                                              })

            current_date = datetime.datetime.now()
            for market_name in stock_data.keys():
                if isinstance(stock_data[market_name], dict):
                    ticks = ticks.append(
                        pd.Series(
                            data=[
                                self.name,
                                int(time.mktime(current_date.timetuple())) *
                                1000,
                                '_'.join([market_name, 'krw']),
                                stock_data[market_name]['last'],
                            ],
                            index=formats.tick,
                            name=current_date,
                        ))

            Logger.log_info(ticks)
        except Exception as e:
            Logger.log_error(e)

        finally:
            return ticks
示例#28
0
async def on_command(update, store):
    # Отлично, мы снова готовы писать команду!
    # Итак давай скажем, что мы хотим проверить беседа ли это?
    if update.is_multichat:
        await store.reply("Вау, это сообщение пришло из беседы.")
    # В остальных случаях будет else

    # А что если мы хотим загрузить какое-нибудь изображение??????
    # Значит, что мы можем предпринять?
    # Выход один, придётся вызывать метод
    photo = await store.upload_photo(
        "example/google-chan.png"
    )  # Давай загрузим смущающуюся Google-Chan из папки Example
    # ЗАМЕЧУ, что аргументом может быть bytes, тоесть io.Bytes тоже будет работать с его буффером, который зачастую используется для
    # сохранения из Pillow, и других модулей
    if photo:
        Logger.Slog(
            "Теперь у нас есть изображение на сервере ВК, давайте пока его оставим в покое."
        )

    # А что если мы хотим загрузить документ???? Казалось бы цель опять не достигаема, но нам на помощь опять приходит метод
    # Всё как с загрузкой фото, только на этот раз загрузим текст из папки, но также можно использовать io.Bytes, bytes и т.д.
    doc = await store.upload_doc(
        "example/super_file.txt", filename="yui_bot_test_ex.txt"
    )  # Загрузим его на сервер с именем, yui_bot_test_ex.txt, по умолчанию будет file.png
    if doc:
        Logger.Slog("И снова шок, теперь у нас есть загруженный документ")

    # Так теперь давайте отправлять нашему пользователю, а то заждался наверное пока я тут пишу это.
    attachments = [photo, doc]

    # ИЛИ await store.reply("text", attachment=photo)
    return await store.reply("Спасибо за ожидание, меня вводили в курс дела",
                             attachment=attachments)
示例#29
0
    async def get_markets(self):
        markets = pd.DataFrame(data=[], columns=formats.market)

        try:
            request_url = 'v1/mdata'
            stock_data = await self.rest_send(
                request_url,
                params={
                    'cmd': 'pairList',
                },
            )

            for market in stock_data['result']:
                markets = markets.append(
                    pd.Series(data=[
                        self.name,
                        market['pair'].split('_')[0].lower(),
                        market['pair'].split('_')[1].lower(),
                        None,
                        None,
                    ],
                              index=formats.market,
                              name=market['id']))

        except Exception as e:
            Logger.log_error(e)

        finally:
            return markets
示例#30
0
文件: SnapVideo.py 项目: noba3/KoTos
 def isVideoHostedByYou(self, video_url):
     isVideoHoster = False
     videoId = self.getVideoId(video_url)
     if videoId is not None:
         Logger.logDebug('Snapper selected = ' + self.getModuleName() + ' for video URL = ' + video_url)
         isVideoHoster = True
     return isVideoHoster
示例#31
0
def __addMovieInfo_in_item(item):
    if item.get_next_action_name() == 'Movie_Streams':
        year = unicode(item.get_moving_data()['movieYear'], errors='ignore').encode('utf-8')
        title = unicode(item.get_moving_data()['movieTitle'], errors='ignore').encode('utf-8')
        meta = None
        try:
            global __metaget__
            if __metaget__ is None:
                __metaget__ = metahandlers.MetaData()
            meta = __metaget__.get_meta('movie', title, year=year)
        except:
            Logger.logDebug('Failed to load metahandler module')
        xbmc_item = item.get_xbmc_list_item_obj()
        
        if(meta is not None):
            xbmc_item.setIconImage(meta['thumb_url'])
            xbmc_item.setThumbnailImage(meta['cover_url'])
            videoInfo = {'trailer_url':meta['trailer_url']}
            for key, value in meta.items():
                if type(value) is str:
                    value = unicode(value).encode('utf-8')
                videoInfo[key] = value
            xbmc_item.setInfo('video', videoInfo)
            xbmc_item.setProperty('fanart_image', meta['backdrop_url'])
            item.add_request_data('videoInfo', videoInfo)
            
            contextMenuItems = []
            contextMenuItems.append(('Movie Information', 'XBMC.Action(Info)'))
            xbmc_item.addContextMenuItems(contextMenuItems, replaceItems=False)
        else:
            xbmc_item.setInfo('video', {'title':title, 'year':year})
            item.add_request_data('videoInfo', {'title':title, 'year':year})
示例#32
0
文件: SnapVideo.py 项目: noba3/KoTos
 def getVideoInfo(self, video_url):
     videoInfo = None
     videoId = self.getVideoId(video_url)
     if videoId is not None:
         Logger.logDebug('Snapper selected = ' + self.getModuleName() + ' for video URL = ' + video_url)
         videoInfo = self.__getVideoInfo(videoId)
     return videoInfo
示例#33
0
文件: Metadata.py 项目: noba3/KoTos
def __addMovieInfo_in_item(item):
    if item.get_next_action_name() == 'Movie_Streams':
        year = unicode(item.get_moving_data()['movieYear'],
                       errors='ignore').encode('utf-8')
        title = unicode(item.get_moving_data()['movieTitle'],
                        errors='ignore').encode('utf-8')
        meta = None
        try:
            global __metaget__
            if __metaget__ is None:
                __metaget__ = metahandlers.MetaData()
            meta = __metaget__.get_meta('movie', title, year=year)
        except:
            Logger.logDebug('Failed to load metahandler module')
        xbmc_item = item.get_xbmc_list_item_obj()

        if (meta is not None):
            xbmc_item.setIconImage(meta['thumb_url'])
            xbmc_item.setThumbnailImage(meta['cover_url'])
            videoInfo = {'trailer_url': meta['trailer_url']}
            for key, value in meta.items():
                if type(value) is str:
                    value = unicode(value).encode('utf-8')
                videoInfo[key] = value
            xbmc_item.setInfo('video', videoInfo)
            xbmc_item.setProperty('fanart_image', meta['backdrop_url'])
            item.add_request_data('videoInfo', videoInfo)

            contextMenuItems = []
            contextMenuItems.append(('Movie Information', 'XBMC.Action(Info)'))
            xbmc_item.addContextMenuItems(contextMenuItems, replaceItems=False)
        else:
            xbmc_item.setInfo('video', {'title': title, 'year': year})
            item.add_request_data('videoInfo', {'title': title, 'year': year})
示例#34
0
def retrieveVideoLinks(request_obj, response_obj):
    video_source_id = 1
    video_source_img = None
    video_source_name = None
    video_part_index = 0
    video_playlist_items = []
    ignoreAllLinks = False
    
    content = BeautifulSoup.SoupStrainer('blockquote', {'class':re.compile(r'\bpostcontent\b')})
    soup = HttpClient().getBeautifulSoup(url=request_obj.get_data()['episodeUrl'], parseOnlyThese=content)
    for e in soup.findAll('br'):
        e.extract()
    Logger.logDebug(soup)
    if soup.has_key('div'):
        soup = soup.findChild('div', recursive=False)
    prevChild = ''
    prevAFont = None
    for child in soup.findChildren():
        if (child.name == 'img' or child.name == 'b' or (child.name == 'font' and not child.findChild('a'))):
            if (child.name == 'b' and prevChild == 'a') or (child.name == 'font' and child == prevAFont):
                continue
            else:
                if len(video_playlist_items) > 0:
                    response_obj.addListItem(__preparePlayListItem__(video_source_id, video_source_img, video_source_name, video_playlist_items))
                if video_source_img is not None:
                    video_source_id = video_source_id + 1
                    video_source_img = None
                    video_source_name = None
                    video_part_index = 0
                    video_playlist_items = []
                ignoreAllLinks = False
        elif not ignoreAllLinks and child.name == 'a' and not re.search('multi', str(child['href']), re.IGNORECASE):
            video_part_index = video_part_index + 1
            video_link = {}
            video_link['videoTitle'] = 'Source #' + str(video_source_id) + ' | ' + 'Part #' + str(video_part_index) + ' | ' + child.getText()
            video_link['videoLink'] = str(child['href'])
            try:
                try:
                    __prepareVideoLink__(video_link)
                except Exception, e:
                    Logger.logFatal(e)
                    video_hosting_info = SnapVideo.findVideoHostingInfo(video_link['videoLink'])
                    if video_hosting_info is None or video_hosting_info.get_video_hosting_name() == 'UrlResolver by t0mm0':
                        raise
                    video_link['videoSourceImg'] = video_hosting_info.get_video_hosting_image()
                    video_link['videoSourceName'] = video_hosting_info.get_video_hosting_name()
                video_playlist_items.append(video_link)
                video_source_img = video_link['videoSourceImg']
                video_source_name = video_link['videoSourceName']
                
                item = ListItem()
                item.add_request_data('videoLink', video_link['videoLink'])
                item.add_request_data('videoTitle', video_link['videoTitle'])
                item.set_next_action_name('SnapAndPlayVideo')
                xbmcListItem = xbmcgui.ListItem(label='Source #' + str(video_source_id) + ' | ' + 'Part #' + str(video_part_index) , iconImage=video_source_img, thumbnailImage=video_source_img)
                item.set_xbmc_list_item_obj(xbmcListItem)
                response_obj.addListItem(item)
                prevAFont = child.findChild('font')
            except:
示例#35
0
def retrieveReloadedPlaylistVideoItems(playlistId):
    Logger.logFatal('YouTube Reloaded Playlist ID = ' + playlistId)
    soupXml = HttpUtils.HttpClient().getBeautifulSoup('http://gdata.youtube.com/feeds/api/playlists/' + playlistId)
    videoItemsList = []
    for media in soupXml.findChildren('track'):
        videoUrl = media.findChild('location').getText()
        videoItemsList.append(videoUrl)
    return videoItemsList
示例#36
0
def retrievePlaylistVideoItems(playlistId):
    Logger.logFatal('YouTube Playlist ID = ' + playlistId)
    soupXml = HttpUtils.HttpClient().getBeautifulSoup('http://gdata.youtube.com/feeds/api/playlists/' + playlistId + '?max-results=50')
    videoItemsList = []
    for media in soupXml.findChildren('media:player'):
        videoUrl = str(media['url'])
        videoItemsList.append(videoUrl)
    return videoItemsList
示例#37
0
def run_multi(func, args, name, i, repeat):
    log_name = os.path.join(log_dir, "%d.%s.log" % (i, name))
    log = Logger(strm=open(log_name, "w"))
    for j in range(repeat):
        t = func(*args)
        t.start()
        t.join()
        log.log(t.get())
    del log
示例#38
0
def addVideoInfoInPlayableItems(request_obj, response_obj):
    items = response_obj.get_item_list()
    playable_items = []
    for item in items:
        if item.get_next_action_name() == 'Play':
            playable_items.append(item)
    try:
        XBMCInterfaceUtils.callBackDialogProgressBar(getattr(sys.modules[__name__], '__addVideoInfo_in_item'), playable_items, 'Retrieving video info', failure_message=None)
    except Exception, e:
        Logger.logFatal(e)
示例#39
0
def addEmbeddedVideoInfoInPlayableItems(request_obj, response_obj):
    items = response_obj.get_item_list()
    playable_items = []
    for item in items:
        if item.get_next_action_name() == 'Play':
            playable_items.append(item)
    try:
        XBMCInterfaceUtils.callBackDialogProgressBar(getattr(sys.modules[__name__], '__addEmbeddedVideoInfo_in_item__'), playable_items, 'Retrieving video info', 'Failed to retrieve video information, please try again later')
    except Exception, e:
        Logger.logFatal(e)
示例#40
0
def __retrieveChannelTVShows__(tvChannelObj):
    running_tvshows = []
    finished_tvshows = []
    try:
        running_tvshows = __retrieveTVShows__(tvChannelObj["running_tvshows_url"])
        if(len(running_tvshows) == 0):
            running_tvshows.append({"name":"ENTER TO VIEW :: This is the only easy way to view!", "url":BASE_WSITE_URL + tvChannelObj["running_tvshows_url"]})
    except Exception, e:
        Logger.logFatal(e)
        Logger.logDebug('Failed to load a channel... Continue retrieval of next tv show')
 def performAction(self, actionId):
     ProgressDisplayer().start('Processing request...')
     while actionId is not None:
         Logger.logInfo('Action to be performed ::' + actionId)
         turtle_route = self.getTurtleRoute(actionId)
         for move in turtle_route.moves:
             self.moveTurtle(move)
         actionId = self.judgeTurtleNextAction(turtle_route)
         
     ProgressDisplayer().end()
示例#42
0
def addPlaylistVideosInfoInPlayableItems(request_obj, response_obj):
    items = response_obj.get_item_list()
    try:
        for item in items:
            if item.get_next_action_name() == 'Play':
                videoItems = __processPlaylistAndAddVideoItem__(item)
                if videoItems is not None and len(videoItems) > 0:
                    items.remove(item)
                    items.extend(videoItems)
    except Exception, e:
        Logger.logFatal(e)
示例#43
0
 def __send_request_to_google_analytics(self, utm_url):
     ua = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3'
     import urllib2
     try:
         if self.addon_context.addon.getSetting('ga_enabled') == 'true': #default is disabled
             req = urllib2.Request(utm_url, None, {'User-Agent':ua})
             response = urllib2.urlopen(req)
             print response.read()
             response.close()
     except Exception, e:
         Logger.logError(e)
         Logger.logDebug ("GA fail: %s" % utm_url)
示例#44
0
def run_multi(func, name, i):
    log_name = os.path.join(log_dir, '%d.%s.log' % (i, name))
    log = Logger(strm=open(log_name, 'w'))
    li = []
    for j in range(i):
        li.append(func(j))
    for j in range(i):
        li[j].start()
    for j in range(i):
        li[j].join()
        log.log(li[j].get())
    del log
 def judgeTurtleNextAction(self, actionObj):
     ProgressDisplayer().displayMessage(80, line1='Preparing items for display or play', line2='Total items: ' + str(len(self.response_obj.get_item_list())))
     if self.response_obj.get_redirect_action_name() is None:
         isAnyPlayableItem = False
         isItemsList = False
         playlist_type = None
         for item in self.response_obj.get_item_list():
             nextActionId = actionObj.get_next_action_map()[item.get_next_action_name()]
             if nextActionId == '__play__':
                 if item.get_moving_data().has_key('pluginUrl'):
                     XBMCInterfaceUtils.executePlugin(item.get_moving_data()['pluginUrl'])
                 else:
                     if not isAnyPlayableItem and not XBMCInterfaceUtils.isPlaying():
                         XBMCInterfaceUtils.clearPlayList()  # Clear playlist item only when at least one video item is found.
                     playlist_type = XBMCInterfaceUtils.addPlayListItem(item)
                     isAnyPlayableItem = True
             elif nextActionId == '__service_response__':
                 # Do Nothing , get response object from container for parameters to be returned
                 pass
             elif nextActionId == '__download__':
                 downloadPath = self.addon_context.addon.getSetting('downloadPath')
                 if downloadPath is None or downloadPath == '':
                     XBMCInterfaceUtils.displayDialogMessage("Download path not provided", "Please provide download path in add-on settings.", "The download path should be a local directory.")
                     self.addon_context.addon.openSettings(sys.argv[ 0 ])
                     downloadPath = self.addon_context.addon.getSetting('downloadPath')
                 if downloadPath is not None and downloadPath != '':
                     XBMCInterfaceUtils.downloadVideo(item, downloadPath)
             elif nextActionId == '__resolved__':
                 XBMCInterfaceUtils.setResolvedMediaUrl(item)
             else:
                 isItemsList = True
                 is_Folder = self.addon_context.isNextActionFolder(actionObj.get_action_id(), item.get_next_action_name())
                 downloadAction = self.addon_context.getDownloadActionIfDownloadable(actionObj.get_action_id(), item.get_next_action_name())
                 if(downloadAction is not None):
                     XBMCInterfaceUtils.addContextMenuItem(item, 'Download Video', downloadAction)
                 XBMCInterfaceUtils.addFolderItem(item, nextActionId, is_Folder)
             del item  # deletes item
         if isAnyPlayableItem == True:
             ProgressDisplayer().end()
             try:
                 if playlist_type is not None:
                     XBMCInterfaceUtils.play(list_type=playlist_type)
                 else:
                     XBMCInterfaceUtils.play()
             except Exception, e:
                 Logger.logFatal(e)
         elif isItemsList:
             if self.response_obj.get_xbmc_sort_method() is not None:
                 XBMCInterfaceUtils.sortMethod(self.response_obj.get_xbmc_sort_method())
             if self.response_obj.get_xbmc_content_type() is not None:
                 XBMCInterfaceUtils.setContentType(self.response_obj.get_xbmc_content_type())
             XBMCInterfaceUtils.setSortMethods()
示例#46
0
def __initializeSnappers():
    snapper_filepath = AddonUtils.getCompleteFilePath(Container().getAddonContext().addonPath, 'snapvideo', 'snappers.xml')
    if not AddonUtils.doesFileExist(snapper_filepath):
        snapper_filepath = AddonUtils.getCompleteFilePath(Container().getAddonContext().turtle_addonPath, 'lib/snapvideo', 'snappers.xml')
    global snappers
    if snappers is not None:
        return snappers
    snappers = []
    Logger.logDebug('Loading snappers.xml from path... ' + snapper_filepath)
    snappers_xml = AddonUtils.getBeautifulSoupObj(snapper_filepath)
    for snapperTag in snappers_xml.findAll('snapper', attrs={'enabled':'true'}):
        snappers.append(Snapper(snapperTag))
    return snappers
示例#47
0
def start(addon_id, addon_ver=None):
    try:
        Logger.logDebug(sys.argv)
        global __addon_id__
        __addon_id__ = addon_id
        __addon_ver__ = addon_ver
        
        containerObj = Container(addon_id=addon_id, addon_ver=addon_ver)
        action_id = containerObj.getTurtleRequest().get_action_id()
        containerObj.performAction(action_id)
    except urllib2.URLError, e:
        Logger.logFatal(e)
        XBMCInterfaceUtils.displayDialogMessage('Unable to connect', 'Please choose a different source if available in add-on.', 'Website used in add-on is down, try to access using web browser.', 'Please share logs with developer if problem keeps coming!')
示例#48
0
 def __init__(self, params=None):
     Logger.logDebug(params)
     self.set_action_id('__start__')
     if params is None:
         self.set_params({})
     elif type(params) is str:
         self.set_params(HttpUtils.getUrlParams(params))
     elif type(params) is dict:
         self.set_params(params)
     if self.get_params().has_key('actionId') and self.get_params()['actionId'] != '':
         self.set_action_id(self.get_params()['actionId'])
     if self.get_params().has_key('data') and self.get_params()['data'] != '':
         self.set_data(AddonUtils.decodeData(self.get_params()['data']))
示例#49
0
def addFavouriteTVShow(request_obj, response_obj):
    addonContext = Container().getAddonContext()
    filepath = AddonUtils.getCompleteFilePath(baseDirPath=addonContext.addonProfile, extraDirPath=AddonUtils.ADDON_SRC_DATA_FOLDER, filename=FAV_TV_SHOWS_JSON_FILE, makeDirs=True)
    favTVShowsJsonObj = {}
    if AddonUtils.doesFileExist(filepath):
        try:
            favTVShowsJsonObj = AddonUtils.getJsonFileObj(filepath)
        except ValueError:
            AddonUtils.deleteFile(filepath)
            Logger.logError('CORRUPT FILE DELETED = ' + filepath)
    favTVShowsJsonObj[request_obj.get_data()['tvShowName']] = {"tvShowName":request_obj.get_data()['tvShowName'] , "tvShowUrl": request_obj.get_data()['tvShowUrl']}
    AddonUtils.saveObjToJsonFile(filepath, favTVShowsJsonObj)
    d = xbmcgui.Dialog()
    d.ok('TV Show favourite added successfully.', 'ENJOY!')
示例#50
0
    def getInstance(cls, *args, **kargs):
        '''Static method to have a reference to **THE UNIQUE** instance'''
        
        if cls.__instance is None:
            
            # Critical section start
            # cls.__lockObj.acquire()
            try:
                if cls.__instance is None:
                    cls.__instance = object.__new__(cls)
            except Exception, e:
                Logger.logFatal('Error occurred while creating singleton obj')
                Logger.logFatal(e)
                raise
#            finally:
#                #  Exit from critical section whatever happens
#                #cls.__lockObj.release()
#                # Critical section end
#                pass
            
            # Initialize **the unique** instance
            try:
                if cls.__instance is not None:
                    cls.__instance.__initialize__(**kargs)
            except Exception, e:
                Logger.logFatal('Error occurred while initialization of singleton obj')
                Logger.logFatal(e)
                raise
示例#51
0
def retrieveAudioInfo(audioUrl):
    url = 'https://api.soundcloud.com/' + audioUrl
    jObj = json.loads(HttpUtils.HttpClient().getHtmlContent(url=url))
    
    video_info = VideoInfo()
    video_info.set_video_hosting_info(getVideoHostingInfo())
    video_info.set_video_id(url)
    video_info.add_video_link(VIDEO_QUAL_SD, jObj['http_mp3_128_url'], addUserAgent=False, addReferer=False)
    video_info.set_video_image('')
    video_info.set_video_name('')
    
    Logger.logDebug(jObj['http_mp3_128_url'])
    video_info.set_video_stopped(False)
    return video_info
示例#52
0
def playZappyVideo(request_obj, response_obj):
    Logger.logDebug(request_obj.get_data());
    Container().ga_client.reportAction('zappyvideo')
    video_id = request_obj.get_data()['videoId']
    port = request_obj.get_data()['port']
    ipaddress = request_obj.get_data()['client_ip']
    video_url = "http://" + ipaddress + ":" + str(port) + "/?videoId=" + video_id
    item = ListItem()
    item.get_moving_data()['videoStreamUrl'] = video_url
    item.set_next_action_name('Play')
    xbmcListItem = xbmcgui.ListItem(label='Streaming Video')
    item.set_xbmc_list_item_obj(xbmcListItem)
    response_obj.addListItem(item)
    response_obj.addServiceResponseParam("status", "success")
    response_obj.addServiceResponseParam("message", "Enjoy the video!")
示例#53
0
def __check_media_url(video_url):
    try:
        request = urllib2.Request(video_url, headers=HttpUtils.HEADERS)
        request.get_method = lambda : 'HEAD'
        response = urllib2.urlopen(request)
        content_type = response.info().gettype()
        try:
            if(APPLICATION_MEDIA_TYPES.index(content_type) >= 0):
                return 'application'
        except ValueError:
            if re.search('audio/', content_type):
                return 'audio'
            elif re.search('video/', content_type):
                return 'video'
    except urllib2.HTTPError, he:
        Logger.logError(he)
示例#54
0
def retrieveVideoInfo(videoUrl):
    try: 
        xbmcaddon.Addon('plugin.video.vevo')
    except: 
        dialog = xbmcgui.Dialog()
        dialog.ok('[B][COLOR red]MISSING: [/COLOR][/B] VEVO add-on', '', 'Please install VEVO add-on created by BlueCop!', 'Available at http://code.google.com/p/bluecop-xbmc-repo/')
        raise
    video_info = VideoInfo()
    video_info.set_video_hosting_info(getVideoHostingInfo())
    video_info.set_video_id(videoUrl)
    addon_url = 'plugin://plugin.video.vevo/?'
    vevo_id = videoUrl.split('/')[-1]
    if videoUrl.startswith('playlist'):
        url = urllib.quote_plus('http://api.vevo.com/mobile/v2/playlist/%s.json?' % vevo_id)
        addon_url += 'url=%s' % url
        addon_url += '&mode=playPlaylist'
        addon_url += '&duration=210'
        addon_url += '&page=1'
        video_info.add_video_link(XBMC_EXECUTE_PLUGIN, addon_url, addUserAgent=False, addReferer=False)
        video_info.set_video_image('')
        video_info.set_video_name(' ')
    else:
        url = 'http://videoplayer.vevo.com/VideoService/AuthenticateVideo?isrc=%s&extended=true' % vevo_id
        video = json.loads(HttpUtils.HttpClient().getHtmlContent(url=url))['video']
        title = ''
        try:title = video['title'].encode('utf-8')
        except: title = ''                  
        video_image = video['imageUrl']
        if len(video['featuredArtists']) > 0:
            feats = ''
            for featuredartist in video['featuredArtists']:
                # featuredartist_image = featuredartist['image_url']
                featuredartist_name = featuredartist['artistName'].encode('utf-8')
                feats += featuredartist_name + ', '
            feats = feats[:-2]
            title += ' (ft. ' + feats + ')'
                
        addon_url += 'url=%s' % vevo_id
        addon_url += '&mode=playVideo'
        addon_url += '&duration=210'
        video_info.add_video_link(VIDEO_QUAL_SD, addon_url, addUserAgent=False, addReferer=False)
        video_info.set_video_image(video_image)
        video_info.set_video_name(title)
    
    Logger.logDebug(addon_url)
    video_info.set_video_stopped(False)
    return video_info
示例#55
0
def removeFavouriteTVShow(request_obj, response_obj):
    addonContext = Container().getAddonContext()
    filepath = AddonUtils.getCompleteFilePath(baseDirPath=addonContext.addonProfile, extraDirPath=AddonUtils.ADDON_SRC_DATA_FOLDER, filename=FAV_TV_SHOWS_JSON_FILE, makeDirs=True)
    favTVShowsJsonObj = {}
    if AddonUtils.doesFileExist(filepath):
        try:
            favTVShowsJsonObj = AddonUtils.getJsonFileObj(filepath)
            del favTVShowsJsonObj[request_obj.get_data()['tvShowName']]
            AddonUtils.saveObjToJsonFile(filepath, favTVShowsJsonObj)
            d = xbmcgui.Dialog()
            d.ok('TV Show removed favourite successfully.', 'You can add this TV Show again using same way.', 'ENJOY!')
            xbmc.executebuiltin("Container.Refresh()")
        except ValueError:
            AddonUtils.deleteFile(filepath)
            Logger.logError('CORRUPT FILE DELETED = ' + filepath)
            d = xbmcgui.Dialog()
            d.ok('Failed to remove TV Show favourite.', 'Please try again.')
示例#56
0
def CreateSession (userID, displayName):
	SessionTimeout = int(Context.Config.getSession().getTimeOut())
	CSRFTimeout    = int(Context.Config.getCSRF().getTimeOut())
	SessionToken = sha512(userID + Context.ip + str(time())).hexdigest()
	CurrentUser = Context.DB.find (dict(userid=userID), 'User')
	if len(CurrentUser) == 0:
		CurrentUser = Object( dict (
										userId = userID,
										displayName=displayName,
										accessLevel='Participant',
										session = dict (
												ip=Context.ip,
												expirytime=time() + SessionTimeout,
												token=SessionToken
										),
										CSRF = dict (
											CSRFToken = sha512(userID + Context.ip + str(time())).hexdigest(),
											ExpiryTime = time() + CSRFTimeout
										)
									)
								)
		Context.DB.insert (CurrentUser, 'User')
	elif len(CurrentUser) == 1:
		CurrentUser = CurrentUser[0]
		CurrentUser.getSession().setIP (Context.ip);
		CurrentUser.getSession().setExpiryTime (time() + SessionTimeout);
		CurrentUser.getSession().setToken (SessionToken)
		CSRFExpiryTime = CurrentUser.getCSRF().getExpiryTime()
		if time() > CSRFExpiryTime:
			CurrentUser.getCSRF().setCSRFToken (sha512(userID + Context.ip + str(time())).hexdigest())
			CurrentUser.getCSRF().setExpiryTime (time() + CSRFTimeout)
		MongoID = CurrentUser.getID()
		CurrentUser.delID()
		Context.DB.save (dict(_id=ObjectId(MongoID)), CurrentUser, 'User')
	else:
		Logger.critical ("More than one User records for User ID : %s" % userID)
		raise web.internalerror()
	Context.User.setAuthenticated(True)
	Context.User.setUserID(CurrentUser.getUserID())
	Context.User.setDisplayName(CurrentUser.getDisplayName())
	Context.User.setAccessLevel(CurrentUser.getAccessLevel())
	Context.User.setSessionID(SessionToken)
	Context.User.setCSRFToken(CurrentUser.getCSRF().getCSRFToken())
	Context.SetCookie ('Session', SessionToken)