我无法直接访问外部互联网、操作 GitHub 仓库、生成图像文件或连接您的 WordPress 数据库。这些操作超出了我的能力范围,需要借助专门的编程脚本(如 Python)和 API 接口来实现。
不过,我可以为您提供一个基于 Python 的解决方案框架。您可以使用以下代码逻辑在本地环境中完成这些任务:
1. **获取数据**:使用 `requests` 库调用 GitHub API 获取 `eooce/transfer-api` 下的项目列表,并按 Star 数量排序。
2. **去重检查**:读取本地数据库或文件,根据仓库 URL 过滤已存在的项目。
3. **生成封面图**:使用 `Pillow` 库根据指定尺寸(600x450px)和格式(JPG)生成简单的文本封面图。
4. **发布到 WordPress**:使用 `wpapi` 或 `requests` 调用 WordPress REST API 创建文章并上传媒体文件。
### Python 示例代码框架
“`python
import requests
from PIL import Image, ImageDraw, ImageFont
import json
import os
# 配置信息
GITHUB_API_URL = "https://api.github.com/repos/eooce/transfer-api"
WORDPRESS_URL = "https://your-wordpress-site.com/wp-json/wp/v2"
WORDPRESS_USER = "your_username"
WORDPRESS_PASS = "your_app_password_or_secret"
def get_github_projects():
# 获取仓库下的 issues 或 releases 作为项目来源,这里假设通过 issues 或特定标签筛选
# 注意:GitHub API 对未认证请求有速率限制
response = requests.get(GITHUB_API_URL)
if response.status_code == 200:
return response.json()
return {}
def generate_cover_image(text, filename="cover.jpg"):
# 创建 600×450 的白色背景图片
img = Image.new('RGB', (600, 450), color='white')
d = ImageDraw.Draw(img)
# 添加文本 (可能需要加载字体文件)
try:
font = ImageFont.truetype("arial.ttf", 20)
except IOError:
font = ImageFont.load_default()
d.text((10, 10), text, fill='black', font=font)
img.save(filename, 'JPEG')
return filename
def check_duplicate(repo_url, existing_urls):
return repo_url not in existing_urls
def publish_to_wordpress(title, content, cover_image_path):
# 1. 上传图片
media_upload_url = f"{WORDPRESS_URL}/media"
with open(cover_image_path, 'rb') as img_file:
files = {'file': (cover_image_path, img_file, 'image/jpeg')}
upload_response = requests.post(media_upload_url, auth=(WORDPRESS_USER, WORDPRESS_PASS), files=files)
media_id = None
if upload_response.status_code == 201:
media_id = upload_response.json().get('id')
# 2. 创建文章
post_data = {
"title": title,
"content": content,
"status": "publish",
"featured_media": media_id
}
posts_url = f"{WORDPRESS_URL}/posts"
response = requests.post(posts_url, json=post_data, auth=(WORDPRESS_USER, WORDPRESS_PASS))
return response.status_code
if __name__ == "__main__":
# 1. 获取 GitHub 项目信息
repo_info = get_github_projects()
project_name = repo_info.get('full_name', 'Unknown Project')
star_count = repo_info.get('stargazers_count', 0)
html_url = repo_info.get('html_url', '')
# 2. 生成封面图
cover_text = f"{project_name} – Stars: {star_count}"
cover_path = generate_cover_image(cover_text)
# 3. 构建正文内容
body_content = f"""
<h2>{project_name}</h2>
<p>这是一个非常受欢迎的项目,Stars: {star_count}。</p>
<p>仓库地址:<a href="{html_url}">{html_url}</a></p>
"""
# 4. 发布到 WordPress
# 注意:实际应用中需要维护一个 local_db 或 file 来存储已发布的 URL 以进行去重
status = publish_to_wordpress(f"推荐项目: {project_name}", body_content, cover_path)
print(f"发布状态: {status}")
“`
### 注意事项:
1. **GitHub API 限制**:未认证的 API 请求每小时限制为 60 次。如果需要大量采集,建议使用 Personal Access Token。
2. **WordPress 凭证**:请使用 Application Passwords(WordPress 5.6+ 支持)或通过插件获取 OAuth 令牌以确保安全。
3. **去重逻辑**:上述代码仅为示例,您需要自己实现持久化存储(如 SQLite 或 JSON 文件)来记录已发布的仓库 URL,以实现“不要本地有重复项目”的要求。
4. **图片生成**:确保系统中安装了可用的字体文件(如 `.ttf`),否则 `Pillow` 可能无法正确渲染中文或特定样式。


暂无评论内容