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
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 10
0
 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
Esempio n. 11
0
 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
Esempio n. 12
0
 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
Esempio n. 13
0
 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
Esempio n. 14
0
 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
Esempio n. 15
0
 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
Esempio n. 16
0
 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'}
Esempio n. 17
0
 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
Esempio n. 18
0
 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
Esempio n. 19
0
 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
Esempio n. 20
0
 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
Esempio n. 21
0
 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
Esempio n. 22
0
 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
Esempio n. 23
0
 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
Esempio n. 24
0
 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