Skip to content

Instantly share code, notes, and snippets.

@andrusstrockiy
Created January 30, 2016 11:52
Show Gist options
  • Save andrusstrockiy/b18e605ed93fe3aa46cf to your computer and use it in GitHub Desktop.
Save andrusstrockiy/b18e605ed93fe3aa46cf to your computer and use it in GitHub Desktop.
to modiev with love
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
RM #11618
Модуль взаимодействия с IPTV-порталом iptvportal.ru (http://iptvportal.ru/)
Обрабатываемые события:
- создание учетки = создание учетки на портале
- измение блокировки учетки = вкл/выкл на портале
- вкл/откл услуги = добавление/удаление пакета
- добавление/удаление оборудования = добавление/удаление терминала
"""
import datetime
import time
import json
import logging
import requests
# import lbcore
loglabel = 'IPTV Portal:'
# Add logging facilities to debug
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler('lbiptvportal.log')
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - {} %(message)s'.format(loglabel))
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info('Logger have started')
__version__ = '0.0.2'
__copyright__ = 'Copyright 2015, Network Solution'
__email__ = 'support@lanbilling.ru'
# ID агента услуг (usbox)
AGENT_ID = 1
# Параметры подключения к серверу iptv
IPTV_HOST = 'admin.lanbilling.iptvportal.ru'
IPTV_USER = 'admin'
IPTV_PASS = 'qTbF9eN4N'
srv_cfg = {'host': IPTV_HOST, 'username': IPTV_USER, 'password': IPTV_PASS}
class ID(object):
def __init__(self):
self.id = 0
def __call__(self):
self.id += 1
return self.id
get_id = ID()
class IPTVPortalError(Exception):
def __init__(self, error):
super(IPTVPortalError, self).__init__()
self.error = error
def __str__(self):
error_message = '{self.error}'.format(self=self)
return error_message
class JsonSqlRpc(object):
iptvportal_auth_header = None
srv_methods = dict(ins="insert", sel="select", dlt="delete", upd="update")
def __init__(self, host=None, username=None, password=None):
self.host = host
self.username = username
self.password = password
self.jsonrpc_url = 'https://{host}/api/jsonrpc/'.format(host=host)
self.jsonsql_url = 'https://{host}/api/jsonsql/'.format(host=host)
self.auth = self._authorize_user()
def _authorize_user(self, username=None, password=None):
res = self.jsonrpc_call(self.jsonrpc_url, "authorize_user", {
'username': username or self.username,
'password': password or self.password,
})
# print "res:", res
if res:
logger.info("Manager \"{}\" successfully authorized to host: {}".format(self.username,self.host))
logger.debug(res)
# self.log("Authorization of user was successful")
self.iptvportal_auth_header = {'Iptvportal-Authorization': 'sessionid=' + res.get('session_id')}
return res
@staticmethod
def jsonrpc_call(uri, method, params, headers=None):
jsonrpc = {
'jsonrpc': "2.0",
'id': get_id(),
'method': method,
'params': params,
}
data = json.dumps(jsonrpc, ensure_ascii=False)
r = requests.post(uri, data=data, headers=headers, verify=False)
if r.status_code == 200:
iptv_cmd_result = r.json(encoding='utf-8')
if 'result' in iptv_cmd_result:
return iptv_cmd_result['result']
elif 'error' in iptv_cmd_result:
raise IPTVPortalError(iptv_cmd_result['error'])
else:
error = 'Something wrong %s: ' % str(iptv_cmd_result)
raise IPTVPortalError(error)
else:
error = '{0}: {1}'.format(r.status_code, r.reason)
raise IPTVPortalError(error)
def jsonsql_call(self, cmd, params=None):
logger.info(params)
return self.jsonrpc_call(self.jsonsql_url, cmd, params, headers=self.iptvportal_auth_header)
def iptv_checksubcriber(self, avgroup, meth=srv_methods['sel']):
paramdict = {
"data": "id",
"from": "subscriber",
"where": {"eq": ["username", avgroup['login']]},
"returning": "id"
}
res = self.jsonsql_call(meth, paramdict)
logger.info(res)
return res
def main():
srv = JsonSqlRpc(**srv_cfg)
k = srv.iptv_checksubcriber({'login':'legoman'})
print(k)
if __name__ == '__main__':
main()
#
#
#
# on_create_vgroup = lbcore.Messenger(send_create_vg, 'create_vgroup')
# on_block_vgroup = lbcore.Messenger(send_block_vg, 'block_vg')
# on_change_service = lbcore.Messenger(send_change_srv, 'change_service')
# on_link_equip = lbcore.Messenger(send_link_equip, 'link_vg_equipment')
# on_unlink_equip = lbcore.Messenger(send_unlink_equip, 'unlink_vg_equipment')
# on_to_stop_usbox = lbcore.Messenger(to_stop_usbox_service, 'stop_usbox')
# on_stop_service = lbcore.Messenger(to_stop_usbox_service, 'stop_service')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment