Browse Source

Merge branch 'master' of http://8.136.199.33:3000/eta_server/eta_python

xyxie 9 months ago
parent
commit
e7e20a8af7
9 changed files with 446 additions and 197 deletions
  1. 2 1
      .gitignore
  2. 22 10
      eta_report2img/main.py
  3. 24 18
      lt_api.py
  4. 0 2
      mysteel_refresh.py
  5. 3 0
      pscg_bloomberg/.gitignore
  6. 177 0
      pscg_bloomberg/main.py
  7. 23 4
      rpa_smm_refresh.py
  8. 10 10
      wind_api.py
  9. 185 152
      yongyi_pig/yongyi_pig_manual.py

+ 2 - 1
.gitignore

@@ -1 +1,2 @@
-/.idea
+/.idea
+/venv

+ 22 - 10
eta_report2img/main.py

@@ -1,7 +1,7 @@
 # coding=utf-8
-import hug
 import os
-from bottle import run
+from flask import Flask
+from flask import request
 from selenium import webdriver
 from selenium.webdriver.chrome.service import Service
 from time import sleep
@@ -17,16 +17,24 @@ image_folder = './imgs'  # 转换过程中生成的图片目录, 最终会合并
 output_file = './screenshot'  # 最后的输出目录
 
 # hug接口输出为json格式
-hug.API(__name__).http.output_format = hug.output_format.json
+app = Flask(__name__)
 
 
-@hug.get('/api/report/server')
+@app.route('/api/report/server')
 def report_server():
     return 1
 
 
-@hug.post('/api/report/html2img')
-def report_detail2img(report_url: hug.types.text, file_name: hug.types.text, output_type: hug.types.text):
+@app.route('/api/report/html2img', methods=['POST'])
+def report_detail2img():
+    req_data = request.get_json()
+    if req_data is None:
+        return {"code": 403, "data": "", "error": "参数有误"}
+
+    report_url = req_data['report_url']
+    file_name = req_data['file_name']
+    output_type = req_data['output_type']
+
     # report_url参数, 报告的分享地址
     if report_url is None or report_url == "":
         return {"code": 403, "data": "", "error": "report_url parameter is missing"}
