def json2link(configs_json): d = configs_json links = [] try: if (isinstance(d, dict)) and d['configs']: j = d['configs'] else: j = d for i in j: server = i.get('server') server_port = i.get('server_port') password = i.get('password') method = i.get('method') protocol = i.get('protocol') protocolparam = i.get('protocolparam') obfs = i.get('obfs') obfsparam = i.get('obfsparam') group = i.get('group') remarks = i.get('remarks') stern = 'obfsparam={}&remarks={}&group={}'.format(b64encode(obfsparam), b64encode(remarks), b64encode(to_bytes(group))) uri = '{}:{}:{}:{}:{}:{}'.format(server, server_port, protocol, method, obfs, b64encode(password)) links.append('ssr://{}'.format(b64encode('{}/?{}'.format(uri, stern)))) except: raise return links def to_bytes(s): if type(s) == str: return s.encode('utf-8') return s def to_str(s): if type(s) == bytes: return s.decode('utf-8') return s def b64encode(data): if type(data) == bytes: return to_str(base64.urlsafe_b64encode(data)).strip('=') elif type(data) == str: return to_str(base64.urlsafe_b64encode(to_bytes(data))).strip('=') else: return data def b64decode(data): if type(data) == str: return to_str(base64.urlsafe_b64encode(data+'='*(4-len(data)%4))) return data