Laravel 10.x、11.x(以及發布的新版本)的 Twitter API。也透過 PHP-DI 支援其他框架(或隨時透過 PR 添加對您的框架的支援)
您需要建立一個應用程式並在應用程式管理中建立您的存取權杖。
composer require atymic/twitter:^3.0 -W
只需在.env中設定以下環境變數即可。
TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
TWITTER_ACCESS_TOKEN=
TWITTER_ACCESS_TOKEN_SECRET=
TWITTER_API_VERSION=
運行php artisan vendor:publish --provider="AtymicTwitterServiceProviderLaravelServiceProvider"
/config/twitter.php
3.x 是目前的主要版本,不向後相容 2.x。
請參閱 UPGRADE.md 中的遷移指南。
2.x 不再維護。我們不接受錯誤修復,請升級到 3.x
您可以選擇三種不同的輸出格式。預設情況下,API v1 回應將以物件形式傳回,而 API v2 回應將以 JSON 形式傳回。若要變更此設置,請在傳遞給任何方法的參數中使用response_format選項。
response_format : object|json|array (v1 default:object) (v2 default:json)
若要將預設的 twitter API 版本設為 v2 而不是預設的v1.1 ,請在.env中將TWITTER_API_VERSION設為2 。
如果您已將v1.1 api 設為預設值,則可以使用Twitter::forApiV2()來取得 v2 用戶端的實例。使用Twitter::forApiV1()從v2客戶端取得v1實例也是如此。
在v1或v2客戶端實例上呼叫Twitter::forApiV1()是安全的。
getSettings() - 傳回驗證使用者的設定(包括當前趨勢、地理和睡眠時間資訊)。getCredentials()postSettings() - 更新驗證使用者的設定。postSettingsDevice() - 設定 Twitter 為驗證使用者提供更新的裝置。發送 none 作為裝置參數將停用 SMS 更新。postProfile() - 設定使用者可以在其設定頁面的「帳戶」標籤下設定的一些值。僅指定的參數會被更新。postBackground() - 更新驗證使用者的個人資料背景圖片。此方法也可用於啟用或停用個人資料背景圖像。postProfileImage() - 更新驗證使用者的個人資料影像。請注意,此方法需要原始多部分數據,而不是圖像的 URL。destroyUserBanner() - 刪除已驗證使用者上傳的個人資料橫幅。成功時回傳 HTTP 200。postUserBanner() - 代表驗證使用者上傳個人資料橫幅。為了獲得最佳結果,請在其使用者物件中上傳 profile_banner_url 節點。 setWebhook($env, $url) - 為給定環境中的所有事件類型註冊 webhook url。crcHash($crcToken) - 從給定的 CRC 令牌和消費者金鑰傳回 HMAC SHA-256 雜湊值。您需要將其返回到您的網路鉤子上(更多資訊)。getWebhooks($env) - 傳回給定環境(或所有環境,如果未提供)的 Webhook URL 及其驗證應用程式的狀態。updateWebhooks($env, $webhookId) - 為所有活動觸發給定環境 Webhook 的質詢回應檢查 (CRC)。如果檢查成功,則傳回 true 並透過將其狀態設為有效來重新啟用 Webhook。destroyWebhook($env, $webhookId) - 從提供的應用程式的所有活動設定中刪除 webhook。成功時傳回 true。setSubscriptions($env) - 為所提供的環境的所有訊息類型訂閱所有事件。成功時傳回 true。getSubscriptions($env) - 如果提供的使用者上下文對所提供的應用程式具有活動訂閱,則傳回 true。getSubscriptionsCount() - 傳回您的帳戶中目前活動的所有活動的訂閱數量。getSubscriptionsList($env) - 傳回目前所有活動類型訂閱的清單。destroyUserSubscriptions($env, $userId) - 從環境停用指定使用者 ID 的訂閱。成功時傳回 true。 getBlocks() - 傳回驗證使用者正在封鎖的使用者物件的集合。getBlocksIds() - 傳回驗證使用者正在封鎖的數字使用者 ID 陣列。postBlock() - 阻止指定使用者關注身份驗證使用者。此外,被封鎖的用戶不會顯示在驗證用戶的提及或時間軸中(除非被其他用戶轉發)。如果存在關注或好友關係,該關係就會被破壞。destroyBlock() - 取消封鎖身分驗證使用者的 ID 參數中指定的使用者。成功時以請求的格式傳回未封鎖的使用者。如果在封鎖之前存在關係,則它們將無法恢復。 getDm() - 傳回由 id 參數指定的單一直接訊息事件。getDms() - 傳回過去 30 天內的所有私訊事件(發送和接收)。按時間倒序排列。destroyDm() - 銷毀所需 ID 參數中指定的直接訊息。進行身份驗證的使用者必須是指定直接訊息的收件者。postDm() - 發布一個新的 message_create 事件,從而導致從身份驗證用戶發送到指定用戶的直接訊息。如果成功則傳回一個事件。支援透過選購的快速回覆和媒體附件發布私訊。 getFavorites() - 傳回由身分驗證使用者或指定使用者收藏的 20 則最新推文。destroyFavorite() - 取消收藏 ID 參數中指定的驗證使用者狀態。成功時以請求的格式傳回不喜歡的狀態。postFavorite() - 收藏 ID 參數中指定的狀態作為驗證使用者。成功時返回收藏夾狀態。 getNoRters() - 傳回目前經過驗證的使用者不希望從中接收轉送的 user_ids 集合。getFriendsIds() - 傳回指定使用者關注的每個使用者的使用者 ID 的遊標集合。getFollowersIds() - 傳回關注指定使用者的每個使用者的使用者 ID 的遊標集合。getFriendshipsIn() - 傳回每個有待處理的關注身分驗證使用者請求的使用者的數字 ID 集合。getFriendshipsOut() - 傳回每個受保護使用者的數字 ID 集合,驗證使用者對其有待處理的關注請求。postFollow() - 允許進行身份驗證的使用者關注 ID 參數中指定的使用者。postUnfollow() - 允許驗證使用者取消追蹤 ID 參數中指定的使用者。postFollowUpdate() - 允許啟用或停用來自指定使用者的轉送和裝置通知。getFriendships() - 傳回有關兩個任意使用者之間關係的詳細資訊。getFriends() - 傳回指定使用者關注的每個使用者(也稱為他們的「朋友」)的使用者物件的遊標集合。getFollowers() - 傳回關注指定使用者的使用者物件的遊標集合。getFriendshipsLookup() - 將驗證使用者的關係傳回最多提供的 100 個 screen_names 或 user_ids 的逗號分隔清單。連接的值可以是:following、following_requested、followed_by、none、blocking、muting。 getGeo() - 傳回已知地點的所有資訊。getGeoReverse() - 給定緯度和經度,搜尋最多 20 個可在更新狀態時用作 place_id 的地點。getGeoSearch() - 搜尋可以附加到狀態/更新的地點。給定緯度和經度對、IP 位址或名稱,此請求將傳回所有有效地點的列表,這些地點可在更新狀態時用作 place_id。getGeoSimilar() - 定位給定座標附近名稱相似的地點。從概念上講,您將使用此方法來獲取要首先選擇的已知地點的清單。然後,如果所需地點不存在,請向 POST geo/place 發出請求以建立新地點。回應中包含的令牌是能夠建立新地點所需的令牌。 postSpam() - 向 Twitter 報告指定使用者為垃圾郵件帳號。另外,代表經過驗證的使用者執行相當於 POST 區塊/建立的操作。getHelpConfiguration() - 傳回 Twitter 使用的目前配置,包括非使用者名稱的 twitter.com slugs、最大照片解析度和 t.co URL 長度。getHelpLanguages() - 傳回 Twitter 支援的語言清單以及 Twitter 支援的語言程式碼。getHelpPrivacy() - 回傳 Twitter 的隱私權政策。getHelpTos() - 傳回 Twitter 服務條款。注意:這些與開發者政策不同。getAppRateLimit() - 傳回屬於指定資源系列的方法的目前速率限制。 getLists() - 傳回驗證使用者或指定使用者訂閱的所有列表,包括自己的列表。使用 user_id 或 screen_name 參數指定使用者。如果未指定用戶,則使用身份驗證用戶。getListStatuses() - 傳回由指定清單的成員所建立的推文的時間軸。預設情況下包含轉送。使用 include_rts=false 參數省略轉發。destroyListMember() - 從清單中刪除指定的成員。經過身份驗證的使用者必須是清單的擁有者才能從清單中刪除成員。getListsMemberships() - 傳回指定使用者已新增的清單。如果未提供 user_id 或 screen_name,則傳回驗證使用者的成員資格。getListsSubscribers() - 傳回指定清單的訂閱者。只有當經過驗證的使用者擁有指定清單時,才會顯示私人清單訂閱者。postListSubscriber() - 將經過驗證的使用者訂閱指定的清單。getListSubscriber() - 傳回指定清單的訂閱者。只有當經過驗證的使用者擁有指定清單時,才會顯示私人清單訂閱者。destroyListSubscriber() - 從指定清單中取消訂閱經過驗證的使用者。postListCreateAll() - 透過指定以逗號分隔的成員 ID 或螢幕名稱列表,將多個成員新增至列表。經過身份驗證的使用者必須擁有該清單才能向其中新增成員。請注意,清單的成員不能超過 5,000 個,並且使用此方法一次最多只能向清單新增 100 個成員。getListMember() - 檢查指定的使用者是否為指定清單的成員。getListMembers() - 傳回指定清單的成員。僅當經過驗證的使用者擁有指定清單時才會顯示私有清單成員。postListMember() - 將成員加入清單。經過身份驗證的使用者必須擁有該清單才能向其中新增成員。請注意,清單的成員不能超過 5,000 名。destroyList() - 刪除指定清單。經過身份驗證的用戶必須擁有該清單才能銷毀它。postListUpdate() - 更新指定的清單。經過身份驗證的用戶必須擁有該清單才能更新它。postList() - 為經過驗證的使用者建立一個新清單。請注意,每個帳戶建立的清單不能超過 20 個。getList() - 傳回指定的清單。僅當經過身份驗證的使用者擁有指定清單時才會顯示私有清單。getListSubscriptions() - 取得指定使用者訂閱的清單的集合,預設為每頁 20 個清單。不包括用戶自己的列表。destroyListMembers() - 透過指定以逗號分隔的成員 ID 或螢幕名稱列表,從列表中刪除多個成員。經過身份驗證的使用者必須擁有該清單才能從其中刪除成員。請注意,清單的成員不能超過 500 名,並且使用此方法一次最多只能刪除 100 名成員。getListOwnerships() - 傳回指定 Twitter 使用者擁有的清單。只有當經過身份驗證的使用者也是清單的擁有者時才會顯示私有清單。 uploadMedia() - 將媒體(圖像)上傳到 Twitter,以在推文或 Twitter 託管的卡片中使用。 getSearch() - 傳回與指定查詢相符的相關推文的集合。getSavedSearches() - 傳回經過驗證的使用者所儲存的搜尋查詢。getSavedSearch() - 檢索給定 id 表示的已儲存搜尋的資訊。進行身份驗證的使用者必須是所要求的已儲存搜尋 ID 的擁有者。postSavedSearch() - 為經過驗證的使用者建立新的已儲存搜尋。用戶只能儲存 25 個搜尋。destroySavedSearch() - 銷毀驗證使用者保存的搜尋。進行身份驗證的使用者必須是被銷毀的已儲存搜尋 ID 的擁有者。 getMentionsTimeline() - 傳回驗證使用者最近 20 則提及的內容(包含使用者的 @screen_name 的推文)。getUserTimeline() - 傳回由 screen_name 或 user_id 參數指示的使用者發布的最新推文的集合。getHomeTimeline() - 傳回由身份驗證用戶及其關注的用戶發布的最新推文和轉發的集合。主頁時間軸是大多數用戶與 Twitter 服務互動的核心。 *getRtsTimeline() - 傳回由身分驗證使用者建立且已被其他人轉發的最新推文。getRts() - 傳回 id 參數指定的推文的最近 100 個轉送的集合。getTweet() - 傳回由 id 參數指定的單一推文。推文的作者也將嵌入推文中。destroyTweet() - 銷毀所需 ID 參數指定的狀態。驗證使用者必須是指定狀態的作者。如果成功則傳回銷毀狀態。postTweet() - 更新驗證使用者目前的狀態,也稱為發推文。postRt() - 轉發推文。返回嵌入轉發詳細資訊的原始推文。getOembed() - 以 oEmbed 相容格式傳回一則推文,由推文 Web URL 或推文 ID 指定。當頁面上包含 Twitter 的小部件 JavaScript 時,傳回的 HTML 片段將自動識別為嵌入式推文。getRters() - 傳回最多 100 個使用者 ID 的集合,這些使用者 ID 屬於轉送 id 參數指定的推文的使用者。getStatusesLookup() - 每個請求返回最多 100 條推文的完全水合推文對象,由傳遞給 id 參數的逗號分隔值指定。 getTrendsPlace() - 如果有可用的趨勢訊息,則傳回特定 WOEID 的前 10 個趨勢主題。getTrendsAvailable() - 傳回 Twitter 具有趨勢主題資訊的位置。getTrendsClosest() - 傳回 Twitter 具有最接近指定位置的趨勢主題資訊的位置。 getUsersLookup() - 每個請求返回最多 100 個使用者的完全水合使用者對象,由傳遞給 user_id 和/或 screen_name 參數的逗號分隔值指定。getUsers() - 傳回有關由所需的 user_id 或 screen_name 參數指定的使用者的各種資訊。如果可能的話,作者最新的推文將內聯返回。getUsersSearch() - 為 Twitter 上的公共使用者帳戶提供簡單的、基於相關性的搜尋介面。嘗試依主題興趣、全名、公司名稱、位置或其他條件進行查詢。不支援精確匹配搜尋。getUserBanner() - 傳回指定使用者的個人資料橫幅的可用尺寸變化的地圖。如果使用者尚未上傳個人資料橫幅,則會提供 HTTP 404。可以使用此方法來取代對使用者物件中傳回的 profile_banner_url 進行字串操作,如個人資料圖像和橫幅中所述。muteUser() - 將驗證使用者的 ID 參數中指定的使用者靜音。unmuteUser() - 對驗證使用者的 ID 參數中指定的使用者取消靜音。mutedUserIds() - 傳回驗證使用者已靜音的數字使用者 ID 陣列。mutedUsers() - 傳回驗證使用者已靜音的使用者物件陣列。getSuggesteds() - 存取 Twitter 建議使用者清單的給定類別中的使用者。getSuggestions() - 存取 Twitter 的建議使用者清單。這將傳回建議的用戶類別清單。此類別可以在 GET users / suggest / :slug 中使用來取得該類別中的使用者。getSuggestedsMembers() - 訪問 Twitter 建議用戶列表的給定類別中的用戶,如果他們不是受保護的用戶,則返回他們的最新狀態。getTweet() - 傳回有關由請求的 ID 指定的單一推文的各種資訊。getTweets() - 傳回有關由請求的 ID 或 ID 清單指定的推文的各種資訊。 searchRecent() - 最近的搜尋端點傳回過去 7 天內與搜尋查詢相符的推文。
searchAll() - 完整存檔搜尋端點傳回與搜尋查詢相符的公共推文的完整歷史記錄;自 2006 年 3 月 26 日創建第一條推文以來。
注意:此端點僅適用於那些被批准用於學術研究產品軌道的人。
userTweets() - 傳回由單一使用者組成的推文,由請求的使用者 ID 指定。預設情況下,每個請求都會傳回最近的 10 條推文。使用分頁,可以檢索最近的 3,200 則推文。userMentions() - 傳回提及由請求的使用者 ID 指定的單一使用者的推文。預設情況下,每個請求都會傳回最近的 10 條推文。使用分頁,最多可以擷取最近 800 則推文。 getStreamRules() - 以清單或單獨的形式傳回流端點上目前活動的規則清單。postStreamRules() - 在流程中新增或刪除規則。getStream() - 根據一組特定的過濾規則即時串流推文。 getSampledStream() - 即時傳輸約 1% 的推文。 hideTweet() - 隱藏或取消隱藏對推文的回應。 countRecent() - 接收過去 7 天內與查詢相符的推文計數
countAll() - 接收與查詢相符的推文計數
注意:僅可透過學術研究產品軌道取得。
Linkify :將 URL、@使用者名稱、主題標籤轉換為連結。 $tweet 的類型可以是物件、陣列或文字。透過發送一個物件或數組,該方法也將擴展連結(t.co)。
Twitter:: linkify ( $ tweet );Ago : 將日期轉換為差異(2小時前)
Twitter:: ago ( $ timestamp );LinkUser :透過特定使用者的使用者物件(例如 $tweet->user)或 id/string 產生指向特定使用者的連結。
Twitter:: linkUser ( $ user );LinkTweet :產生特定推文的連結。
Twitter:: linkTweet ( $ tweet );傳回由 screen_name 或 user_id 參數指示的使用者發佈的最新推文的集合。
Route:: get ( ' /userTimeline ' , function ()
{
return Twitter:: getUserTimeline ([ ' screen_name ' => ' thujohn ' , ' count ' => 20 , ' response_format ' => ' json ' ]);
});傳回由身份驗證用戶及其關注的用戶發布的最新推文和轉發的集合。
Route:: get ( ' /homeTimeline ' , function ()
{
return Twitter:: getHomeTimeline ([ ' count ' => 20 , ' response_format ' => ' json ' ]);
});傳回驗證使用者的 X 個最近提及的內容(包含使用者的 @screen_name 的推文)。
Route:: get ( ' /mentionsTimeline ' , function ()
{
return Twitter:: getMentionsTimeline ([ ' count ' => 20 , ' response_format ' => ' json ' ]);
});更新驗證用戶的當前狀態,也稱為推文。
Route:: get ( ' /tweet ' , function ()
{
return Twitter:: postTweet ([ ' status ' => ' Laravel is beautiful ' , ' response_format ' => ' json ' ]);
});使用媒體更新驗證使用者的目前狀態。
Route:: get ( ' /tweetMedia ' , function ()
{
$ uploaded_media = Twitter:: uploadMedia ([ ' media ' => File:: get ( public_path ( ' filename.jpg ' ))]);
return Twitter:: postTweet ([ ' status ' => ' Laravel is beautiful ' , ' media_ids ' => $ uploaded_media -> media_id_string ]);
});透過電子郵件取得使用者憑證。
$credentials = Twitter::getCredentials([
'include_email' => 'true',
]);
在上面,您需要將 true 作為字串傳遞,而不是作為布林值傳遞。布林值將被轉換為 Twitter 忽略的
1。
這也假設您已正確設定 Twitter 的權限。當您設定 Twitter 應用程式時,您必須選擇“獲取用戶電子郵件”,僅傳遞該值是不夠的。
使用推特登入
use Atymic Twitter Facade Twitter ;
Route:: get ( ' twitter/login ' , [ ' as ' => ' twitter.login ' , static function () {
$ token = Twitter:: getRequestToken ( route ( ' twitter.callback ' ));
if ( isset ( $ token [ ' oauth_token_secret ' ])) {
$ url = Twitter:: getAuthenticateUrl ( $ token [ ' oauth_token ' ]);
Session:: put ( ' oauth_state ' , ' start ' );
Session:: put ( ' oauth_request_token ' , $ token [ ' oauth_token ' ]);
Session:: put ( ' oauth_request_token_secret ' , $ token [ ' oauth_token_secret ' ]);
return Redirect:: to ( $ url );
}
return Redirect:: route ( ' twitter.error ' );
}]);
Route:: get ( ' twitter/callback ' , [ ' as ' => ' twitter.callback ' , static function () {
// You should set this route on your Twitter Application settings as the callback
// https://apps.twitter.com/app/YOUR-APP-ID/settings
if (Session:: has ( ' oauth_request_token ' )) {
$ twitter = Twitter:: usingCredentials ( session ( ' oauth_request_token ' ), session ( ' oauth_request_token_secret ' ));
$ token = $ twitter -> getAccessToken ( request ( ' oauth_verifier ' ));
if (! isset ( $ token [ ' oauth_token_secret ' ])) {
return Redirect:: route ( ' twitter.error ' )-> with ( ' flash_error ' , ' We could not log you in on Twitter. ' );
}
// use new tokens
$ twitter = Twitter:: usingCredentials ( $ token [ ' oauth_token ' ], $ token [ ' oauth_token_secret ' ]);
$ credentials = $ twitter -> getCredentials ();
if ( is_object ( $ credentials ) && ! isset ( $ credentials -> error )) {
// $credentials contains the Twitter user object with all the info about the user.
// Add here your own user logic, store profiles, create new users on your tables...you name it!
// Typically you'll want to store at least, user id, name and access tokens
// if you want to be able to call the API on behalf of your users.
// This is also the moment to log in your users if you're using Laravel's Auth class
// Auth::login($user) should do the trick.
Session:: put ( ' access_token ' , $ token );
return Redirect:: to ( ' / ' )-> with ( ' notice ' , ' Congrats! You ' ve successfully signed in! ' );
}
}
return Redirect:: route ( ' twitter.error ' )
-> with ( ' error ' , ' Crab! Something went wrong while signing you up! ' );
}]);
Route:: get ( ' twitter/error ' , [ ' as ' => ' twitter.error ' , function () {
// Something went wrong, add your own error handling here
}]);
Route:: get ( ' twitter/logout ' , [ ' as ' => ' twitter.logout ' , function () {
Session:: forget ( ' access_token ' );
return Redirect:: to ( ' / ' )-> with ( ' notice ' , ' You ' ve successfully logged out! ' );
}]);網路鉤子
為了成功設定 Webhook,您需要使用 CRC 令牌從 Webhook URL 回應中傳回雜湊值(更多資訊)。
Route:: post ( ' twitter/webhook ' , [ ' as ' => ' twitter.webhook ' , function (){
if ( request ()-> has ( ' crc_token ' ))
return response ()-> json ([ ' response_token ' => Twitter:: crcHash ( request ()-> crc_token )], 200 );
// Your webhook logic goes here
}]);取得用戶推文:
// ...
use Atymic Twitter Twitter as TwitterContract ;
use Illuminate Http JsonResponse ;
use Twitter ;
// ...
public function userTweets ( int $ userId ): JsonResponse
{
$ params = [
' place.fields ' => ' country,name ' ,
' tweet.fields ' => ' author_id,geo ' ,
' expansions ' => ' author_id,in_reply_to_user_id ' ,
TwitterContract:: KEY_RESPONSE_FORMAT => TwitterContract:: RESPONSE_FORMAT_JSON ,
];
return JsonResponse:: fromJsonString (Twitter:: userTweets ( $ userId , $ params ));
}搜尋推文:
// ...
public function searchRecent ( string $ query ): JsonResponse
{
$ params = [
' place.fields ' => ' country,name ' ,
' tweet.fields ' => ' author_id,geo ' ,
' expansions ' => ' author_id,in_reply_to_user_id ' ,
TwitterContract:: KEY_RESPONSE_FORMAT => TwitterContract:: RESPONSE_FORMAT_JSON ,
];
return JsonResponse:: fromJsonString (Twitter:: searchRecent ( $ query , $ params ));
}
// ... 由於 Twitter API v2 正在積極開發中,您可能需要呼叫我們在上面的「函數」部分中沒有明確記錄的端點。以下範例說明如何使用此套件來呼叫任何新新增的端點。這裡我們使用新新增的「最近計數」端點。
// ...
$ querier = Atymic Twitter Facade Twitter:: forApiV2 ()
-> getQuerier ();
$ result = $ querier
-> withOAuth2Client ()
-> get ( ' tweets/counts/recent ' , [ ' query ' => ' foo ' ]);
// ... 首先在設定檔中啟動調試模式。
然後您可以存取logs()方法。
try
{
$ response = Twitter:: getUserTimeline ([ ' count ' => 20 , ' response_format ' => ' array ' ]);
}
catch ( Exception $ e )
{
// dd(Twitter::error());
dd (Twitter:: logs ());
}
dd ( $ response );