|
|
@@ -22,6 +22,7 @@ def parse_account_response(api_data: Dict, biz: str = "") -> Dict:
|
|
|
# ShowDesc 解析:阅读/赞/付费/赞赏 → 数字
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
|
|
+
|
|
|
def show_desc_to_sta(show_desc: str) -> Dict[str, int]:
|
|
|
"""解析 ShowDesc 中的阅读量、点赞量等
|
|
|
|
|
|
@@ -61,17 +62,30 @@ def show_desc_to_sta(show_desc: str) -> Dict[str, int]:
|
|
|
return "show_unknown"
|
|
|
raw = raw.strip().lower()
|
|
|
mapping = {
|
|
|
- "阅读": "show_view_count", "看过": "show_view_count", "观看": "show_view_count",
|
|
|
- "reads": "show_view_count", "views": "show_view_count", "view": "show_view_count",
|
|
|
- "赞": "show_like_count", "点赞": "show_like_count",
|
|
|
- "likes": "show_like_count", "like": "show_like_count",
|
|
|
- "付费": "show_pay_count", "payments": "show_pay_count", "paid": "show_pay_count",
|
|
|
+ "阅读": "show_view_count",
|
|
|
+ "看过": "show_view_count",
|
|
|
+ "观看": "show_view_count",
|
|
|
+ "reads": "show_view_count",
|
|
|
+ "views": "show_view_count",
|
|
|
+ "view": "show_view_count",
|
|
|
+ "赞": "show_like_count",
|
|
|
+ "点赞": "show_like_count",
|
|
|
+ "likes": "show_like_count",
|
|
|
+ "like": "show_like_count",
|
|
|
+ "付费": "show_pay_count",
|
|
|
+ "payments": "show_pay_count",
|
|
|
+ "paid": "show_pay_count",
|
|
|
"赞赏": "show_zs_count",
|
|
|
}
|
|
|
return mapping.get(raw, "show_unknown")
|
|
|
|
|
|
if not show_desc:
|
|
|
- return {"show_view_count": 0, "show_like_count": 0, "show_pay_count": 0, "show_zs_count": 0}
|
|
|
+ return {
|
|
|
+ "show_view_count": 0,
|
|
|
+ "show_like_count": 0,
|
|
|
+ "show_pay_count": 0,
|
|
|
+ "show_zs_count": 0,
|
|
|
+ }
|
|
|
|
|
|
show_desc = show_desc.replace("+", "")
|
|
|
sta: Dict[str, int] = {}
|
|
|
@@ -106,10 +120,11 @@ def show_desc_to_sta(show_desc: str) -> Dict[str, int]:
|
|
|
# 文章列表响应解析
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
|
|
+
|
|
|
def parse_article_list_response(data_list: List[Dict], gh_id: str) -> List[Dict]:
|
|
|
"""get_article_list_from_account 返回的 data.data[] → articles 表 INSERT dict 列表"""
|
|
|
rows = []
|
|
|
- for group in (data_list or []):
|
|
|
+ for group in data_list or []:
|
|
|
app_msg = group.get("AppMsg") or {}
|
|
|
base_info = app_msg.get("BaseInfo") or {}
|
|
|
detail_list = app_msg.get("DetailInfo") or []
|
|
|
@@ -120,30 +135,32 @@ def parse_article_list_response(data_list: List[Dict], gh_id: str) -> List[Dict]
|
|
|
show_desc = detail.get("ShowDesc", "") or ""
|
|
|
counts = show_desc_to_sta(show_desc)
|
|
|
|
|
|
- rows.append({
|
|
|
- "gh_id": gh_id,
|
|
|
- "app_msg_id": base_info.get("AppMsgId", 0),
|
|
|
- "item_index": detail.get("ItemIndex", 0),
|
|
|
- "title": detail.get("Title", "") or "",
|
|
|
- "content_url": url,
|
|
|
- "wx_sn": extract_wx_sn(url) or "",
|
|
|
- "digest": detail.get("Digest", "") or "",
|
|
|
- "is_original": 1 if detail.get("IsOriginal") else 0,
|
|
|
- "item_show_type": detail.get("ItemShowType", 0) or 0,
|
|
|
- "source_url": detail.get("SourceUrl", "") or "",
|
|
|
- "cover_img_url": detail.get("CoverImgUrl", "") or "",
|
|
|
- "show_desc": show_desc,
|
|
|
- "show_view_count": counts["show_view_count"],
|
|
|
- "show_like_count": counts["show_like_count"],
|
|
|
- "show_pay_count": counts["show_pay_count"],
|
|
|
- "show_zs_count": counts["show_zs_count"],
|
|
|
- "type": base_info.get("Type", 0) or 0,
|
|
|
- "send_time": detail.get("send_time", 0) or 0,
|
|
|
- "create_time": base_info.get("CreateTime", 0) or 0,
|
|
|
- "update_time": base_info.get("UpdateTime", 0) or 0,
|
|
|
- "date_time": top_base.get("DateTime", 0) or 0,
|
|
|
- "base_info": top_base,
|
|
|
- })
|
|
|
+ rows.append(
|
|
|
+ {
|
|
|
+ "gh_id": gh_id,
|
|
|
+ "app_msg_id": base_info.get("AppMsgId", 0),
|
|
|
+ "item_index": detail.get("ItemIndex", 0),
|
|
|
+ "title": detail.get("Title", "") or "",
|
|
|
+ "content_url": url,
|
|
|
+ "wx_sn": extract_wx_sn(url) or "",
|
|
|
+ "digest": detail.get("Digest", "") or "",
|
|
|
+ "is_original": 1 if detail.get("IsOriginal") else 0,
|
|
|
+ "item_show_type": detail.get("ItemShowType", 0) or 0,
|
|
|
+ "source_url": detail.get("SourceUrl", "") or "",
|
|
|
+ "cover_img_url": detail.get("CoverImgUrl", "") or "",
|
|
|
+ "show_desc": show_desc,
|
|
|
+ "show_view_count": counts["show_view_count"],
|
|
|
+ "show_like_count": counts["show_like_count"],
|
|
|
+ "show_pay_count": counts["show_pay_count"],
|
|
|
+ "show_zs_count": counts["show_zs_count"],
|
|
|
+ "type": base_info.get("Type", 0) or 0,
|
|
|
+ "send_time": detail.get("send_time", 0) or 0,
|
|
|
+ "create_time": base_info.get("CreateTime", 0) or 0,
|
|
|
+ "update_time": base_info.get("UpdateTime", 0) or 0,
|
|
|
+ "date_time": top_base.get("DateTime", 0) or 0,
|
|
|
+ "base_info": top_base,
|
|
|
+ }
|
|
|
+ )
|
|
|
return rows
|
|
|
|
|
|
|