#!/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')