def show_pairingkey(self): # STRxml = '<?xml version="1.0" encoding="utf-8"?><envelope><api type="pairing"><name>showKey</name></api></envelope>' # uri = self.STRtv_PATHpair # url = 'http://{ipaddress}:{port}{uri}'.format(ipaddress=self._ipaddress, port=str(self._port), uri=uri) # try: r = self.lgtv_session.post(url, STRxml, timeout=2) r_pass = True if r.status_code == requests.codes.ok else False # result = logPass if r_pass else logFail # log_outbound(result, self._ipaddress, self._port, 'POST', uri, '-', '-', r.status_code, description=logDescDeviceShowpairkey) # return r_pass # except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'POST', uri, '-', '-', '-', description=logDescDeviceShowpairkey, exception=e) return False
def _retrieve_recordings(self, recurse, itemCount=''): # url = 'https://{ipaddress}'.format(ipaddress=get_cfg_details_ip()) uri = '/TiVoConnect?Command=QueryContainer&Container=%2FNowPlaying&Recurse={recurse}{itemCount}'.format( recurse=recurse, itemCount=itemCount) try: # r = self.tivoSession.get('{url}{uri}'.format(url=url, uri=uri)) r_pass = True if r.status_code == requests.codes.ok else False # result = logPass if r_pass else logFail # log_outbound(result, get_cfg_details_ip(), self._port, 'GET', uri, '-', '-', r.status_code) # if r.status_code == requests.codes.ok: try: return r.content.decode() except: return r.content else: return False except Exception as e: # log_outbound(logException, get_cfg_details_ip(), self._port, 'GET', uri, '-', '-', '-', exception=e) return False
def _send_telnet(self, ipaddress, port, data='', response=False): try: tn = telnetlib.Telnet(ipaddress, port) time.sleep(0.1) output = tn.read_eager() if response else None if data: tn.write((str(data) + "\n").encode('ascii')) time.sleep(0.1) op = tn.read_eager() if op == '': output = True elif response: output = op if op else True else: output = bool(op) tn.close() return output except Exception as e: # log_outbound(logException, get_cfg_details_ip(), self._port, 'TELNET', '', '-', '-', '-', description=data, exception=e) return False
def get3d(self): # try: # query = 'target=is_3d' # r = self._send_query(query, logDescDeviceGet3d) # if bool(r): # # <?xml version="1.0" encoding="utf-8"?> # <envelope> # <dataList name="is3D"> # <data> # <is3D>true or false</is3D> # </data> # </dataList> # </envelope> # data = ET.fromstring(r).find('dataList').find('data') # return {'is3D': data.find('is3D').text == 'true'} else: return False # except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'GET', self.STRtv_PATHquery, '-', '-', '-', description=logDescDeviceGet3d, exception=e) return False
def getlisting(channel_id, day): # # Use of bleb.org data requires API calls to be 2 seconds apart time.sleep(2) # headers = { 'User-Agent': 'TV::Fetch::XML, {app_name} - {email}'.format( app_name=serviceName, email=get_cfg_details_developer_email()), 'Connection': 'close', 'content-type': 'text/xml; charset=utf-8' } # url = 'www.bleb.org' uri = '/tv/data/listings/{day}/{channel_id}.xml'.format( day=day, channel_id=channel_id) # request_url = 'http://{url}{uri}'.format(url=url, uri=uri) # r = requests.get(request_url, headers=headers) # result = logPass if r.status_code == requests.codes.ok else logFail # log_outbound(result, url, '', 'GET', uri, '-', '-', r.status_code) # if r.status_code == requests.codes.ok: return r.content else: return False
def get_accesstoken_pincode(state, pincode): url_access = 'https://api.home.nest.com/oauth2/access_token' # headers = { 'Connection': 'close', 'User-Agent': 'Linux/2.6.18 UDAP/2.0 CentOS/5.8', 'Content-type': 'application/x-www-form-urlencoded' } # payload = { 'client_id': get_cfg_details_clientId(), 'client_secret': get_cfg_details_clientSecret(), 'code': pincode, 'grant_type': 'authorization_code' } # r = requests.post(url_access, headers=headers, data=payload) # r_pass = (r.status_code == requests.codes.ok) # result = logPass if r_pass else logFail log_outbound(result, url_access, '', 'POST', '', '-', '-', r.status_code) # if not r_pass: raise Exception() # try: response = json.loads(r.text) except Exception as e: log_outbound(logException, url_access, '', 'POST', '', '-', '-', r.status_code, exception=e) raise Exception() # token = response['access_token'] tokenexpiry = datetime.datetime.now() + datetime.timedelta( seconds=response['expires_in']) # set_cfg_details_oauth(token, tokenexpiry, state) # return {'token': token, 'tokenexpiry': tokenexpiry}
def getImage_screenshot(self): # try: # query = 'target=screen_image' # return self._send_query(query, logDescDeviceGetscreenshot) # except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'GET', self.STRtv_PATHquery, '-', '-', '-', description=logDescDeviceGetscreenshot, exception=e) return False
def sendTouchclick(self): # STRxml = '<?xml version="1.0" encoding="utf-8"?>' STRxml += '<envelope><api type="command">' STRxml += '<name>HandleTouchClick</name>' STRxml += '</api></envelope>' # try: return self._send_command(STRxml, logDescDeviceTouchclick) except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'POST', self.STRtv_PATHcommand, '-', '-', '-', description=logDescDeviceTouchclick, exception=e) return False
def sendTouchwheel(self, direction): # STRxml = '<?xml version="1.0" encoding="utf-8"?>' STRxml += '<envelope><api type="command">' STRxml += '<name>HandleTouchWheel</name>' STRxml += '<value>{direction}</value>'.format(direction=direction) STRxml += '</api></envelope>' # try: return self._send_command(STRxml, logDescDeviceTouchwheel) except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'POST', self.STRtv_PATHcommand, '-', '-', '-', description=logDescDeviceTouchwheel, exception=e) return False
def sendCmd(self, key): # STRxml = '<?xml version="1.0" encoding="utf-8"?>' STRxml += '<envelope><api type="command">' STRxml += '<name>HandleKeyInput</name>' STRxml += '<value>{value}</value>'.format(value=commands[key]) STRxml += '</api></envelope>' # try: return self._send_command(STRxml, logDescDeviceSendcommand) except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'POST', self.STRtv_PATHcommand, '-', '-', '-', description=logDescDeviceSendcommand, exception=e) return False
def _getAppicon(self, auid, name): # try: # query = 'target=appicon_get' query += '&auid={auid}'.format(auid=auid) query += '&appname={appname}'.format(appname=name) # return self._send_query(query, logDescDeviceGetappicon) # except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'GET', self.STRtv_PATHquery, '-', '-', '-', description=logDescDeviceGetappicon, exception=e) return False
def _read_nest_json(self, uri=''): # r = self.sessionNest_REST.get('{url}{uri}'.format(url=self._get_url(), uri=uri)) # redirect = check_redirect(r) if bool(redirect): self._redirect_url = redirect.replace(uri, '') return self._read_nest_json(uri) # r_pass = True if r.status_code == requests.codes.ok else False result = logPass if r_pass else logFail # log_outbound(result, self._get_url(), '', 'GET', uri, '-', '-', r.status_code) # if r_pass: return r.json() else: return False
def sendTouchmove(self, x, y): # STRxml = '<?xml version="1.0" encoding="utf-8"?>' STRxml += '<envelope><api type="command">' STRxml += '<name>HandleTouchMove</name>' STRxml += '<x>{x}</x>'.format(x=x) STRxml += '<y>{y}</y>'.format(y=y) STRxml += '</api></envelope>' # try: return self._send_command(STRxml, logDescDeviceTouchmove) except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'POST', self.STRtv_PATHcommand, '-', '-', '-', description=logDescDeviceTouchmove, exception=e) return False
def sendcursorVisbility(self, visibility): # STRxml = '<?xml version="1.0" encoding="utf-8"?>' STRxml += '<envelope><api type="event">' STRxml += '<name>CursorVisible</name>' STRxml += '<value>{visibility}</value>'.format(visibility=('true' if visibility else 'false')) STRxml += '<mode>auto</mode>' STRxml += '</api></envelope>' # try: return self._send_event(STRxml, logDescDeviceCursorvisibility) except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'POST', self.STRtv_PATHevent, '-', '-', '-', description=logDescDeviceCursorvisibility, exception=e) return False
def getVolume(self): # try: # query = 'target=volume_info' # r = self._send_query(query, logDescDeviceGetvolume) # if bool(r): # # <?xml version="1.0" encoding="utf-8"?> # <envelope> # <dataList name="Volume Info"> # <data> # <mute>true or false</mute> # <minLevel>Minimum volume level</minLevel> # <maxLevel>Maximum volume level</maxLevel> # <level>Current volume level</level> # </data> # </dataList> # </envelope> # data = ET.fromstring(r).find('dataList').find('data') # return {'mute': data.find('mute').text == 'true', 'minLevel': data.find('minLevel').text, 'maxLevel': data.find('maxLevel').text, 'level': data.find('level').text} else: return False # except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'GET', self.STRtv_PATHquery, '-', '-', '-', description=logDescDeviceGetvolume, exception=e) return False
def _sunrisesunset_request(self, lat, long, date): # url = self.STRsunrisesunset_BASEurl # query = self.STRsunrisesunset_QUERYstring.format(lat=lat, lng=long, date=date) # request_url = 'https://{url}{uri}?{query}'.format(url=url, uri='', query=query) # r = requests.get(request_url) # result = logPass if r.status_code == requests.codes.ok else logFail # log_outbound(result, url, '', 'GET', '', query, '-', r.status_code) # if r.status_code == requests.codes.ok: return r.json() else: return {'status': 'FAIL'}
def _send_query(self, query, desc1): # if not self._check_paired(pair_reason=desc1): return False # uri = self.STRtv_PATHquery # url = 'http://{ipaddress}:{port}{uri}?{query}'.format(ipaddress=self._ipaddress, port=str(self._port), uri=uri, query=query) # r = self.lgtv_session.get(url, timeout=2) # r_pass = (r.status_code == requests.codes.ok) # result = logPass if r_pass else logFail # log_outbound(result, self._ipaddress, self._port, 'GET', uri, query, '-', r.status_code) # if not r.status_code == requests.codes.ok: self.is_paired = False if not self._check_paired(pair_reason=desc1): return False r = self.lgtv_session.get(url, timeout=2) r_pass = (r.status_code == requests.codes.ok) # result = logPass if r_pass else logFail # log_outbound(result, self._ipaddress, self._port, 'GET', uri, query, '-', r.status_code) # if r_pass: return r.content else: return False
def sendChannel(self, major, minor, sourceIndex, physicalNum): # STRxml = '<?xml version="1.0" encoding="utf-8"?>' STRxml += '<envelope><api type="command">' STRxml += '<name>HandleChannelChange</name>' STRxml += '<major>{major}</major>'.format(major=major) STRxml += '<minor>{minor}</minor>'.format(minor=minor) STRxml += '<sourceIndex>{sourceIndex}</sourceIndex>'.format(sourceIndex=sourceIndex) STRxml += '<physicalNum>{physicalNum}</physicalNum>'.format(physicalNum=physicalNum) STRxml += '</api></envelope>' # try: return self._send_command(STRxml, logDescDeviceSendchannel) except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'POST', self.STRtv_PATHcommand, '-', '-', '-', description=logDescDeviceSendchannel, exception=e) return False
def _metoffice_request(self, uri, query_values): # url = self.STRmetoffice_BASEurl # query = 'key={api_key}'.format(api_key=get_cfg_details_metofficeKey()) if len(query_values): query += '&' query += '&'.join(query_values) # request_url = 'http://{url}{uri}?{query}'.format(url=url, uri=uri, query=query) # r = requests.get(request_url) # result = logPass if r.status_code == requests.codes.ok else logFail # log_outbound(result, url, '', 'GET', uri, query, '-', r.status_code) # if r.status_code == requests.codes.ok: return r.json() else: return False
def executeApp(self, auid): # name = self.apps_list_dict[auid]['name'] # STRxml = '<?xml version="1.0" encoding="utf-8"?>' STRxml += '<envelope><api type="command">' STRxml += '<name>AppExecute</name>' STRxml += '<auid>{auid}</auid>'.format(auid=auid) STRxml += '<appname>{app_name}</appname>'.format(app_name=name.replace(' ','%20')) #STRxml += '<contentId>Content ID</contentId>' STRxml += '</api></envelope>' # try: return self._send_command(STRxml, logDescDeviceExecuteapp) except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'POST', self.STRtv_PATHcommand, '-', '-', '-', description=logDescDeviceGetapplist, exception=e) return False
def _send_event(self, STRxml, desc1): # if not self._check_paired(pair_reason=desc1): return False # uri = self.STRtv_PATHevent # url = 'http://{ipaddress}:{port}{uri}'.format(ipaddress=self._ipaddress, port=str(self._port), uri=uri) # r = self.lgtv_session.post(url, STRxml, timeout=2) # r_pass = (r.status_code == requests.codes.ok) # result = logPass if r_pass else logFail # log_outbound(result, self._ipaddress, self._port, 'POST', uri, '-', '-', r.status_code) # if not r.status_code == requests.codes.ok: self.is_paired = False if not self._check_paired(pair_reason=desc1): return False r = self.lgtv_session.post(url, STRxml, timeout=2) r_pass = (r.status_code == requests.codes.ok) # result = logPass if r_pass else logFail # log_outbound(result, self._ipaddress, self._port, 'POST', uri, '-', '-', r.status_code) # return r_pass
def _send_nest_json(self, json_cmd, uri, retry=0): # if retry >= 2: return False # r = self.sessionNest_REST.put('{url}{uri}'.format(url=self._get_url(), uri=uri), data=json.dumps(json_cmd)) # redirect = check_redirect(r) if bool(redirect): self._redirect_url = redirect.replace(uri, '') return self._send_nest_json(json_cmd, uri) # r_pass = True if r.status_code == requests.codes.ok else False result = logPass if r_pass else logFail # log_outbound(result, self._get_url(), '', 'PUT', uri, '-', json_cmd, r.status_code) # if r_pass: return r.json() else: return False
def _pair_device(self, pair_reason=''): # if not pair_reason == '': pair_reason = '{action} - {pair_reason}'.format(action=logDescDevicePairing, pair_reason=pair_reason) else: pair_reason = logDescDevicePairing # STRxml = '<?xml version="1.0" encoding="utf-8"?><envelope><api type="pairing"><name>hello</name>' STRxml += '<value>{pairingkey}</value>'.format(pairingkey = self._pairingkey) STRxml += '<port>{port}</port>'.format(port=str(self._port)) STRxml += '</api></envelope>' # uri = self.STRtv_PATHpair # url = 'http://{ipaddress}:{port}{uri}'.format(ipaddress=self._ipaddress, port=str(self._port), uri=uri) # try: r = self.lgtv_session.post(url, STRxml, timeout=2) # r_pass = True if r.status_code == requests.codes.ok else False self.is_paired = r_pass # result = logPass if r_pass else logFail # log_outbound(result, self._ipaddress, self._port, 'POST', uri, '-', '-', r.status_code, description=pair_reason) # return r_pass # except requests.exceptions.ConnectionError as e: # log_outbound(logException, self._ipaddress, self._port, 'POST', uri, '-', '-', '-', description=pair_reason, exception='connection error: {e}'.format(e=e)) return False # except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'POST', uri, '-', '-', '-', description=pair_reason, exception=e) return False
def _getApplist(self, APPtype=1, APPindex=0, APPnumber=0): # try: # if not self._check_paired(pair_reason=logDescDeviceGetapplist): return False # uri = self.STRtv_PATHquery # query = 'target=applist_get' query += '&type={type}'.format(type=str(APPtype)) query += '&index={index}'.format(index=str(APPindex)) query += '&number={number}'.format(number=str(APPnumber)) # url = 'http://{ipaddress}:{port}{uri}?{query}'.format(ipaddress=self._ipaddress, port=str(self._port), uri=uri, query=query) # r = self.lgtv_session.get(url, timeout=2) # r_pass = (r.status_code == requests.codes.ok) # result = logPass if r_pass else logFail # log_outbound(result, self._ipaddress, self._port, 'GET', uri, query, '-', r.status_code, description=logDescDeviceGetapplist) # if not r_pass: self.is_paired = False if not self._check_paired(pair_reason=logDescDeviceGetapplist): return False r = self.lgtv_session.get(url, timeout=2) r_pass = (r.status_code == requests.codes.ok) # result = logPass if r_pass else logFail # log_outbound(result, self._ipaddress, self._port, 'GET', uri, query, '-', r.status_code, description=logDescDeviceGetapplist) # if r_pass: # xml = ET.fromstring(r.content) dict_apps = {} # for data in xml.find('dataList'): try: dict_apps[data.find('auid').text] = {'auid': data.find('auid').text, 'name': data.find('name').text, 'type': data.find('type').text, 'cpid': data.find('cpid').text, 'adult': data.find('adult').text, 'icon_name': data.find('icon_name').text} # self.apps_img_dict[data.find('auid').text] = self._getAppicon(data.find('auid').text, url_encode(data.find('name').text)) except: pass return dict_apps else: return False except Exception as e: # log_outbound(logException, self._ipaddress, self._port, 'GET', self.STRtv_PATHquery, '-', '-', '-', description=logDescDeviceGetapplist, exception=e) return False