@@ -65,8 +73,13 @@ def report_detail2img(report_url: hug.types.text, file_name: hug.types.text, out
         return {"code": 403, "data": "", "error": err_msg}
 
 
-@hug.post('/api/report/clear_local_file')
-def clear_local_file(file_name: hug.types.text):
+@app.route('/api/report/clear_local_file', methods=['POST'])
+def clear_local_file():
+    req_data = request.get_json()
+    if req_data is None:
+        return {"code": 403, "data": "", "error": "参数有误"}
+
+    file_name = req_data['file_name']
     if file_name is None or file_name == "":
         return {"code": 403, "data": "", "error": "file_name parameter is missing"}
 
@@ -106,5 +119,4 @@ def create_img_and_pdf(report_url, file_name, output_type=""):
 
 
 if __name__ == "__main__":
-    app = __hug__.http.server()
-    run(app=app, reloader=True, port=server_port)
+    app.run(host='0.0.0.0', port=server_port, debug=True)

+ 24 - 18
lt_api.py

@@ -14,34 +14,40 @@ key = ""
 
 @hug.get('/hz_server')
 def hello():
+    ek_port = ek.get_port_number()
+    if ek_port is None:
+        # 如果检测不到路透终端的端口,那么就返回检测失败(可能电脑重启了)
+        return "ek false"
     return 'ek true'
 
 
 @hug.get('/edbInfo/ek')
-def GetEdbDataFromEk(EdbCode, StartDate, EndDate):
+def GetEdbDataFromEk(EdbCode, StartDate, EndDate ,Frequency="daily"):
     EdbCode = urllib.parse.unquote(EdbCode)
-    print("EdbCode")
-    print(EdbCode)
-    print(StartDate)
-    print(EndDate)
-    print("req start")
-    data = ek.get_timeseries(EdbCode, fields='*', start_date=StartDate, end_date=EndDate)
-    print("result start")
-    print(data)
-    print("是否唯一索引:", data.index.is_unique)
-    if  data.index.is_unique ==False:
-        print("开始去重")
+    # print("EdbCode:", EdbCode, ";StartDate:", StartDate, ";EndDate:", EndDate, ";Frequency:", Frequency)
+    # print("req start")
+    if Frequency == "":
+        Frequency = "daily"
+    data = ek.get_timeseries(EdbCode, fields='*', start_date=StartDate, end_date=EndDate, interval=Frequency)
+    # print("result start\n", data)
+    if data is None:
+        print("数据查询失败:", data)
+        return False
+    # print("是否唯一索引:", data.index.is_unique)
+    if data.index.is_unique is False:
+        # print("开始去重")
         data = data.groupby(data.index).first()
-        print("结束去重")
-        print(data)
+        # print("结束去重")
+        # print(data)
     
-    print("result end")
-    dataJson = data.to_json()
-    result = json.loads(dataJson)
+    # print("result end")
+    data_json = data.to_json()
+    result = json.loads(data_json)
     return result
 
 
 if __name__ == "__main__":
     ek.set_app_key(key)
+    ek.set_timeout(120)
     app = __hug__.http.server()
-    run(app=app, reloader=True, port=7002)
+    run(app=app, reloader=True, host='0.0.0.0', port=7002)

+ 0 - 2
mysteel_refresh.py

@@ -4,13 +4,11 @@ import pyautogui
 import random
 import time
 import os
-import xlwings as xw
 import win32gui, win32con
 import urllib.parse
 
 hug.API(__name__).http.output_format = hug.output_format.json
 
-
 @hug.get('/mysteel_chemical/server')
 def mysteel_chemical_server():
     return 1

+ 3 - 0
pscg_bloomberg/.gitignore

@@ -0,0 +1,3 @@
+/.idea
+/data
+/ps-credential.txt

+ 177 - 0
pscg_bloomberg/main.py

@@ -0,0 +1,177 @@
+import io, json, os
+from oauthlib.oauth2 import BackendApplicationClient
+from requests_oauthlib import OAuth2Session
+from dataclasses import dataclass
+from flask import Flask
+from datetime import datetime
+
+
+@dataclass
+class bbg_schedule_run:
+    credentail_file: str
+
+    def get_sched_data(self, identifier):
+        with io.open(self.credentail_file, encoding="utf-8") as credential_file:
+            CREDENTIALS = json.load(credential_file)
+
+        CLIENT = BackendApplicationClient(client_id=CREDENTIALS['client_id'])
+
+        OAUTH2_ENDPOINT = 'https://bsso.blpprofessional.com/ext/api/as/token.oauth2'
+        SESSION = OAuth2Session(client=CLIENT)
+        SESSION.fetch_token(token_url=OAUTH2_ENDPOINT, client_secret=CREDENTIALS['client_secret'])
+
+        URL = 'https://api.bloomberg.com/eap/catalogs/47929/content/responses/?requestIdentifier=' + identifier
+
+        rep = SESSION.get(URL, headers={'api-version': "2"})
+        # rep.json()
+
+        DATA_URL = 'https://api.bloomberg.com/eap/catalogs/47929/content/responses/' + rep.json()['contains'][0]['key']
+
+        jdata = SESSION.get(DATA_URL, headers={'api-version': "2"}).json()
+
+        # return (pd.json_normalize(jdata).to_json())
+        return jdata
+
+
+# hug接口输出为json格式
+app = Flask(__name__)
+
+# 服务端口号
+server_port = 7110
+
+# 鉴权文件地址
+ps_credential_path = "ps-credential.txt"  # 鉴权文件地址
+
+# 日度
+# daily_price_sched_key = "IDpcsgDailyType6Price"  # 日度Price任务key(第一版)
+# daily_general_sched_key = "IDpcsgDailyGeneral"  # 日度general任务key(第一版)
+# daily_data_price_dir = "data/day/price"  # 日度Price数据文件夹
+# daily_data_general_dir = "data/day/general"  # 日度Price数据文件夹
+daily_sched_key = "IDpcsgDailyRun2"  # 日度任务key
+daily_data_dir = "data/day2"  # 日度数据文件夹
+
+# 周度
+# weekly_sched_key = "IDpcsgWeeklyRunETA223"  # 周度任务key(暂停)
+# weekly_data_dir = "data/week"
+
+# 月度
+# month_sched_key = "IDpcsgMonthRun"  # 月度任务key(第一版)
+month_sched_key = "IDpcsgMonthRun2"  # 月度任务key
+monthly_data_dir = "data/month2"  # 月度数据文件夹
+
+
+@app.route('/api/bloomberg/server')
+def bloomberg_server():
+    return {"code": 200, "data": "ok", "error": ""}
+
+
+@app.route('/api/bloomberg/daily_data', methods=['POST'])
+def get_bloomberg_daily_data():
+    try:
+        # bbg_down = bbg_schedule_run(ps_credential_path)
+        # df_daily_price = bbg_down.get_sched_data(daily_price_sched_key)
+        # df_daily_general = bbg_down.get_sched_data(daily_general_sched_key)
+        #
+        # # 写入文件留档
+        # write_data_to_file(df_daily_price, daily_data_price_dir)
+        # write_data_to_file(df_daily_general, daily_data_general_dir)
+        #
+        # resp_data = {
+        #     "code": 200,
+        #     "data": {
+        #         "price_data": df_daily_price,
+        #         "general_data": df_daily_general
+        #     },
+        #     "msg": "获取成功"
+        # }
+        # return json.dumps(resp_data, indent=2)
+
+        bbg_down = bbg_schedule_run(ps_credential_path)
+        df_daily = bbg_down.get_sched_data(daily_sched_key)
+
+        # 写入文件留档
+        write_data_to_file(df_daily, daily_data_dir)
+
+        resp_data = {
+            "code": 200,
+            "data": df_daily,
+            "msg": "获取成功"
+        }
+        return json.dumps(resp_data, indent=2)
+    except Exception as e:
+        err_msg = str(e)
+        print(err_msg)
+        return {"code": 403, "data": "", "error": err_msg}
+
+
+# 周度任务暂关闭
+# @app.route('/api/bloomberg/weekly_data', methods=['POST'])
+# def get_bloomberg_weekly_data():
+#     try:
+#         bbg_down = bbg_schedule_run(ps_credential_path)
+#         df_weekly = bbg_down.get_sched_data(weekly_sched_key)
+#
+#         # 写入文件留档
+#         write_data_to_file(df_weekly, weekly_data_dir)
+#
+#         resp_data = {
+#             "code": 200,
+#             "data": df_weekly,
+#             "msg": "获取成功"
+#         }
+#         return json.dumps(resp_data, indent=2)
+#     except Exception as e:
+#         err_msg = str(e)
+#         print(err_msg)
+#         return {"code": 403, "data": "", "error": err_msg}
+
+
+@app.route('/api/bloomberg/monthly_data', methods=['POST'])
+def get_bloomberg_monthly_data():
+    try:
+        bbg_down = bbg_schedule_run(ps_credential_path)
+        df_monthly = bbg_down.get_sched_data(month_sched_key)
+
+        # 写入文件留档
+        write_data_to_file(df_monthly, monthly_data_dir)
+
+        resp_data = {
+            "code": 200,
+            "data": df_monthly,
+            "msg": "获取成功"
+        }
+        return json.dumps(resp_data, indent=2)
+    except Exception as e:
+        err_msg = str(e)
+        print(err_msg)
+        return {"code": 403, "data": "", "error": err_msg}
+
+
+# write_data_to_file 数据写入文件
+def write_data_to_file(json_data, dir_path=None):
+    # 获取当前日期并格式化为YYYY-MM-DD形式
+    today_date_str = datetime.now().strftime('%Y-%m-%d')
+    file_name = f"{today_date_str}.json"
+
+    # 确定输出目录
+    directory = dir_path if dir_path else os.path.join("output", "data")
+
+    # 构建完整的文件路径
+    file_path = os.path.join(directory, file_name)
+
+    # 检查目录是否存在,如果不存在则创建
+    if not os.path.exists(directory):
+        os.makedirs(directory)
+        print(f"目录 '{directory}' 已创建。")
+
+    # 写入JSON数据到文件
+    try:
+        with open(file_path, 'w', encoding='utf-8') as json_file:
+            json.dump(json_data, json_file, ensure_ascii=False, indent=4)
+            print(f"JSON数据已成功写入/更新至 '{file_path}'。")
+    except Exception as e:
+        print(f"写入文件时发生错误:{e}")
+
+
+if __name__ == "__main__":
+    app.run(host='0.0.0.0', port=server_port, debug=True)

+ 23 - 4
rpa_smm_refresh.py

@@ -7,7 +7,7 @@ import os
 import pythoncom
 import win32gui, win32con, win32process
 import pyperclip
-# import psutil
+import psutil
 import urllib.parse
 import autoit
 import datetime
@@ -45,6 +45,9 @@ pointMaxX = 650
 pointMinY = 300
 pointMaxY = 550
 
+# 异常的监控弹框,需要关闭进程的
+err_windows_name_list = ["WPS Office","另存为"]
+
 @hug.get('/smm_chemical/refresh')
 def smm_refresh(file_path):
     screen_width, screen_height = pyautogui.size()
@@ -79,6 +82,9 @@ def smm_refresh(file_path):
             file_name_ext = file_name + file_ext
             # print(file_name_ext)
 
+            # 停止2s打开,避免打开过快导致excel崩溃
+            time.sleep(2)
+
             try:
 
                 # 启动程序
@@ -105,6 +111,19 @@ def smm_refresh(file_path):
                 if found_title == "":
                     print("窗口未打开")
                     return
+
+                # 遍历异常名称列表去校验,如果匹配上了,那么就要退出excel并打开
+                for err_windows_name in err_windows_name_list:
+                    if found_title.startswith(err_windows_name):
+                        # 获取与窗口句柄关联的进程ID
+                        process_id = win32process.GetWindowThreadProcessId(hwnd)[1]
+                        # 根据进程ID获取进程对象并尝试优雅地终止进程
+                        target_process = psutil.Process(process_id)
+                        target_process.terminate()
+                        print("可能是EXCEL崩溃导致,优雅退出EXCEL")
+                        return
+                    
+                # 如果是office的,那么就是要将file_name_ext变更为 file_name;因为office没有后缀
                 if found_title.startswith(file_name_ext) == False:
                     print("当前窗口与excel不一致,当前窗口:", found_title, ";excel:", file_name_ext)
                     return
@@ -124,9 +143,9 @@ def smm_refresh(file_path):
             #return True
 
             # 屏幕最大化
-            hwnd = win32gui.GetForegroundWindow()
-            win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE)
-            time.sleep(1)
+            #hwnd = win32gui.GetForegroundWindow()
+            #win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE)
+            #time.sleep(1)
 
             # 随机2-3次点击 单元格区域
             r = random.randint(2, 3)

