import importlib import sys import traceback import json import os method_dict = { 'init': 'init', 'home': 'homeContent', 'homeVod': 'homeVideoContent', 'category': 'categoryContent', 'detail': 'detailContent', 'search': 'searchContent', 'play': 'playerContent', 'proxy': 'localProxy', 'action': 'action', } def import_module(module_url): return importlib.import_module(module_url) def load_spider(script_path): """动态加载指定路径的 Python 脚本并实例化 Spider 类""" try: script_name = os.path.basename(script_path)[:-3] print('load_spider:', script_name) module = import_module(script_name) # 检查 Spider 类是否存在 if not hasattr(module, 'Spider'): raise AttributeError(f"Script {script_path} does not contain a 'Spider' class") # 实例化 Spider spider = module.Spider() return spider except Exception as e: # 打印详细错误信息 error_msg = { "error": str(e), "traceback": traceback.format_exc() } print(error_msg) def t4_spider_init(spider, ext=''): # 调用方法 spider.setExtendInfo(ext) # 获取依赖项 depends = spider.getDependence() or [] modules = [] module_names = [] for lib in depends: try: module = import_module(lib).Spider() modules.append(module) module_names.append(lib) except Exception as e: print(f'装载依赖{lib}发生错误:{e}') if len(module_names) > 0: print(f'当前依赖列表:{module_names}') result = spider.init(modules) setattr(spider, '_init_ok_', True) return spider, result def call_spider_method(spider, method_name, args): """调用 Spider 实例的指定方法""" invoke_method_name = method_dict.get(method_name) or method_name try: # 检查方法是否存在 if not hasattr(spider, invoke_method_name): raise AttributeError(f"Spider has no method named '{invoke_method_name}'") method = getattr(spider, invoke_method_name) # 解析参数 parsed_args = [] for arg in args: try: # 尝试解析 JSON parsed_args.append(json.loads(arg)) except json.JSONDecodeError: # 保持原始字符串 parsed_args.append(arg) print(f'parsed_args:{parsed_args}') if method_name == 'init': spider, result = t4_spider_init(spider, *parsed_args) # result = spider.init(modules) return result else: if not hasattr(spider, '_init_ok_'): # spider,_ = t4_spider_init(spider,*parsed_args) # 需要传extend参数,暂时没有好办法 spider, _ = t4_spider_init(spider, *parsed_args) method = getattr(spider, invoke_method_name) result = method(*parsed_args) # 返回结果 if result: try: return spider.json2str(result) except Exception as e: pass return result except Exception as e: # 打印详细错误信息 error_msg = { "error": str(e), "traceback": traceback.format_exc() } print(error_msg) def main(): if len(sys.argv) < 3: print("Usage: python bridge.py [args...]") return script_path = sys.argv[1] method_name = sys.argv[2] args = sys.argv[3:] print(f'script_path:{script_path},method_name:{method_name}') spider = load_spider(script_path) result = call_spider_method(spider, method_name, args) print(result) if __name__ == '__main__': main()