WechatMoments/exporter/image_exporter.py

66 lines
2.4 KiB
Python
Raw Normal View History

2024-03-28 23:04:06 +08:00
import os
import re
from typing import Tuple, Optional
from entity.moment_msg import MomentMsg, Media
import requests
import uuid
class ImageExporter:
def __init__(self, dir_name: str):
self.dir_name = dir_name
if not os.path.exists(f'output/{self.dir_name}/thumbs/'):
os.mkdir(f'output/{self.dir_name}/thumbs/')
if not os.path.exists(f'output/{self.dir_name}/images/'):
os.mkdir(f'output/{self.dir_name}/images/')
def save_image(self, url: str, img_type: str) -> str:
""" 下载图片
"""
if not (img_type == 'image' or img_type == 'thumb'):
raise Exception("img_type 参数非法")
file_name = uuid.uuid4()
response = requests.get(url)
if response.ok:
with open(f'output/{self.dir_name}/{img_type}s/{file_name}.jpg', 'wb') as file:
file.write(response.content)
return f'{img_type}s/{file_name}.jpg'
def get_images(self, msg: MomentMsg, download_pic: int) -> list[Tuple]:
""" 获取一条朋友圈的全部图像, 返回值是一个元组列表
[(缩略图路径原图路径)(缩略图路径原图路径)]
"""
results = []
if not msg.timelineObject.ContentObject.mediaList:
return results
media = msg.timelineObject.ContentObject.mediaList.media
for media_item in media:
if media_item.type == "2":
if download_pic:
thumb_path = self.save_image(media_item.thumb.text, 'thumb')
image_path = self.save_image(media_item.url.text, 'image')
else:
thumb_path = media_item.thumb.text
image_path = media_item.url.text
if thumb_path and image_path:
results.append((thumb_path, image_path))
return results
def get_finder_images(self, msg: MomentMsg) -> Optional[str]:
""" 获取视频号的封面图
"""
results = None
if not msg.timelineObject.ContentObject.finderFeed:
return results
if not msg.timelineObject.ContentObject.finderFeed.mediaList:
return results
media = msg.timelineObject.ContentObject.finderFeed.mediaList.media
for media_item in media:
thumb_path = self.save_image(media_item.thumbUrl, 'thumb')
return thumb_path