+ 10 - 10
wind_api.py

@@ -1,5 +1,5 @@
 import hug
-from bottle import route, run,NORUN
+from bottle import route, run, NORUN
 from WindPy import w
 import json
 import pandas as pd
@@ -15,6 +15,7 @@ def hello():
     return 1
     # return 'wind true'
 
+
 @hug.get('/edbInfo/wind')
 def GetEdbDataByWind(EdbCode, StartDate, EndDate):
     print("GetEdbDataByWind:", EdbCode)
@@ -34,7 +35,7 @@ def GetEdbDataByWind(EdbCode, StartDate, EndDate):
     print("wind data")
     print(data)
     df = pd.DataFrame()
-    if data.ErrorCode == -40521010: # Internet Timeout 超时退出
+    if data.ErrorCode == -40521010:  # Internet Timeout 超时退出
         os._exit(0)
         return "a"
     df['DT'] = data.Times
@@ -50,7 +51,7 @@ def GetEdbDataByWind(EdbCode, StartDate, EndDate):
 
 
 @hug.get('/edbInfo/wind/wsd')
-def GetEdbDataWindWsd(StockCode,EdbCode, StartDate, EndDate):
+def GetEdbDataWindWsd(StockCode, EdbCode, StartDate, EndDate):
     print("GetEdbDataByWind:", EdbCode)
     isConnected = w.isconnected()
     print("isconnected")
