Files
ChouJuGEO/platform_sync/copy_manager.py
T
2026-04-30 18:37:46 +08:00

339 lines
9.5 KiB
Python
Raw 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.
"""
一键复制管理器 - 用于无API平台的内容格式化
"""
import pyperclip
from typing import Dict, Any, Optional
import re
class CopyManager:
"""一键复制管理器"""
def __init__(self):
self.templates = self._init_templates()
def _init_templates(self) -> Dict[str, Dict[str, Any]]:
"""初始化平台格式模板"""
return {
"头条号(资讯软文)": {
"format": "title_content",
"max_length": 2000,
"supports_tags": True
},
"小红书(生活种草)": {
"format": "title_content_tags",
"max_length": 1000,
"supports_tags": True,
"supports_images": True
},
"抖音图文(短内容)": {
"format": "title_content_tags",
"max_length": 500,
"supports_tags": True,
"supports_images": True
},
"简书(文艺)": {
"format": "title_content",
"max_length": 3000,
"supports_tags": True
},
"QQ空间(社交)": {
"format": "title_content",
"max_length": 1500,
"supports_tags": True,
"supports_images": True
},
"新浪博客(博客)": {
"format": "title_content",
"max_length": 3000,
"supports_tags": True
},
"新浪新闻(资讯)": {
"format": "title_content",
"max_length": 2000,
"supports_tags": False
},
"搜狐号(资讯)": {
"format": "title_content",
"max_length": 2500,
"supports_tags": True
},
"一点号(资讯)": {
"format": "title_content",
"max_length": 2500,
"supports_tags": True
},
"东方财富(财经)": {
"format": "title_content",
"max_length": 3000,
"supports_tags": False
},
"邦阅网(外贸)": {
"format": "title_content",
"max_length": 2500,
"supports_tags": True
},
"原创力文档(文档)": {
"format": "title_content",
"max_length": 5000,
"supports_tags": False
}
}
def format_for_platform(self, platform: str, content: str, title: str,
keyword: str = "", brand: str = "", **kwargs) -> str:
"""
为平台格式化内容
Args:
platform: 平台名称
content: 原始内容
title: 标题
keyword: 关键词
brand: 品牌
**kwargs: 其他参数(标签、摘要等)
Returns:
格式化后的内容
"""
template_config = self.templates.get(platform, {})
format_type = template_config.get("format", "title_content")
max_length = template_config.get("max_length", 2000)
# 提取标题(如果内容中包含标题)
if not title and content:
# 尝试从内容第一行提取标题
first_line = content.split('\n')[0].strip()
if len(first_line) < 100 and not first_line.startswith('#'):
title = first_line
else:
title = keyword or "文章标题"
# 清理内容
formatted_content = self._clean_content(content, platform)
# 截断内容(如果需要)
if max_length and len(formatted_content) > max_length:
formatted_content = formatted_content[:max_length] + "..."
# 根据格式类型格式化
if format_type == "title_content":
return f"{title}\n\n{formatted_content}"
elif format_type == "title_content_tags":
tags = kwargs.get('tags', [])
tags_str = " ".join([f"#{tag}" for tag in tags[:10]]) if tags else ""
return f"{title}\n\n{formatted_content}\n\n{tags_str}"
else:
return f"{title}\n\n{formatted_content}"
def _clean_content(self, content: str, platform: str) -> str:
"""清理内容,移除平台不支持的格式"""
# 移除Markdown图片语法,保留描述
content = re.sub(r'!\[([^\]]*)\]\([^\)]+\)', r'【配图:\1】', content)
# 移除Markdown链接,保留文本
content = re.sub(r'\[([^\]]+)\]\([^\)]+\)', r'\1', content)
# 移除Markdown代码块标记,保留内容
content = re.sub(r'```[\w]*\n', '', content)
content = re.sub(r'```', '', content)
# 移除Markdown标题标记
content = re.sub(r'^#+\s+', '', content, flags=re.MULTILINE)
# 移除Markdown加粗/斜体
content = re.sub(r'\*\*([^\*]+)\*\*', r'\1', content)
content = re.sub(r'\*([^\*]+)\*', r'\1', content)
content = re.sub(r'__([^_]+)__', r'\1', content)
content = re.sub(r'_([^_]+)_', r'\1', content)
return content.strip()
def copy_to_clipboard(self, text: str) -> bool:
"""复制到剪贴板"""
try:
pyperclip.copy(text)
return True
except Exception as e:
import logging
logging.error(f"复制失败: {e}")
return False
def generate_publish_guide(self, platform: str) -> str:
"""生成发布指南"""
guides = {
"头条号(资讯软文)": """
📝 发布步骤:
1. 登录头条号后台(https://mp.toutiao.com/
2. 点击"发布""文章"
3. 粘贴标题和内容
4. 添加封面图和标签
5. 选择分类和频道
6. 点击"发布"
💡 提示:
- 标题要吸引人,控制在30字以内
- 内容建议800-2000字
- 配图建议3-5张
""",
"小红书(生活种草)": """
📝 发布步骤:
1. 打开小红书APP
2. 点击"+"号发布
3. 选择"图文"
4. 粘贴标题和内容
5. 添加图片(建议3-9张)
6. 添加标签和话题
7. 选择位置(可选)
8. 发布
💡 提示:
- 标题要吸引人,控制在20字以内
- 内容建议500-1000字
- 图片要清晰美观
- 标签要相关且热门
""",
"抖音图文(短内容)": """
📝 发布步骤:
1. 打开抖音APP
2. 点击"+"号发布
3. 选择"图文"
4. 粘贴标题和内容
5. 添加图片(建议3-9张)
6. 添加话题标签
7. 选择位置(可选)
8. 发布
💡 提示:
- 标题要吸引人,控制在30字以内
- 内容建议200-500字
- 图片要清晰美观
- 话题要热门
""",
"简书(文艺)": """
📝 发布步骤:
1. 登录简书(https://www.jianshu.com/
2. 点击"写文章"
3. 粘贴标题和内容
4. 添加标签
5. 选择专题(可选)
6. 点击"发布"
💡 提示:
- 标题要有文艺范
- 内容建议1500-3000字
- 标签要相关
""",
"QQ空间(社交)": """
📝 发布步骤:
1. 打开QQ空间
2. 点击"说说""日志"
3. 粘贴标题和内容
4. 添加图片(可选)
5. 选择可见范围
6. 发布
💡 提示:
- 内容要轻松活泼
- 建议500-1500字
- 配图要生活化
""",
"新浪博客(博客)": """
📝 发布步骤:
1. 登录新浪博客(https://blog.sina.com.cn/
2. 点击"发博文"
3. 粘贴标题和内容
4. 添加标签
5. 选择分类
6. 点击"发布"
💡 提示:
- 内容要有深度
- 建议1500-3000字
- 配图要相关
""",
"新浪新闻(资讯)": """
📝 发布步骤:
1. 登录新浪新闻后台
2. 点击"发布文章"
3. 粘贴标题和内容
4. 添加配图
5. 选择分类
6. 提交审核
💡 提示:
- 内容要客观专业
- 建议800-2000字
- 配图要清晰
""",
"搜狐号(资讯)": """
📝 发布步骤:
1. 登录搜狐号(https://mp.sohu.com/
2. 点击"发布""文章"
3. 粘贴标题和内容
4. 添加封面图和标签
5. 选择分类
6. 点击"发布"
💡 提示:
- 内容要专业
- 建议1000-2500字
- 配图要相关
""",
"一点号(资讯)": """
📝 发布步骤:
1. 登录一点号后台
2. 点击"发布文章"
3. 粘贴标题和内容
4. 添加配图和标签
5. 选择分类
6. 提交审核
💡 提示:
- 内容要有深度
- 建议1000-2500字
""",
"东方财富(财经)": """
📝 发布步骤:
1. 登录东方财富后台
2. 点击"发布文章"
3. 粘贴标题和内容
4. 添加配图
5. 选择财经分类
6. 提交审核
💡 提示:
- 内容要专业准确
- 建议1500-3000字
- 数据要准确
""",
"邦阅网(外贸)": """
📝 发布步骤:
1. 登录邦阅网后台
2. 点击"发布文章"
3. 粘贴标题和内容
4. 添加标签
5. 选择外贸分类
6. 提交审核
💡 提示:
- 内容要专业实用
- 建议1000-2500字
""",
"原创力文档(文档)": """
📝 发布步骤:
1. 登录原创力文档(https://www.doc88.com/
2. 点击"上传文档"
3. 选择"新建文档"
4. 粘贴标题和内容
5. 设置文档属性
6. 提交审核
💡 提示:
- 内容要结构化
- 建议2000-5000字
- 格式要规范
"""
}
return guides.get(platform, "请参考平台官方发布指南")