在社交媒体管理中,批量删除推文是一个常见需求。无论是清理旧内容、违规内容处理,还是账户重置,TwitterX API 的 Delete One or More Tweets 端点都提供了强大的解决方案。本文将详细介绍如何安全有效地使用这个功能。
API 端点概述
根据 TwitterX API官方文档,Delete One or More Tweets 端点支持两种删除模式:
- 单条推文删除:指定 target_id 删除特定推文
- 批量删除:省略 target_id 删除账户所有推文
基本信息
- 请求方法: POST
- 端点路径: /twitter/tweets/delete-batch
- 认证方式: Bearer Token + Cookie
⚠️ 重要警告:批量删除模式是不可逆的,会永久删除账户所有推文。使用时需要极其谨慎!
快速开始
1. 基本请求示例
curl --request POST \
--url https://api.twitterxapi.com/twitter/tweets/delete-batch \
--header 'Authorization: Bearer YOUR_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"cookie": "auth_token=abc123...",
"username": "myusername",
"target_id": "1234567890123456789"
}'
2. Python 实现
import requests
import asyncio
import time
from typing import List, Optional, Dict
from pydantic import BaseModel
class DeleteTweetRequest(BaseModel):
"""删除推文请求模型"""
cookie: str
username: str
target_id: Optional[str] = None # None 表示删除所有推文
class DeleteTweetResponse(BaseModel):
"""删除推文响应模型"""
code: int
msg: str
data: List[str] # 被删除的推文ID列表
class TwitterDeleteManager:
"""Twitter 推文删除管理器"""
def __init__(self, api_token: str, base_url: str = "https://api.twitterxapi.com"):
self.api_token = api_token
self.base_url = base_url
self.session = requests.Session()
self.session.headers.update({
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json"
})
async def delete_single_tweet(self, cookie: str, username: str, tweet_id: str) -> DeleteTweetResponse:
"""
删除单条推文
Args:
cookie: Twitter 认证 Cookie
username: Twitter 用户名
tweet_id: 要删除的推文ID
Returns:
DeleteTweetResponse: 删除结果
"""
request_data = DeleteTweetRequest(
cookie=cookie,
username=username,
target_id=tweet_id
)
return await self._make_delete_request(request_data)
async def delete_multiple_tweets(self, cookie: str, username: str, tweet_ids: List[str]) -> List[DeleteTweetResponse]:
"""
删除多条推文
Args:
cookie: Twitter 认证 Cookie
username: Twitter 用户名
tweet_ids: 要删除的推文ID列表
Returns:
List[DeleteTweetResponse]: 删除结果列表
"""
results = []
for tweet_id in tweet_ids:
try:
result = await self.delete_single_tweet(cookie, username, tweet_id)
results.append(result)
# 添加延迟避免速率限制
await asyncio.sleep(1)
except Exception as e:
print(f"删除推文 {tweet_id} 失败: {e}")
results.append(DeleteTweetResponse(
code=500,
msg=f"删除失败: {str(e)}",
data=[]
))
return results
async def delete_all_tweets(self, cookie: str, username: str, confirm: bool = False) -> DeleteTweetResponse:
"""
删除所有推文 - 危险操作!
Args:
cookie: Twitter 认证 Cookie
username: Twitter 用户名
confirm: 必须明确确认才能执行
Returns:
DeleteTweetResponse: 删除结果
"""
if not confirm:
raise ValueError("删除所有推文需要明确确认!请设置 confirm=True")
# 额外的安全检查
print(f"⚠️ 警告:即将删除用户 {username} 的所有推文!")
print("这个操作是不可逆的!")
request_data = DeleteTweetRequest(
cookie=cookie,
username=username
# 不设置 target_id 表示删除所有
)
return await self._make_delete_request(request_data)
async def _make_delete_request(self, request_data: DeleteTweetRequest) -> DeleteTweetResponse:
"""执行删除请求"""
url = f"{self.base_url}/twitter/tweets/delete-batch"
response = self.session.post(
url,
json=request_data.dict(exclude_none=True)
)
if response.status_code == 200:
return DeleteTweetResponse(**response.json())
else:
raise Exception(f"API 请求失败: {response.status_code} - {response.text}")
FastAPI 集成实现
from fastapi import FastAPI, Depends, HTTPException, Body
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
app = FastAPI()
security = HTTPBearer()
@app.post(
'/twitter/tweets/delete-batch',
summary="Delete One or More Tweets",
description="""删除一条或多条推文。支持两种模式:
1. **单条推文删除**:提供 `target_id` 删除特定推文
2. **批量删除**:省略 `target_id` 删除账户所有推文
⚠️ **警告**:批量删除模式是不可逆的,会永久删除所有推文。请谨慎使用!""",
response_description="删除成功确认",
response_model=DeleteTweetResponse,
tags=["Tweet Actions Endpoints"]
)
async def delete_tweets_batch(
query_data: DeleteTweetRequest,
credentials: HTTPAuthorizationCredentials = Depends(security)
):
"""删除推文的 API 端点"""
try:
token = credentials.credentials
# 如果是删除所有推文,需要额外验证
if not query_data.target_id:
# 可以添加额外的安全检查,比如需要特殊权限
if not await verify_admin_permission(token):
raise HTTPException(
status_code=403,
detail="删除所有推文需要管理员权限"
)
result = await delete_tweets_internal(
cookie=query_data.cookie,
username=query_data.username,
target_id=query_data.target_id
)
return {
"code": 200,
"msg": "success",
"data": result
}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
async def delete_tweets_internal(cookie: str, username: str, target_id: Optional[str] = None):
"""内部删除逻辑"""
# 这里实现实际的删除逻辑
# 连接到 Twitter API 或使用第三方库
if target_id:
# 删除单条推文
return await delete_single_tweet_logic(cookie, username, target_id)
else:
# 删除所有推文 - 需要特别小心
return await delete_all_tweets_logic(cookie, username)
总结
TwitterX API 的 Delete One or More Tweets 端点提供了强大的推文删除功能,但需要谨慎使用。通过本文提供的完整解决方案,你可以:
核心功能
- 安全删除: 支持单条、批量和全部删除模式
- 智能策略: 基于时间、内容、互动数据的智能删除
- 备份恢复: 删除前自动备份,支持数据恢复
- 监控报告: 完整的操作日志和统计报告
安全保障
- 多重验证: 请求验证、安全检查清单、用户确认
- 错误处理: 重试机制、检查点恢复、异常处理
- 速率限制: 智能速率控制,避免API限制
- 操作日志: 详细的操作记录和审计跟踪
最佳实践
- 始终备份: 删除前创建备份,支持意外恢复
- 分批处理: 大量删除时使用分批策略
- 预览模式: 重要操作前先使用预览模式
- 监控警报: 设置异常监控和自动警报
记住,删除操作是不可逆的,特别是批量删除功能。在生产环境中使用时,请务必遵循安全检查流程,确保操作的正确性和安全性。