@@ -63,19 +64,18 @@ def GetEdbDataWindWsd(StockCode,EdbCode, StartDate, EndDate):
             return "{'ErrMsg':'启动Wind接口失败'}"
 
     option = "Fill=Previous"
-    wsd_data = w.wsd(StockCode,EdbCode, StartDate, EndDate, option)
+    wsd_data = w.wsd(StockCode, EdbCode, StartDate, EndDate, option)
 
-    if wsd_data.ErrorCode == -40521010: # Internet Timeout 超时退出
+    if wsd_data.ErrorCode == -40521010:  # Internet Timeout 超时退出
         os._exit(0)
         return "a"
-   
-    fm=pd.DataFrame(wsd_data.Data,index=wsd_data.Fields,columns=wsd_data.Times)
-    json_data=fm.to_json()
+
+    fm = pd.DataFrame(wsd_data.Data, index=wsd_data.Fields, columns=wsd_data.Times)
+    json_data = fm.to_json()
     result = json.loads(json_data)
     return result
 
 
-
 if __name__ == "__main__":
     # wind 登录
     wStart = w.start()
@@ -83,4 +83,4 @@ if __name__ == "__main__":
         print("启动万得API接口失败")
     print(wStart)
     app = __hug__.http.server()
-    run(app=app, reloader=True,host='0.0.0.0', port=7000)
+    run(app=app, reloader=True, host='0.0.0.0', port=7000)

