alroyso 1 year ago
parent
commit
6bf309603e

+ 35 - 0
app_pikpak.py

@@ -0,0 +1,35 @@
+import argparse
+import configparser
+import logging
+import os
+
+from src.app.PikPakApp import PikPakApp
+
+if __name__ == '__main__':
+    # parser = argparse.ArgumentParser(description='Aria2 and Alist Integration Service')
+    # parser.add_argument('--aria2', action='store_true', help='Run Aria2 service only')
+    # args = parser.parse_args()
+
+    # 初始化日志和配置
+    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
+    # 获取当前脚本的绝对路径
+    current_directory = os.path.dirname(os.path.abspath(__file__))
+    logging.info(f"current_dir -> {current_directory} ")
+    # 获取当前脚本所在目录的上级目录
+    # parent_directory = os.path.dirname(current_directory)
+
+    # 构建 config.ini 文件的路径
+    config_path = os.path.join(current_directory, 'config', 'config.ini')
+
+    # 读取配置文件
+    config = configparser.ConfigParser()
+    config.read(config_path)
+
+    # 创建服务实例
+    app_service = PikPakApp(config,parent_directory=current_directory)
+
+    # task
+    app_service.start()
+
+    # # 执行主循环
+    # app_service.main_loop()

+ 13 - 0
config/config.ini

@@ -17,6 +17,19 @@ DOCKER_DOWNLOAD_PATH = /downloads
 DESTINATION_PATH = /home/downloads/aria2
 DES_COPY_PATH = /home/video/sync
 
+[MAC_MINI_ARIA2]
+RPC_URL = http://192.168.88.50
+RPC_SECRET = 123456
+DESTINATION_PATH = /Volumes/data/xxx
+
+[HOME_ALIST_PIK_PAK]
+API_URL = https://webssl.pylas.xyz/api
+WEB_URL =  https://webssl.pylas.xyz
+CLIENT_ID = 4e34854d5d7390ef7801
+USERNAME = admin
+PASSWORD = nokidc123@#
+DOWNLOAD_PATH = /pikapk/电影/1.29
+
 [HOME_ALIST]
 API_URL = http://192.168.88.29:5244/api
 WEB_URL = http://192.168.88.29

+ 2 - 2
src/api/alist.py

@@ -166,8 +166,8 @@ class AlistAPI:
                                    current_sub_path=''):
         contents = []
         file_list = self.list_directory(remote_download_path)
-        file_info_json = json.dumps(file_list, indent=4)
-        logging.info(f'file_info_json: {file_info_json}')
+        # file_info_json = json.dumps(file_list, indent=4)
+        # logging.info(f'file_info_json: {file_info_json}')
         if file_list['data']['total'] == 0:
             return []
 

+ 29 - 0
src/app/PikPakApp.py

@@ -0,0 +1,29 @@
+import signal
+import time
+
+from src.services.RemotePikPakDownloadSerivce import RemotePikPakDownloadService
+
+
+class PikPakApp:
+    def __init__(self, config, parent_directory, ):
+        self.pik_pak_service = RemotePikPakDownloadService(config, parent_directory)
+
+        self.is_running = True
+
+        # 注册信号处理函数
+        signal.signal(signal.SIGINT, self.handle_signal)
+
+    def handle_signal(self, signum, frame):
+        """处理中断信号,优雅地退出循环"""
+        self.is_running = False
+        print("Exiting...")
+
+    def main_loop(self):
+        # 主循环
+        while self.is_running:
+            # print("Running...")
+            time.sleep(1)  # 模拟任务执行
+        print("Stopped.")
+
+    def start(self):
+        self.pik_pak_service.start_download()

+ 13 - 0
src/services/RemotePikPakDownloadSerivce.py

@@ -0,0 +1,13 @@
+import json
+import logging
+import os
+
+from src.task.RemotePikPakDownloadTask import RemotePikPakDownloadTask
+
+
+class RemotePikPakDownloadService:
+    def __init__(self, config, parent_dir):
+        self.remote_download_task = RemotePikPakDownloadTask(config, parent_dir)
+
+    def start_download(self):
+        self.remote_download_task.start_download()

+ 47 - 0
src/task/RemotePikPakDownloadTask.py

@@ -0,0 +1,47 @@
+import json
+import logging
+import os
+
+from src.api.Aria2API import Aria2API
+from src.api.alist import AlistAPI
+
+
+class RemotePikPakDownloadTask:
+    def __init__(self, config, parent_dir):
+        self.parent_dir = parent_dir
+        self.pik_alist_api = AlistAPI(config['HOME_ALIST_PIK_PAK']['API_URL'],
+                                      config['HOME_ALIST_PIK_PAK']['USERNAME'],
+                                      config['HOME_ALIST_PIK_PAK']['PASSWORD'])
+
+        self.aria2_api = Aria2API(config['MAC_MINI_ARIA2']['RPC_URL'],
+                                  config['MAC_MINI_ARIA2']['RPC_SECRET'])
+
+        self.remote_alist_download_path = config['HOME_ALIST_PIK_PAK']['DOWNLOAD_PATH']
+
+        self.aria2_download_path = config['MAC_MINI_ARIA2']['DESTINATION_PATH']
+
+    def start_download(self):
+        # 获取远程目录结构
+        remote_data = self.pik_alist_api.recursive_collect_contents(
+            self.remote_alist_download_path,
+            self.aria2_download_path
+        )
+        # remote_json_path = os.path.join(self.parent_dir, 'data', 'remote_pikpak.json')
+        # with open(remote_json_path, 'w', encoding='utf-8') as f:
+        #     json.dump(remote_data, f, indent=4)
+
+        for home_item in remote_data:
+            if not home_item['is_dir']:
+                cent_data = self.pik_alist_api.get_file_or_directory_info(home_item['path'])
+                if cent_data:
+                    self.send_to_aria2(cent_data['data']['raw_url'])
+                    logging.info(f"Started to download {cent_data['data']['raw_url']}")
+                else:
+                    logging.info("File not found")
+                break
+
+
+    def send_to_aria2(self, file_path):
+        # 将文件添加到 Aria2 下载队列
+        self.aria2_api.add_url(file_path, options={"dir": self.aria2_download_path})
+        logging.info(f"Added to Aria2: {file_path}")