Created
January 30, 2016 11:52
-
-
Save andrusstrockiy/b18e605ed93fe3aa46cf to your computer and use it in GitHub Desktop.
to modiev with love
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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__ = '[email protected]' | |
# 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