+ 185 - 152
yongyi_pig/yongyi_pig_manual.py

@@ -1,152 +1,185 @@
-# coding:utf-8
-import os
-import shutil
-from time import sleep
-from bottle import route, run
-import datetime
-
-import hug
-import rarfile as rarfile
-from selenium import webdriver
-
-# 设置Chrome浏览器选项
-from selenium.common import exceptions
-from selenium.webdriver.chrome.service import Service
-from selenium.webdriver.common.by import By
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.support.wait import WebDriverWait
-
-
-def rename_week_file(new_dir, current_time, rar_name):
-    files = os.listdir(rar_name)
-    for dir in files:
-        file_path = os.path.join(rar_name, dir)
-        if os.path.isdir(file_path):
-            for f in os.listdir(file_path):
-                print("f.title()" + f.title())
-                if f.title().find("周度数据") != -1:
-                    new_name = f'{new_dir}/{current_time}_week.xlsx'
-                    old_name = os.path.join(file_path, f)
-                    # os.rename(old_name, new_name)
-                    shutil.copy(old_name, new_name)
-                    print(f'周度文件重命名成功, 旧文件名{old_name} 新文件名{new_name}')
-                    return
-        else:
-            print(dir.title() + "不是一个文件夹")
-            return
-    return
-
-@hug.get('/yongyi/download')
-def yongyi_download(dayFlag, weekFlag):
-    print("dayFlag:"+dayFlag)
-    print("weekFlag:"+weekFlag)
-
-    try:
-        # python+selunium定位已打开的浏览器
-        # 创建一个 Chrome WebDriver 实例
-        options = webdriver.ChromeOptions()
-        # options.add_argument("headless")
-        # options.add_argument('--headless')
-        options.add_argument('--disable-gpu')
-        options.add_argument('--no-sandbox')
-        # 谷歌浏览器运行的默认调试端口:先用以下命令启动浏览器
-        # 找到谷歌浏览器的程序地址,开启一个新的端口,并设置一个文件夹来保存浏览器的数据
-        # /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222  --user-data-dir=/Users/xiexiaoyuan/data/selenium/automationProfile
-        # --remote-debugging-port值,可以指定任何打开的端口
-        # --user-data-dir标记,指定创建新Chrome配置文件的目录。它是为了确保在单独的配置文件中启动chrome,不会污染你的默认配置文件。
-        #
-        # 此时会打开一个浏览器页面,我们输入目标网址,输入账号密码,登录成功。
-        # 登录之后,以后都不需要登录,它会把你这次登录的信息记入到 --user-data-dir指定的目录下
-        # 后面你只需要python + selenium + webdriver定位到这个已经登录的浏览器进行操作就可以啦
-        options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
-        # 修改下载地址
-        # save_to_dir = '/Users/xiexiaoyuan/Downloads'
-        save_to_dir = r'D:/eta/yongyi_data/download'
-        options.add_argument("--download.default_directory=" + save_to_dir)
-        options.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, '
-                             'like Gecko) Chrome/118.0.5993.70 Safari/537.36')
-        options.add_argument(" window-size=1920,1080")
-
-        # s = Service(executable_path='/Users/xiexiaoyuan/chromedriver_mac64_114/chromedriver')
-        # s = Service(executable_path='D:/download/chromedriver119-win64/chromedriver.exe')
-        s = Service(executable_path='D:/eta/chromedriver-win64/chromedriver.exe')
-        driver = webdriver.Chrome(service=s, options=options)
-        driver.get('https://data.yongyizixun888.com/')
-        sleep(3)
-
-        account = driver.find_element(By.XPATH, '//*[@id="dr_member_info"]/a[1]').text
-        print(account)
-
-        # 下载涌溢日度数据库
-        if dayFlag == '1':
-            sleep(1)
-            a = driver.find_element(By.XPATH, '/html/body/div[4]/div[1]/div[2]/div[2]/a')
-            print(a.get_attribute("href"))
-            a.click()
-            sleep(30)
-
-        # 下载涌溢完整数据库
-        if weekFlag == '1':
-            sleep(2)
-            b = driver.find_element(By.XPATH, '/html/body/div[4]/div[1]/div[2]/div[3]/a')
-            print(b.get_attribute("href"))
-            b.click()
-            sleep(30)
-
-        # 获取当前时间,并将其格式化为指定的形式
-        # new_dir = '/Users/xiexiaoyuan/Downloads/yongyi'
-        new_dir = r'D:/eta/yongyi_data/yongyi'
-        current_time = datetime.datetime.now().strftime("%Y-%m-%d")
-        current_time_full = datetime.datetime.now().strftime('%Y{y}%m{m}%d{d}').format(y='年', m='月', d='日')
-        print(current_time_full)
-
-        # 查找文件并重命名
-        os.chdir(save_to_dir)
-        files = filter(os.path.isfile, os.listdir(save_to_dir))
-        files = [os.path.join(save_to_dir, f) for f in files]  # add path to each file
-        files.sort(key=lambda x: os.path.getmtime(x), reverse=True)
-        day_file = ""
-        week_file = ""
-        for file in files:
-            day_name = f'{current_time_full}涌益咨询日度数据'
-            if file.title().find(day_name) != -1:
-                if day_file == "":
-                    day_file = file
-            if file.title().find("涌益咨询周度数据") != -1:
-                if week_file == "":
-                    week_file = file
-            if day_file != "" and week_file != "":
-                break
-
-        if dayFlag == '1':
-            if day_file != "":
-                print(day_file.title())
-                new_name = f'{new_dir}/{current_time}_day.xlsx'
-                # os.rename(day_file.title(), new_name)
-                shutil.copy(day_file.title(), new_name)
-                print(f'日度文件重命名成功, 旧文件名{day_file.title()} 新文件名{new_name}')
-            else:
-                print("未找到日度下载文件")
-
-        if weekFlag == '1':
-            if week_file != "":
-                print(week_file.title())
-                filename = week_file.title()
-                index = filename.find(".Rar")
-                rar_name = filename[:index]
-                # 解压缩
-                rar_file = rarfile.RarFile(filename, 'r')
-                rar_file.extractall(rar_name)
-                rar_file.close()
-                rename_week_file(new_dir, current_time, rar_name)
-            else:
-                print("未找到周度下载文件")
-        return True
-    except Exception as e:
-        print("Exception:")
-        print(str(e))
-        return False
-
-if __name__ == "__main__":
-    app = __hug__.http.server()
-    run(app=app, reloader=True, host='127.0.0.1', port=7010)
+# coding:utf-8
+import os
+import shutil
+import subprocess
+from time import sleep
+from bottle import route, run
+import datetime
+
+import hug
+import rarfile as rarfile
+from selenium import webdriver
+
+# 设置Chrome浏览器选项
+from selenium.common import exceptions
+from selenium.webdriver.chrome.service import Service
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
+from selenium.webdriver.support.wait import WebDriverWait
+
+chrome_driver_path = r"D:/eta/chromedriver-win64/chromedriver.exe"
+chrome_address = r"127.0.0.1:9222"
+
+save_to_dir = r'D:/eta/yongyi_data/excel'
+new_dir = r'D:\eta\yongyi_data\excel\unread'
+rarfile.UNRAR_TOOL = r"D:\Program Files\WinRAR\UnRAR.exe"
+
+def rename_week_file(new_dir, rar_name):
+    files = os.listdir(rar_name)
+    for dir in files:
+        file_path = os.path.join(rar_name, dir)
+        if os.path.isdir(file_path):
+            for f in os.listdir(file_path):
+                print("f.title()" + f.title())
+                if f.title().find("周度数据") != -1:
+                    file_name = os.path.basename(f.title())
+                    new_name = os.path.join(new_dir, file_name)
+                    file_name = file_name.lower()
+                    old_name = os.path.join(file_path, f)
+                    # os.rename(old_name, new_name)
+                    shutil.move(old_name, new_name)
+                    print(f'周度数据文件重命名成功, 旧文件名{old_name} 新文件名{new_name}')
+                elif f.title().find("周度图表版图") != -1:
+                    file_name = os.path.basename(f.title())
+                    file_name = file_name.lower()
+                    new_name = os.path.join(new_dir, file_name)
+                    old_name = os.path.join(file_path, f)
+                    # os.rename(old_name, new_name)
+                    shutil.move(old_name, new_name)
+                    print(f'周度图表版图文件重命名成功, 旧文件名{old_name} 新文件名{new_name}')
+        else:
+            print(dir.title() + "不是一个文件夹")
+            return
+    return
+
+
+def get_yongyi_driver():
+    # python+selunium定位已打开的浏览器
+    # 创建一个 Chrome WebDriver 实例
+    options = webdriver.ChromeOptions()
+    # options.add_argument("headless")
+    # options.add_argument('--headless')
+    options.add_argument('--disable-gpu')
+    options.add_argument('--no-sandbox')
+    # 谷歌浏览器运行的默认调试端口:先用以下命令启动浏览器
+    # 找到谷歌浏览器的程序地址,开启一个新的端口,并设置一个文件夹来保存浏览器的数据
+    # /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222  --user-data-dir=/Users/xiexiaoyuan/data/selenium/automationProfile
+    # --remote-debugging-port值,可以指定任何打开的端口
+    # --user-data-dir标记,指定创建新Chrome配置文件的目录。它是为了确保在单独的配置文件中启动chrome,不会污染你的默认配置文件。
+    #
+    # 此时会打开一个浏览器页面,我们输入目标网址,输入账号密码,登录成功。
+    # 登录之后,以后都不需要登录,它会把你这次登录的信息记入到 --user-data-dir指定的目录下
+    # 后面你只需要python + selenium + webdriver定位到这个已经登录的浏览器进行操作就可以啦
+    options.add_experimental_option("debuggerAddress", chrome_address)
+
+    print("重新打开")
+    options.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, '
+                         'like Gecko) Chrome/118.0.5993.70 Safari/537.36')
+    options.add_argument(" window-size=1920,1080")
+
+    # s = Service(executable_path='/Users/xiexiaoyuan/chromedriver_mac64_114/chromedriver')
+    s = Service(executable_path=chrome_driver_path)
+    driver = webdriver.Chrome(service=s, options=options)
+    driver.get('https://data.yongyizixun888.com/')
+
+    return driver
+
+@hug.get('/yongyi/download')
+def yongyi_download(dayFlag, weekFlag):
+    print("dayFlag:"+dayFlag)
+    print("weekFlag:"+weekFlag)
+    # 修改下载地址
+    # save_to_dir = '/Users/xiexiaoyuan/Downloads'
+    # save_to_dir = r'D:/eta/yongyi_data/download'
+    # 获取当前时间,并将其格式化为指定的形式
+    # new_dir = '/Users/xiexiaoyuan/Downloads/yongyi/unread'
+    # new_dir = r'D:\eta\yongyi_data\yongyi\unread'
+    try:
+        try:
+            driver = get_yongyi_driver()
+        except Exception as e:
+            print("Exception:")
+            print(str(e))
+            if str(e).find("chrome not reachable") != -1:
+                print("浏览器未开启")
+                return False
+            else:
+                return False
+        sleep(3)
+        account = driver.find_element(By.XPATH, '//*[@id="dr_member_info"]/a[1]').text
+        print(account)
+
+        # 下载涌溢日度数据库
+        if dayFlag == '1':
+            sleep(1)
+            a = driver.find_element(By.XPATH, '/html/body/div[4]/div[1]/div[2]/div[2]/a')
+            print(a.get_attribute("href"))
+            a.click()
+            sleep(30)
+
+        # 下载涌溢完整数据库
+        if weekFlag == '1':
+            sleep(2)
+            b = driver.find_element(By.XPATH, '/html/body/div[4]/div[1]/div[2]/div[3]/a')
+            print(b.get_attribute("href"))
+            b.click()
+            sleep(30)
+
+        # 查找文件并重命名
+        os.chdir(save_to_dir)
+        files = filter(os.path.isfile, os.listdir(save_to_dir))
+        files = [os.path.join(save_to_dir, f) for f in files]  # add path to each file
+        files.sort(key=lambda x: os.path.getmtime(x), reverse=True)
+        day_file = ""
+        week_file = ""
+        i =0
+        for file in files:
+            if i > 3:
+                break
+            print(file.title())
+            if file.title().find("涌益咨询日度数据") != -1:
+                if day_file == "":
+                    day_file = file
+            if file.title().find("涌益咨询周度数据") != -1:
+                if week_file == "":
+                    week_file = file
+            if day_file != "" and week_file != "":
+                break
+            i = i+1
+        if dayFlag == '1':
+            if day_file != "":
+                print(day_file.title())
+                file_name = os.path.basename(day_file.title())
+                file_name = file_name.lower()
+                new_name = os.path.join(new_dir,file_name)
+                print(f'新文件名{new_name}')
+                print(f'旧文件名{day_file.title()}')
+
+                # os.rename(day_file.title(), new_name)
+                shutil.move(day_file.title(), new_name)
+                print(f'日度文件重命名成功, 旧文件名{day_file.title()} 新文件名{new_name}')
+            else:
+                print("未找到日度下载文件")
+
+        if weekFlag == '1':
+            if week_file != "":
+                print(week_file.title())
+                filename = week_file.title()
+                index = filename.find(".Rar")
+                rar_name = filename[:index]
+                # 解压缩
+                rar_file = rarfile.RarFile(filename, 'r')
+                rar_file.extractall(rar_name)
+                rar_file.close()
+                rename_week_file(new_dir, rar_name)
+            else:
+                print("未找到周度下载文件")
+        return True
+    except Exception as e:
+        print("Exception:")
+        print(str(e))
+        return False
+
+if __name__ == "__main__":
+    app = __hug__.http.server()
+    run(app=app, reloader=True, host='127.0.0.1', port=7010)