在社交媒体管理中,批量删除推文是一个常见需求。无论是清理旧内容、违规内容处理,还是账户重置,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 端点提供了强大的推文删除功能,但需要谨慎使用。通过本文提供的完整解决方案,你可以:

核心功能

  1. 安全删除: 支持单条、批量和全部删除模式
  1. 智能策略: 基于时间、内容、互动数据的智能删除
  1. 备份恢复: 删除前自动备份,支持数据恢复
  1. 监控报告: 完整的操作日志和统计报告

安全保障

  1. 多重验证: 请求验证、安全检查清单、用户确认
  1. 错误处理: 重试机制、检查点恢复、异常处理
  1. 速率限制: 智能速率控制,避免API限制
  1. 操作日志: 详细的操作记录和审计跟踪

最佳实践

  1. 始终备份: 删除前创建备份,支持意外恢复
  1. 分批处理: 大量删除时使用分批策略
  1. 预览模式: 重要操作前先使用预览模式
  1. 监控警报: 设置异常监控和自动警报

记住,删除操作是不可逆的,特别是批量删除功能。在生产环境中使用时,请务必遵循安全检查流程,确保操作的正确性和安全性。