def get_data(url): import ssl data = None for i in range(3): try: request = py_urllib2.Request(url, headers=headers) logger.debug(url) data = py_urllib2.urlopen(request).read() except Exception as e: logger.debug('Exception:%s', e) logger.debug(traceback.format_exc()) try: data = py_urllib2.urlopen(request, headers=headers, context=ssl.SSLContext( ssl.PROTOCOL_TLSv1)).read() except: try: data = py_urllib2.urlopen( request, headers=headers, context=ssl.SSLContext( ssl.PROTOCOL_TLSv1_2)).read() except: try: data = py_urllib2.urlopen( request, headers=headers, context=ssl.SSLContext( ssl.PROTOCOL_TLSv1_3)).read() except: pass if data is not None: return data sleep(5)
def get_url(cls, source_id, quality, mode): #logger.debug('EVERYON get_url:%s %s', source_id, quality) try: url = 'http://www.hcnmobile.tv/main/proc/get_ch_data.php' params = {'chId': source_id} postdata = py_urllib.urlencode(params) request = py_urllib2.Request(url, postdata) request.add_header( 'Cookie', 'etv_api_key=88abc0e1c8e61c8c3109788ec8392c7fd86c16765fc0b80d5f2366c84c894203' ) response = py_urllib2.urlopen(request) data = json.load(response, encoding='utf8') #url2 = data['medias'][0]['url'] if len(data['medias']) > 0 else None url2 = data['media']['url'].replace('\\', '') #logger.debug('EVERYON22 :%s', url2) cookie = response.info().getheader('Set-Cookie') if cookie is None: # 종편 req = py_urllib2.Request(url2) res = py_urllib2.urlopen(req) data = res.read() match = re.compile(r'chunklist(?P<tmp>.*?)$').search(data) if match: redirect_url = '%schunklist%s' % ( url2.split('playlist.m3u8')[0], match.group('tmp')) return 'redirect', redirect_url #return 'return_after_read', redirect_url else: #logger.debug('EVERYON22 cookie :%s', cookie) ret = url2 info = {} info['Key-Pair-Id'] = '' info['Policy'] = '' info['Signature'] = '' for c in cookie.split(','): c = c.strip() if c.startswith('CloudFront-Key-Pair-Id'): info['Key-Pair-Id'] = c.split(';')[0].split('=')[1] if c.startswith('CloudFront-Policy'): info['Policy'] = c.split(';')[0].split('=')[1] if c.startswith('CloudFront-Signature'): info['Signature'] = c.split(';')[0].split('=')[1] ret = ret.replace('live.m3u8', 'live_hd.m3u8') #tmp = 'Key-Pair-Id=%s;Policy=%s;Signature=%s' % (info['Key-Pair-Id'], info['Policy'], info['Signature']) ret = '%s?Key-Pair-Id=%s&Policy=%s&Signature=%s' % ( ret, info['Key-Pair-Id'], info['Policy'], info['Signature']) return 'return_after_read', ret except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc())
def get_return_data(cls, source_id, url, mode): try: #logger.debug(url) tmps = url.split('?') pre = '/'.join(tmps[0].split('/')[:-1]) + '/' post = tmps[1] req = py_urllib2.Request(url) res = py_urllib2.urlopen(req) data = res.read() #logger.debug(data) #index_list = ['index_576p30.m3u8', 'index_hd.m3u8'] #for index in index_list: if data.find('index_576p30.m3u8') != -1 or data.find( 'index_hd.m3u8') != -1: url = url.replace('index.m3u8', 'index_576p30.m3u8') url = url.replace('index.m3u8', 'index_hd.m3u8') req = py_urllib2.Request(url) res = py_urllib2.urlopen(req) data = res.read() #logger.debug(data) data = re.sub('index_576p30', pre + 'index_576p30', data) data = re.sub('index_hd', pre + 'index_hd', data) data = re.sub('.ts', '.ts?' + post, data) return data else: data = re.sub('live', pre + 'live', data) data = re.sub('.ts', '.ts?' + post, data) data = re.sub('chunklist', pre + 'chunklist', data) #if mode == 'lc' or mode == 'url': if data.find('chunklist') == -1: if mode == 'web_play': data = cls.change_redirect_data(data) return data else: logger.debug('YYYYYYYYYYYYYYYYYYYYYYYYYY') match = re.search('http(.*?)$', data) if match: req = py_urllib2.Request(match.group(0)) res = py_urllib2.urlopen(req) data = res.read() result = re.compile('(.*?)\.ts').findall(data) for r in result: data = data.replace(r, '%s%s' % (pre, r)) return data except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc())
def trans_papago(text, source='ja', target='ko'): trans_papago_key = ModelSetting.get_list('trans_papago_key') for tmp in trans_papago_key: client_id, client_secret = tmp.split(',') try: if client_id == '' or client_id is None or client_secret == '' or client_secret is None: return text data = "source=%s&target=%s&text=%s" % (source, target, text) url = "https://openapi.naver.com/v1/papago/n2mt" requesturl = py_urllib2.Request(url) requesturl.add_header("X-Naver-Client-Id", client_id) requesturl.add_header("X-Naver-Client-Secret", client_secret) response = py_urllib2.urlopen(requesturl, data=data.encode("utf-8")) if sys.version_info[0] == 2: data = json.load(response, encoding='utf8') else: data = json.load(response) rescode = response.getcode() if rescode == 200: return data['message']['result']['translatedText'] else: continue except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) return text
def trans_name(name): trans_papago_key = ModelSetting.get_list('trans_papago_key') for tmp in trans_papago_key: client_id, client_secret = tmp.split(',') try: if client_id == '' or client_id is None or client_secret == '' or client_secret is None: return logger.debug(name) encText = py_urllib.quote(str(name)) logger.debug(encText) url = "https://openapi.naver.com/v1/krdict/romanization?query=" + encText requesturl = py_urllib2.Request(url) requesturl.add_header("X-Naver-Client-Id", client_id) requesturl.add_header("X-Naver-Client-Secret", client_secret) response = py_urllib2.urlopen(requesturl) if sys.version_info[0] == 2: data = json.load(response, encoding='utf8') else: data = json.load(response) rescode = response.getcode() logger.debug(data) if rescode == 200: return data else: continue except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) return
def get_live_json(source_id, quality, credential): try: quality = get_quality_to_pooq(quality) quality_list = get_live_quality_list(source_id) if not quality in quality_list: quality = quality_list[0] url = 'https://wapie.pooq.co.kr/v1/lives30/%s/url' % source_id params = DEFAULT_PARAM.copy() params['deviceModelId'] = 'Macintosh' params['authType'] = 'cookie' params['guid'] = get_guid() params['lastPlayId'] = 'none' params['quality'] = quality params['credential'] = credential url = '%s?%s' % (url, py_urllib.urlencode(params)) request = py_urllib2.Request(url) response = py_urllib2.urlopen(request) if sys.version_info[0] == 2: data = json.load(response, encoding='utf8') else: data = json.load(response) return data except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc())
def trans_google(text, source='ja', target='ko'): try: google_api_key = ModelSetting.get('trans_google_api_key') if google_api_key == '' or google_api_key is None: return text data = "key=%s&source=%s&target=%s&q=%s" % (google_api_key, source, target, text) url = "https://www.googleapis.com/language/translate/v2" requesturl = py_urllib2.Request(url) requesturl.add_header("X-HTTP-Method-Override", "GET") response = py_urllib2.urlopen(requesturl, data=data.encode("utf-8")) if sys.version_info[0] == 2: data = json.load(response, encoding='utf8') else: data = json.load(response) rescode = response.getcode() if rescode == 200: return data['data']['translations'][0]['translatedText'] else: return text except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) return text
def is_exist_in_library(filename): try: server_url = db.session.query(ModelSetting).filter_by(key='server_url').first().value server_token = db.session.query(ModelSetting).filter_by(key='server_token').first().value if server_url == '' or server_token == '': return True url = '%s/:/plugins/com.plexapp.plugins.SJVA/function/count_in_library?filename=%s&X-Plex-Token=%s' % (server_url, Logic.get_filename_encoding_for_plex(filename), server_token) logger.debug('URL:%s', url) request = py_urllib2.Request(url) response = py_urllib2.urlopen(request) data = response.read() logger.debug('is_exist_in_library ret:%s', data) if data == '0': return False else: try: tmp = int(data) if tmp > 0: return True except: return False #return True except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) return False
def add_remote(key, feed, remote_options_id): try: result = {} url = 'https://offcloud.com/api/remote' params = { 'key': key, 'url': feed.link, 'remoteOptionId': remote_options_id, 'folderId': feed.oc_folderid, } postdata = py_urllib.urlencode(params).encode('utf-8') request = py_urllib2.Request(url, postdata) response = py_urllib2.urlopen(request) data = response.read() result = json.loads(data) logger.debug('ADD REMOTE ret: %s', result) if 'error' in result and result['error'].startswith( "You have more than 100"): return 'over' feed.oc_requestId = result[ 'requestId'] if 'requestId' in result else '' feed.oc_status = result['status'] if 'status' in result else '' feed.oc_createdOn = result[ 'createdOn'] if 'createdOn' in result else '' feed.oc_error = result['error'] if 'error' in result else '' feed.oc_json = result except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc())
def plungin_command(req): try: command = req.form['cmd'] if command == 'get_plugin_list': url = 'https://raw.githubusercontent.com/soju6jan/sjva_support/master/plex_install_plugin_list.json' return {'ret':'success', 'data':requests.get(url).json()['list']} #return json.loads(requests.get(url).text) else: param1 = req.form['param1'] if 'param1' in req.form else '' param2 = req.form['param2'] if 'param2' in req.form else '' server_url = db.session.query(ModelSetting).filter_by(key='server_url').first().value server_token = db.session.query(ModelSetting).filter_by(key='server_token').first().value if param1 != '': param1 = py_urllib.quote(param1) url = '%s/:/plugins/com.plexapp.plugins.SJVA/function/command?cmd=%s¶m1=%s¶m2=%s&X-Plex-Token=%s' % (server_url, command, param1, param2, server_token) logger.debug('URL:%s', url) request = py_urllib2.Request(url) response = py_urllib2.urlopen(request) data = response.read() data = json.loads(data) return data except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc())
def search_api(cls, keyword): trans_papago_key = SystemModelSetting.get_list('trans_papago_key') for tmp in trans_papago_key: client_id, client_secret = tmp.split(',') try: if client_id == '' or client_id is None or client_secret == '' or client_secret is None: return text url = "https://openapi.naver.com/v1/search/movie.json?query=%s&display=100" % py_urllib.quote( str(keyword)) requesturl = py_urllib2.Request(url) requesturl.add_header("X-Naver-Client-Id", client_id) requesturl.add_header("X-Naver-Client-Secret", client_secret) #response = py_urllib2.urlopen(requesturl, data = data.encode("utf-8")) response = py_urllib2.urlopen(requesturl) if sys.version_info[0] == 2: data = json.load(response, encoding='utf8') else: data = json.load(response) rescode = response.getcode() if rescode == 200: return data else: continue except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc())
def retry(key, entity): try: url = 'https://offcloud.com/api/remote/retry/%s?key=%s' % ( entity.requestId, key) request = py_urllib2.Request(url) response = py_urllib2.urlopen(request) except Exception as e: logger.debug('Exception:%s', e) logger.debug(traceback.format_exc()) return None
def send_scan_command2(plugin_name, section_id, filename, callback_id, type_add_remove, call_from, callback_url=None): logger.debug('send_scan_command2') try: server_url = db.session.query(ModelSetting).filter_by(key='server_url').first().value server_token = db.session.query(ModelSetting).filter_by(key='server_token').first().value if callback_url is None: callback_url = '%s/%s/api/scan_completed' % (SystemModelSetting.get('ddns'), plugin_name) logger.debug('send_scan_command PATH:%s ID:%s', filename, section_id) #url = '%s/:/plugins/com.plexapp.plugins.SJVA/function/WaitFile?section_id=%s&filename=%s&callback=%s&callback_id=%s&type_add_remove=%s&call_from=%s&X-Plex-Token=%s' % (server_url, section_id, urllib.quote(filename.encode('cp949')), urllib.quote(callback_url), callback_id, type_add_remove, call_from, server_token) encode_filename = Logic.get_filename_encoding_for_plex(filename) url = '%s/:/plugins/com.plexapp.plugins.SJVA/function/WaitFile?section_id=%s&filename=%s&callback=%s&callback_id=%s&type_add_remove=%s&call_from=%s&X-Plex-Token=%s' % (server_url, section_id, encode_filename, py_urllib.quote(callback_url), callback_id, type_add_remove, call_from, server_token) logger.debug('URL:%s', url) request = py_urllib2.Request(url) response = py_urllib2.urlopen(request) data = response.read() logger.debug('_send_scan_command ret:%s', data) scan_server = db.session.query(ModelSetting).filter_by(key='scan_server').first().value if scan_server != '': servers = scan_server.split(',') for s in servers: try: s = s.strip() s_url, s_token = s.split('&') url = '%s/:/plugins/com.plexapp.plugins.SJVA/function/WaitFile?section_id=&filename=%s&callback=&callback_id=&type_add_remove=%s&call_from=%s&X-Plex-Token=%s' % (s_url.strip(), encode_filename, type_add_remove, call_from, s_token.strip()) request = py_urllib2.Request(url) response = py_urllib2.urlopen(request) s_data = response.read() logger.debug('scan_server2 : %s ret:%s', s_url, s_data) except Exception as exception: logger.debug('Exception:%s', exception) logger.debug(traceback.format_exc()) return data except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc())
def get_remote_account(key): try: url = 'https://offcloud.com/api/remote/accounts' params = {'key': key} postdata = py_urllib.urlencode(params).encode('utf-8') request = py_urllib2.Request(url, postdata) response = py_urllib2.urlopen(request) data = json.load(response) if 'data' in data: return data['data'] else: return None except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc()) return None
def get_live_quality_list(source_id): try: url = 'https://wapie.pooq.co.kr/v1/lives30/%s' % source_id params = DEFAULT_PARAM.copy() params['credential'] = 'none' url = '%s?%s' % (url, py_urllib.urlencode(params)) request = py_urllib2.Request(url) response = py_urllib2.urlopen(request) if sys.version_info[0] == 2: data = json.load(response, encoding='utf8') else: data = json.load(response) result = data['result']['qualityList'][0]['quality'] return result except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc())
def send_scan_command(modelfile, plugin_name): entity = modelfile logger.debug('send_scan_command') try: server_url = db.session.query(ModelSetting).filter_by(key='server_url').first().value server_token = db.session.query(ModelSetting).filter_by(key='server_token').first().value if server_url == '': logger.debug('server_url is empty!') return callback_url = '%s/%s/api/scan_completed' % (SystemModelSetting.get('ddns'), plugin_name) filename = entity.plex_abspath if entity.plex_abspath is not None else os.path.join(entity.scan_abspath, entity.filename) logger.debug('send_scan_command PATH:%s ID:%s', entity.plex_abspath, entity.plex_section_id) encode_filename = Logic.get_filename_encoding_for_plex(filename) url = '%s/:/plugins/com.plexapp.plugins.SJVA/function/WaitFile?section_id=%s&filename=%s&callback=%s&callback_id=%s&type_add_remove=ADD&call_from=FILE_MANAGER&X-Plex-Token=%s' % (server_url, entity.plex_section_id, encode_filename, py_urllib.quote(callback_url), entity.id, server_token) logger.debug('URL:%s', url) request = py_urllib2.Request(url) response = py_urllib2.urlopen(request) data = response.read() logger.debug(url) logger.debug('_send_scan_command ret:%s', data) entity.send_command_time = datetime.now() scan_server = db.session.query(ModelSetting).filter_by(key='scan_server').first().value if scan_server != '': servers = scan_server.split(',') for s in servers: try: s = s.strip() s_url, s_token = s.split('&') url = '%s/:/plugins/com.plexapp.plugins.SJVA/function/WaitFile?section_id=&filename=%s&callback=&callback_id=&type_add_remove=ADD&call_from=FILE_MANAGER&X-Plex-Token=%s' % (s_url.strip(), encode_filename, s_token.strip()) #request = py_urllib2.Request(url) #response = py_urllib2.urlopen(request) #data = response.read() logger.debug(url) res = requests.get(url, timeout=30) logger.debug('scan_server : %s status_code:%s', res.status_code) except Exception as exception: logger.debug('Exception:%s', exception) logger.debug(traceback.format_exc()) #DBManager.update_status_download_korea_tv(entity) except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc())
def add_remote_by_magnet(key, magnet, remote_options_id, folder_id): try: url = 'https://offcloud.com/api/remote' params = { 'key': key, 'url': magnet, 'remoteOptionId': remote_options_id, 'folderId': folder_id, } postdata = py_urllib.urlencode(params).encode('utf-8') request = py_urllib2.Request(url, postdata) response = py_urllib2.urlopen(request) data = response.read() result = json.loads(data) return result except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc())
def get_live_list(): try: url = 'https://wapie.pooq.co.kr/v1/livesgenresort30/' params = DEFAULT_PARAM.copy() params['credential'] = 'none' params['orderby'] = 'g' url = '%s?%s' % (url, py_urllib.urlencode(params)) #logger.debug('get_live_list:%s', url) request = py_urllib2.Request(url) response = py_urllib2.urlopen(request) if sys.version_info[0] == 2: data = json.load(response, encoding='utf8') else: data = json.load(response) return data['result']['list'] except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc())
def GetChannelListFromCate(cls, cate, pageNo='1'): url = 'http://www.hcnmobile.tv/main/proc/ajax_ch_list.php' params = { 'chNum': '', 'cate': '', 'sCate': cate, 'chNum': '', 'chNm': '', 'page': pageNo, 'perPage': '20', 'srchTxt': '' } postdata = py_urllib.urlencode(params) request = py_urllib2.Request(url, postdata) request.add_header( 'Cookie', 'etv_api_key=88abc0e1c8e61c8c3109788ec8392c7fd86c16765fc0b80d5f2366c84c894203' ) response = py_urllib2.urlopen(request) data = response.read() hasMore = 'Y' if int(data.split('|')[1]) > int(pageNo) * 20 else 'N' regax = 'thumb\"\stitle\=\"(.*?)\".*\s*.*selCh\(\'(.*?)\'.*\s*<img\ssrc\=\"(.*?)\"' regax2 = 'ch_name\"\stitle\=\"(.*?)\"' r = re.compile(regax) r2 = re.compile(regax2) m = r.findall(data) m2 = r2.findall(data) list = [] #for item in m: for i in range(len(m)): info = {} info['title'] = m[i][0].replace(',', ' ') info['id'] = m[i][1] info['img'] = m[i][2] info['summary'] = m2[i] list.append(info) logger.debug('ret:%s %s', hasMore, len(list)) return hasMore, list
def get_channel_list(cls): try: stamp = str(datetime.datetime.today().strftime('%Y%m%d%H%M%S')) url = 'http://123.140.104.150/api/epg/v1/channel/virtual?access_key=C4A0697007C3548D389B&cp_id=S_LGU_HYUK0920&system_id=HDTV&SA_ID=500053434041&STB_MAC=v000.5343.4041&NSC_TYPE=LTE&BASE_GB=Y&BASE_CD=W172.017&YOUTH_YN=N&ORDER_GB=N&POOQ_YN=N&HDTV_VIEW_GB=R&SID=001010005638&CLIENT_IP=172.17.100.15&OS_INFO=android_4.4.2&NW_INFO=WIFI&APP_TYPE=ROSA&DEV_MODEL=SM-N935F&CARRIER_TYPE=E&UI_VER=04.38.04&NOW_PAGE=25&PRE_PAGE=&MENU_NM=&CONTS_GB=&TERM_BINVER=3.8.118.0106' ret = [] request = py_urllib2.Request(url) response = py_urllib2.urlopen(request) tree = ET.parse(response) root = tree.getroot() for item in root.findall('list'): #info = {} #info['id'] = item.findtext('service_id') #info['title'] = item.findtext('service_name').strip() #info['img'] = item.findtext('img_url') + item.findtext('img_file_name') #info['summary'] = item.findtext('description') #url = item.findtext('live_server1') + item.findtext('live_file_name1') #info['url'] = '%s?VOD_RequestID=v2M2-0101-1010-7272-5050-0000%s;LTE;480p;WIFI&APPNAME=hdtv&ALBUM_ID=%s&ma=D0:17:C2:CE:D7:A1' % (url, stamp, info['id']) #if item.findtext('live_file_name1') != '' and item.findtext('genre_name') != u'성인': # result.append(info) import system if item.findtext('service_id') in ['628', '629', '743']: if not SystemModelSetting.get_bool('videoportal_adult'): continue c = ModelChannel(cls.source_name, item.findtext('service_id'), item.findtext('service_name').strip(), item.findtext('img_url') + item.findtext('img_file_name'), True) c.current = item.findtext('description') ret.append(c) except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc()) return ret
def refresh_status(key, feed): try: url = 'https://offcloud.com/api/remote/status' params = {'key': key, 'requestId': feed.oc_requestId} postdata = py_urllib.urlencode(params).encode('utf-8') request = py_urllib2.Request(url, postdata) response = py_urllib2.urlopen(request) data = response.read() data = json.loads(data) feed.oc_json = data if 'status' in data: feed.oc_status = data['status']['status'] if feed.oc_status == 'error': pass elif feed.oc_status == 'downloaded': feed.oc_fileSize = int(data['status']['fileSize']) feed.oc_fileName = data['status']['fileName'] else: logger.debug('NO STATUS %s %s', url, params) feed.oc_status = 'NOSTATUS' except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc())
def cache(key, magnet_list, remoteOptionId): try: url = 'https://offcloud.com/api/torrent/check?key=%s' % (key) params = {'hashes': magnet_list} res = requests.post(url, json=params) result = res.json() for i in result['cachedItems']: url = 'https://offcloud.com/api/remote' params = { 'key': key, 'url': 'magnet:?xt=urn:btih:%s' % i, 'remoteOptionId': remoteOptionId, 'folderId': '10b5Z-0RA08d6p2iMNQ9D__7e5gWOV6v5', } postdata = py_urllib.urlencode(params).encode('utf-8') request = py_urllib2.Request(url, postdata) response = py_urllib2.urlopen(request) data = response.read() result = json.loads(data) except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc()) return None
def search_api(cls, titl, auth, cont, isbn, publ): logger.debug(f"책 검색 : [{titl}] [{auth}] ") trans_papago_key = SystemModelSetting.get_list('trans_papago_key') for tmp in trans_papago_key: client_id, client_secret = tmp.split(',') try: if client_id == '' or client_id is None or client_secret == '' or client_secret is None: return text #url = "https://openapi.naver.com/v1/search/book.json?query=%s&display=100" % py_urllib.quote(str(keyword)) url = f"https://openapi.naver.com/v1/search/book_adv.xml?display=100" if titl != '': url += f"&d_titl={py_urllib.quote(str(titl))}" if auth != '': url += f"&d_auth={py_urllib.quote(str(auth))}" if cont != '': url += f"&d_cont={py_urllib.quote(str(cont))}" if isbn != '': url += f"&d_isbn={py_urllib.quote(str(isbn))}" if publ != '': url += f"&d_publ={py_urllib.quote(str(publ))}" requesturl = py_urllib2.Request(url) requesturl.add_header("X-Naver-Client-Id", client_id) requesturl.add_header("X-Naver-Client-Secret", client_secret) #response = py_urllib2.urlopen(requesturl, data = data.encode("utf-8")) response = py_urllib2.urlopen(requesturl) data = response.read() data = json.loads(json.dumps(xmltodict.parse(data))) #logger.warning(data) rescode = response.getcode() if rescode == 200: return data else: continue except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc())
def make_xml(root): try: server_url = db.session.query(ModelSetting).filter_by(key='server_url').first().value server_token = db.session.query(ModelSetting).filter_by(key='server_token').first().value if Logic.server is None: Logic.server = PlexServer(server_url, server_token) lc_json = Logic.get_setting_value('lc_json') json_info = json.loads(lc_json) for info in json_info: logger.debug(info) if info['type'] == 'recent_add': channel_number = info['start_number'] max_count = info['count'] channel_index = 1 channel_step = 1 if info['reverse']: channel_step = -1 if info['section'] == 'episode': url = '%s/hubs/home/recentlyAdded?type=2&X-Plex-Token=%s' % (server_url, server_token) channel_title = u'최신TV' elif info['section'] == 'movie': url = '%s/hubs/home/recentlyAdded?type=1&X-Plex-Token=%s' % (server_url, server_token) channel_title = u'최신영화' else: url = '%s/hubs/home/recentlyAdded?type=1§ionID=%s&X-Plex-Token=%s' % (server_url, info['section'], server_token) channel_title = u'' doc = lxml.html.parse(py_urllib2.urlopen(url)) videos = doc.xpath("//video") for tag_video in videos: channel_tag = None program_tag = None try: if channel_title == '': channel_title = tag_video.attrib['librarysectiontitle'] tmp = tag_video.xpath('.//media') if tmp: tag_media = tmp[0] else: continue tag_part = tag_media.xpath('.//part')[0] if tag_video.attrib['type'] == 'movie': title = tag_video.attrib['title'] elif tag_video.attrib['type'] == 'episode': if 'index' in tag_media.attrib: title = u'%s회 %s %s' % (tag_video.attrib['index'], tag_video.attrib['grandparenttitle'], tag_video.attrib['title']) else: title = u'%s %s' % (tag_video.attrib['grandparenttitle'], tag_video.attrib['title']) else: continue if 'duration' not in tag_media.attrib: continue duration = int(tag_media.attrib['duration']) video_url = '%s%s?X-Plex-Token=%s' % (server_url, tag_part.attrib['key'], server_token) icon_url = '%s%s?X-Plex-Token=%s' % (server_url, tag_video.attrib['thumb'], server_token) ############################ channel_tag = ET.SubElement(root, 'channel') channel_tag.set('id', str(channel_number)) channel_tag.set('repeat-programs', 'true') display_name_tag = ET.SubElement(channel_tag, 'display-name') display_name_tag.text = '%s(%s)' % (channel_title, channel_index) display_name_tag = ET.SubElement(channel_tag, 'display-number') display_name_tag.text = str(channel_number) datetime_start = datetime(2019,1,1) + timedelta(hours=-9) datetime_stop = datetime_start + timedelta(seconds=duration/1000+1) program_tag = ET.SubElement(root, 'programme') program_tag.set('start', datetime_start.strftime('%Y%m%d%H%M%S') + ' +0900') program_tag.set('stop', datetime_stop.strftime('%Y%m%d%H%M%S') + ' +0900') program_tag.set('channel', str(channel_number)) program_tag.set('video-src', video_url) program_tag.set('video-type', 'HTTP_PROGRESSIVE') title_tag = ET.SubElement(program_tag, 'title') title_tag.set('lang', 'ko') title_tag.text = title icon_tag = ET.SubElement(program_tag, 'icon') icon_tag.set('src', icon_url) if 'summary' in tag_video.attrib: desc_tag = ET.SubElement(program_tag, 'desc') desc_tag.set('lang', 'ko') desc_tag.text = tag_video.attrib['summary'] channel_tag = None program_tag = None channel_index += 1 channel_number += channel_step if channel_index > max_count: break except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) if channel_tag is not None: root.remove(channel_tag) if program_tag is not None: root.remove(channel_tag) except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) """
def make_m3u(): try: from .logic import Logic server_url = ModelSetting.get('server_url') server_token = ModelSetting.get('server_token') if Logic.server is None: Logic.server = PlexServer(server_url, server_token) json_info = json.loads(ModelSetting.get('tivimate_json')) data = "#EXTM3U\n" root = ET.Element('tv') root.set('generator-info-name', "plex") LogicM3U.channel_index = 1 for info in json_info: if info['type'] == 'recent_add': if info['section'] == 'episode': url = '%s/hubs/home/recentlyAdded?type=2&X-Plex-Token=%s' % ( server_url, server_token) channel_title = u'최신TV' elif info['section'] == 'movie': url = '%s/hubs/home/recentlyAdded?type=1&X-Plex-Token=%s' % ( server_url, server_token) channel_title = u'최신영화' else: url = '%s/library/sections/%s/recentlyAdded?X-Plex-Token=%s' % ( server_url, info['section'], server_token) channel_title = u'' logger.debug(url) doc = lxml.html.parse(py_urllib2.urlopen(url)) videos = doc.xpath("//video") if channel_title == '': channel_title = doc.xpath("//mediacontainer")[ 0].attrib['librarysectiontitle'] data, root = LogicM3U.make_list(data, root, videos, info, channel_title) elif info['type'] == 'show': # url = '%s/library/metadata/%s/children?X-Plex-Token=%s' % ( server_url, info['metadata'], server_token) logger.debug(url) doc = lxml.html.parse(py_urllib2.urlopen(url)) seasons = doc.xpath("//directory") logger.debug(seasons) if seasons: channel_title = doc.xpath( "//mediacontainer")[0].attrib['title2'] include_parent = True if len(seasons) > 1 else False for s in seasons: logger.debug(s.attrib) if 'ratingkey' in s.attrib: logger.debug(s.attrib['ratingkey']) url = '%s/library/metadata/%s/children?X-Plex-Token=%s' % ( server_url, s.attrib['ratingkey'], server_token) doc2 = lxml.html.parse(py_urllib2.urlopen(url)) videos = doc2.xpath("//video") data, root = LogicM3U.make_list( data, root, videos, info, channel_title, include_parent=include_parent) else: channel_title = '%s %s' % ( doc.xpath("//mediacontainer")[0].attrib['title1'], doc.xpath("//mediacontainer")[0].attrib['title2']) videos = doc.xpath("//video") data, root = LogicM3U.make_list(data, root, videos, info, channel_title, include_parent=True) tree = ET.ElementTree(root) ret = ET.tostring(root, pretty_print=True, xml_declaration=True, encoding="utf-8") return data, ret except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc())