WechatMoments/entity/moment_msg.py

134 lines
3.9 KiB
Python
Raw Normal View History

2024-03-28 23:04:06 +08:00
import json
from dataclasses import dataclass, field
from typing import Optional, List
from datetime import datetime, timezone, timedelta
import xmltodict
from dataclasses_json import dataclass_json, config
@dataclass_json
@dataclass
class Location:
poiName: str = field(metadata=config(field_name="@poiName"), default="")
longitude: str = field(metadata=config(field_name="@longitude"), default="")
latitude: str = field(metadata=config(field_name="@latitude"), default="")
country: str = field(metadata=config(field_name="@country"), default="")
@dataclass_json
@dataclass
class Url:
type: str = field(metadata=config(field_name="@type"))
text: str = field(metadata=config(field_name="#text"), default="")
md5: str = field(metadata=config(field_name="@md5"), default="")
2024-06-08 18:09:36 +08:00
token: str = field(metadata=config(field_name="@token"), default="")
enc_idx: str = field(metadata=config(field_name="@enc_idx"), default="")
2024-03-28 23:04:06 +08:00
@dataclass_json
@dataclass
class Thumb:
type: str = field(metadata=config(field_name="@type"))
text: str = field(metadata=config(field_name="#text"))
2024-06-08 18:09:36 +08:00
token: str = field(metadata=config(field_name="@token"), default="")
enc_idx: str = field(metadata=config(field_name="@enc_idx"), default="")
2024-03-28 23:04:06 +08:00
@dataclass_json
@dataclass
class Media:
type: Optional[str] = None
id: Optional[str] = None
url: Optional[Url] | str = None
thumb: Optional[Thumb] = None
thumbUrl: Optional[str] = None
videoDuration: Optional[str] = None
2024-04-16 21:48:35 +08:00
title: Optional[str] = None
description: Optional[str] = None
2024-03-28 23:04:06 +08:00
@dataclass_json
@dataclass
class MediaList:
media: list[Media]
@dataclass_json
@dataclass
class FinderFeed:
feedType: Optional[str] = ""
nickname: Optional[str] = ""
desc: Optional[str] = ""
mediaList: Optional[MediaList] = None
@dataclass_json
@dataclass
class ContentObject:
contentStyle: int
contentUrl: Optional[str] = ""
title: Optional[str] = ""
2024-04-16 21:48:35 +08:00
description: Optional[str] = ""
2024-03-28 23:04:06 +08:00
mediaList: Optional[MediaList] = None
# 视频号消息
finderFeed: Optional[FinderFeed] = None
@dataclass_json
@dataclass
class TimelineObject:
username: str
location: Location
ContentObject: ContentObject
createTime: int
contentDesc: Optional[str] = ""
@property
def create_date(self):
dt = datetime.fromtimestamp(self.createTime, timezone.utc)
# 转换为北京时间UTC+8
beijing_timezone = timezone(timedelta(hours=8))
date = dt.astimezone(beijing_timezone).date()
return date
@property
def create_time(self)->str:
dt = datetime.fromtimestamp(self.createTime, timezone.utc)
# 转换为北京时间UTC+8
beijing_timezone = timezone(timedelta(hours=8))
time_formatted = dt.astimezone(beijing_timezone).strftime('%Y-%m-%d %H:%M:%S')
return time_formatted
2024-06-08 18:09:36 +08:00
@property
def create_year_month(self)->str:
dt = datetime.fromtimestamp(self.createTime, timezone.utc)
# 转换为北京时间UTC+8
beijing_timezone = timezone(timedelta(hours=8))
time_formatted = dt.astimezone(beijing_timezone).strftime('%Y-%m')
return time_formatted
2024-03-28 23:04:06 +08:00
@dataclass_json
@dataclass
class MomentMsg:
timelineObject: TimelineObject = field(metadata=config(field_name="TimelineObject"))
def test():
xml = """
"""
msg_dict = xmltodict.parse(xml.replace(chr(10), '').replace(chr(9), ''), force_list={'media'})
msg_json = json.dumps(msg_dict, sort_keys=False, indent=2)
momentMsg = MomentMsg.from_json(msg_json)
print(momentMsg)
def test_time_convert():
time = 1706592456
dt = datetime.fromtimestamp(time, timezone.utc)
# 转换为北京时间UTC+8
beijing_timezone = timezone(timedelta(hours=8))
beijing_time = dt.astimezone(beijing_timezone).strftime('%Y-%m-%d %H:%M:%S')
print(beijing_time)
if __name__ == "__main__":
test()