twikitFKS: 基于 twikit 2.3.1 的改進版本
項目概述
關于 twikit
twikit 是一個優秀的 Twitter API 爬蟲庫,它的核心優勢在于無需 API Key即可訪問 Twitter 功能。通過網頁爬蟲技術,twikit 實現了:
- 發布推文和媒體內容
- 搜索推文和用戶
- 獲取熱門話題趨勢
- 發送私信
- 用戶信息獲取
- 書簽管理等功能
這種無 API Key 的設計讓開發者可以快速構建 Twitter 相關應用,而無需申請官方 API 權限。
twikitFKS 的誕生
在使用原版 twikit 的過程中,我們發現了一個影響數據完整性的問題:對話分割(conversation spit)。當 Twitter 返回對話形式的推文時,原版在處理 profile-conversation
類型的數據結構時存在解析缺陷,導致部分推文數據丟失。
twikitFKS 正是為了解決這個問題而生的改進版本。我們不僅修復了這個關鍵 bug,還優化了項目結構,使其更符合現代 Python 項目的最佳實踐。
項目信息
- 項目名稱: twikitFKS
- 版本: 2.3.1
- Python 版本要求: >= 3.12
- PyPI 包: twikitfks
- GitHub 倉庫: Liaofushen/twikitFKS
- 許可證: MIT
主要改動
1. 修復對話分割問題 (Conversation Spit Fix)
在 commit b860e7a4570fdaa0cd3c08eb574ef5f8827bcc7c
中,我們修復了一個影響數據完整性的關鍵問題。
問題分析:
Twitter 的 GraphQL API 在返回用戶推文時,對于對話類型的推文會使用特殊的 profile-conversation
結構。原版 twikit 在處理這種嵌套數據結構時,只取第一個結果,導致對話中的其他推文被忽略。
技術方案:
- 重構
tweet_from_data
函數,增加index
參數以支持多推文解析 - 針對
profile-conversation
類型實現專門的遍歷邏輯 - 添加類型過濾,確保只處理有效的 Tweet 對象
# 修改前
def tweet_from_data(client: GuestClient, data: dict) -> Tweet:tweet_data_ = find_dict(data, 'result', True)if not tweet_data_:return Nonetweet_data = tweet_data_[0]# 修改后
def tweet_from_data(client: GuestClient, data: dict, index: int = 0) -> Tweet:tweet_data_ = find_dict(data, 'result', index == 0)if tweet_data_ and index > 0:tweet_data_ = [ _i for _i in tweet_data_ if _i.get('__typename') == 'Tweet']if not tweet_data_ or len(tweet_data_) <= index:return Nonetweet_data = tweet_data_[index]
2. 項目結構現代化
為了提升項目的可維護性和開發體驗,我們進行了以下改進:
- Python 版本管理: 添加
.python-version
文件,明確指定 Python 3.12+ 要求 - 構建系統升級: 使用
pyproject.toml
替代傳統的 setup.py,符合 PEP 518 標準 - Git 配置優化: 更新
.gitignore
規則,排除__pycache__
等臨時文件 - 包管理器升級: 集成 uv 包管理器,使用
uv sync
命令進行依賴同步,提供更快的依賴解析和安裝速度
3. 依賴管理標準化
采用 pyproject.toml
作為統一的依賴管理配置:
[project]
name = "twikitfks"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = ["beautifulsoup4>=4.13.4","filetype>=1.2.0","httpx[socks]>=0.28.1","js2py-3-13>=0.74.1","lxml>=5.4.0","m3u8>=6.0.0","pyotp>=2.9.0","webvtt-py>=0.5.1",
]
安裝和使用
從 PyPI 安裝
pip install twikitfks
從源碼安裝
git clone https://github.com/Liaofushen/twikitFKS.git
cd twikitFKS
uv sync
使用示例
import asynciofrom twikit.guest import GuestClientclient = GuestClient()async def main():# Activate the client by generating a guest token.await client.activate()# Get user by screen nameuser = await client.get_user_by_screen_name('elonmusk')print(user)# Get user by IDuser = await client.get_user_by_id('44196397')print(user)user_tweets = await client.get_user_tweets('44196397')print(user_tweets)tweet = await client.get_tweet_by_id('1519480761749016577')print(tweet)asyncio.run(main())
與原版 twikit 的技術差異
特性 | twikit 原版 | twikitFKS |
---|---|---|
對話分割處理 | ? 存在數據丟失 | ? 完整解析 |
項目配置 | setup.py | pyproject.toml |
包管理器 | pip | uv (更快) |
Python 版本 | 未明確指定 | >= 3.12 |
依賴鎖定 | requirements.txt | uv.lock |
核心改進:
- 數據完整性: 修復了
profile-conversation
類型推文的解析缺陷 - 開發體驗: 現代化的項目結構和工具鏈
- 性能優化: 更快的依賴解析和安裝速度
貢獻和反饋
如果您在使用過程中遇到任何問題或有改進建議,歡迎:
- 在 GitHub Issues 中報告問題
- 提交 Pull Request 貢獻代碼
- 給項目點個 ?? 支持
許可證
本項目基于 MIT 許可證開源,您可以自由使用、修改和分發。
總結
twikitFKS 在保持原版 twikit 所有功能的基礎上,重點解決了數據完整性問題,并采用了現代化的項目結構。對于需要處理 Twitter 對話數據的開發者來說,這是一個值得考慮的升級選擇。
twikitFKS 致力于提供更穩定、更完整的 Twitter API 訪問體驗。