Files
XCDesktop/tools/tongyi/PptExtraction.py
2026-03-08 01:34:54 +08:00

147 lines
4.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python
#coding=utf-8
import os
import json
import requests
import datetime
from urllib.parse import urlparse
def read_a_txt():
"""
读取并解析 a.txt 文件,提取 PptExtraction 链接
"""
try:
file_path = r'd:\Xuanchi\高斯泼溅\XCNote\tools\tongyi\a.txt'
with open(file_path, 'r', encoding='utf-8') as f:
# 读取文件内容,跳过开头的 "响应数据: " 字符串
content = f.read().replace('响应数据: ', '')
data = json.loads(content)
ppt_extraction_url = data.get('Data', {}).get('Result', {}).get('PptExtraction')
if ppt_extraction_url:
print(f"成功提取 PptExtraction 链接: {ppt_extraction_url}")
return ppt_extraction_url
else:
print("无法找到 PptExtraction 链接")
return None
except Exception as e:
print(f"读取 a.txt 文件失败: {e}")
import traceback
traceback.print_exc()
return None
def download_ppt_extraction(url):
"""
下载并解析 PptExtraction 内容
"""
try:
print(f"开始下载 PptExtraction 内容: {url}")
response = requests.get(url, timeout=30)
response.raise_for_status()
data = response.json()
ppt_extraction_data = data.get('PptExtraction', {})
key_frame_list = ppt_extraction_data.get('KeyFrameList', [])
print(f"成功下载并解析 PptExtraction 内容,共 {len(key_frame_list)} 张图片")
return key_frame_list
except Exception as e:
print(f"下载 PptExtraction 内容失败: {e}")
import traceback
traceback.print_exc()
return []
def download_image(url, save_dir, timestamp, index):
"""
下载图片并保存到指定目录
"""
try:
print(f"开始下载图片: {url}")
response = requests.get(url, timeout=30)
response.raise_for_status()
# 生成图片文件名年月日_时分秒_序号.png
image_filename = f"{timestamp}_{str(index).zfill(3)}.png"
image_path = os.path.join(save_dir, image_filename)
# 保存图片
with open(image_path, 'wb') as f:
f.write(response.content)
print(f"成功下载图片: {image_filename}")
return image_filename
except Exception as e:
print(f"下载图片失败: {e}")
import traceback
traceback.print_exc()
return None
def main():
"""
主函数
"""
print("===== 开始处理 PPT 提取结果 =====")
# 1. 读取并解析 a.txt 文件
ppt_extraction_url = read_a_txt()
if not ppt_extraction_url:
print("无法提取 PptExtraction 链接,程序退出")
return
# 2. 下载并解析 PptExtraction 内容
key_frame_list = download_ppt_extraction(ppt_extraction_url)
if not key_frame_list:
print("无法获取 PPT 内容,程序退出")
return
# 3. 生成时间戳年月日_时分秒
timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
print(f"生成时间戳: {timestamp}")
# 4. 创建保存目录
save_dir = r'd:\Xuanchi\高斯泼溅\XCNote\tools\tongyi\ppt_output'
if not os.path.exists(save_dir):
os.makedirs(save_dir)
print(f"创建保存目录: {save_dir}")
# 5. 下载图片并整理结果
result_dict = {}
downloaded_count = 0
for i, frame in enumerate(key_frame_list):
image_url = frame.get('FileUrl')
if image_url:
# 下载图片
image_filename = download_image(image_url, save_dir, timestamp, i+1)
if image_filename:
downloaded_count += 1
# 整理结果到字典
result_dict[i+1] = {
"Start": frame.get('Start'),
"End": frame.get('End'),
"ImageMd": f"![]({image_filename})"
}
if not downloaded_count:
print("无法下载任何图片,程序退出")
return
# 6. 输出整理结果
print(f"\n===== 处理完成 =====")
print(f"保存目录: {save_dir}")
print(f"下载的图片数量: {downloaded_count}")
print(f"\n整理结果:")
print(json.dumps(result_dict, indent=4, ensure_ascii=False))
if __name__ == "__main__":
main()