# 3rd Party Twitter Apps ## 背景 * Tweetbot 因 Twitter 毫無預警地撤銷 API 存取權、遭到封殺而被迫終止:[Canary in the emerald mine: Tweetbot’s sudden death, open-casket funeral, and reincarnation as a Mastodon app.](https://www.theverge.com/23653556/tweetbot-twitter-api-elon-musk-mastodon) ## iOS ### [TwitterIt for Twitter](https://apps.apple.com/us/app/twitterit-for-twitter/id1484366079) 基本上是把網頁版 Twitter 包在 app 裡,很難用⋯⋯ ### [Spring mini for Twitter](https://apps.apple.com/us/app/spring-mini-for-twitter/id1508706799) 是 native UI,功能正常,可以發推。 使用 Proxyman 截取網路連線,發現: * Timeline 似乎是使用 Twitter 的 GraphQL API: `https://twitter.com/i/api/graphql/lAKISuk_McyDUlhS2Zmv4A/HomeLatestTimeline` * 但是似乎不是通常版的 GraphQL,因為是用 `GET` 而非 `POST`,在 request 中也沒看到 GraphQL query。猜測可能是使用 pre-define 好的 query 模板,使用 URL path (`lAKISuk_McyDUlhS2Zmv4A/HomeLatestTimeline`) 指定,因此推測是 Twitter 的內部 API。 * `https://twitter.com/i/api/graphql/lI07N6Otwv1PhnEgXILM7A/FavoriteTweet` * `https://twitter.com/i/api/graphql/ZYKSe-w7KEslx3JhSIk5LA/UnfavoriteTweet` * `URL: https://twitter.com/i/api/2/notifications/mentions.json?...` * `https://twitter.com/i/api/graphql/BbmLpxKh8rX8LNe2LhVujA/TweetDetail?variables=...` * `https://twitter.com/i/api/graphql/3Ej-6N7xXONuEp5eJa1TdQ/SearchTimeline?...` 幾乎跟 Twitter web app 是使用一樣的 API。 ### [Tweetx for Twitter](https://apps.apple.com/us/app/tweetx-for-twitter/id6450922671) 是 native UI,可以用 native UI 發推文,不知道是怎麼做到的。 神秘,用 Proxyman 似乎截取不到網路連線。 ### [Friendly for Twitter](https://apps.apple.com/us/app/friendly-for-twitter/id1436510057) 看起來也是把 Twitter 網頁版包進去。各項功能一直載入失敗,沒辦法用。 ### [FocusX for Twitter](https://apps.apple.com/us/app/focusx-for-twitter/id6450184089) 看起來仍然是 native,且功能正常,不知道是怎麼做到的?是用 Twitter API 嗎? 用 Flutter 寫的,有開源,可以研究看看: https://github.com/allentown521/FocusTwitterX 神秘,用 Proxyman 似乎截取不到網路連線。 看原始碼似乎是用 `dart_twitter_api`,所以是走官方 API? ### [TwidereX - iOS](https://github.com/TwidereProject/TwidereX-iOS) 有[開源](https://github.com/TwidereProject/TwidereX-iOS),Swift 寫的。可以發推,但時間軸和推文一直繞圈圈無法載入。User profile 的簡介部分 和 follower list 倒是有載入出來。 最後一次更新是 2023 年 9 月。不確定是不是放棄了。 ## Twitter Official App 本身的分析 * iOS app 有做 SSL pinning,無法截獲 API 使用細節。 * Web app 可以看出使用了這些 API: * **HomeTimeline**: `https://twitter.com/i/api/graphql/q1x0puFIVMzsbx2Yoh-usA/HomeTimeline?variables=...` * **TweetDetail**: `https://twitter.com/i/api/graphql/zJvfJs3gSbrVhC0MKjt_OQ/TweetDetail?variables=...` ([request/response 範本](https://gist.github.com/zetavg/c82ae1469df43ac98b1a2d106a28f449)) * **UserByScreenName**: `https://twitter.com/i/api/graphql/qW5u-DAuXpMEG0zA1F7UGQ/UserByScreenName?variables=...` * **UserTweets**: `https://twitter.com/i/api/graphql/9zyyd1hebl7oNWIPdA8HRw/UserTweets?variables=...` * **FavoriteTweet**: (`POST`) `https://twitter.com/i/api/graphql/lI07N6Otwv1PhnEgXILM7A/FavoriteTweet` * **UnfavoriteTweet**: (`POST`) `https://twitter.com/i/api/graphql/ZYKSe-w7KEslx3JhSIk5LA/UnfavoriteTweet` * **CreateTweet**: (`POST`) `https://twitter.com/i/api/graphql/zIdRTsSqcD6R5uMtm_N0pw/CreateTweet` * **notifications**: `https://twitter.com/i/api/2/notifications/all.json?...`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up