scottybo / twitter
用于 Laravel 的 Twitter API
Requires
- php: ^7.3
- atymic/tmhoauth: ^0.8.6
- illuminate/support: 7.*
This package is not auto-updated.
Last update: 2024-09-20 02:34:49 UTC
README
这是一个 thujon/twitter 的分支版本,最初的目标是添加对视频媒体上传的支持。
Laravel 6 的 Twitter API。
您需要在 应用管理 中创建应用程序并创建您的访问令牌。
安装
将 scottybo/twitter
添加到 composer.json
。
"scottybo/twitter": "~2.0"
运行 composer update
以获取 Twitter 的最新版本。
或者运行
composer require scottybo/twitter
现在打开 /config/app.php
并将服务提供者添加到您的 providers
数组中。
'providers' => [ Scottybo\Twitter\TwitterServiceProvider::class, ]
现在添加别名。
'aliases' => [ 'Twitter' => Scottybo\Twitter\Facades\Twitter::class, ]
从 1.x.x 升级
该包现在需要 PHP >= 5.4.0
外观已更改(Scottybo\Twitter\Facades\Twitter)
配置文件已更新(debug、UPLOAD_URL、ACCESS_TOKEN_URL、REQUEST_TOKEN_URL)
set_new_config() 已重命名为 reconfig()
配置
Laravel 4
运行 php artisan config:publish scottybo/twitter
并使用您的信息修改配置文件。
/app/config/packages/scottybo/twitter/config.php
此外,请确保从配置文件中删除 env 并替换为您的信息。
Laravel 5
运行 php artisan vendor:publish --provider="Scottybo\Twitter\TwitterServiceProvider"
并使用您的信息修改配置文件。
/config/ttwitter.php
在 Laravel 5 中,编辑 config.php 文件很简单 - 事实上,您甚至不需要触摸它!只需将以下内容添加到您的 .env 文件中,即可继续操作
TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
TWITTER_ACCESS_TOKEN=
TWITTER_ACCESS_TOKEN_SECRET=
特殊参数
format : object|json|array (default:object)
函数
账户
getSettings()
- 返回认证用户的设置(包括当前趋势、地理位置和睡眠时间信息)。getCredentials()
postSettings()
- 更新认证用户的设置。postSettingsDevice()
- 为认证用户设置 Twitter 传递更新的设备。将设备参数发送为 none 将禁用 SMS 更新。postProfile()
- 设置用户可以在其设置页面的“账户”选项卡下设置的某些值。只有指定的参数将被更新。postBackground()
- 更新认证用户的个人资料背景图片。此方法也可以用于启用或禁用个人资料背景图片。postProfileImage()
- 更新认证用户的个人资料图片。请注意,此方法期望原始的多部分数据,而不是图像的 URL。destroyUserBanner()
- 删除认证用户的上传个人资料横幅。成功时返回 HTTP 200。postUserBanner()
- 代表认证用户上传个人资料横幅。为了获得最佳效果,请在上传个人资料横幅时上传 profile_banner_url 节点。
阻止
getBlocks()
- 返回认证用户阻止的用户对象集合。getBlocksIds()
- 返回认证用户阻止的数字用户 ID 数组。postBlock()
- 阻止指定的用户关注认证用户。此外,被阻止的用户将不会出现在认证用户的提及或时间轴中(除非被其他用户转推)。如果存在关注或朋友关系,则将销毁。destroyBlock()
- 为认证用户取消阻止在 ID 参数中指定的用户。成功时返回请求格式的未阻止用户。如果阻止之前存在关系,则不会恢复。
直接消息
getDmsOut()
- 返回认证用户发送的 20 条最新直接消息。包括关于发送者和接收用户详细信息的消息。您可以在每次调用中请求最多 200 条直接消息,最多 800 条传出 DM。getDm()
- 根据ID参数返回一个直接消息。类似于/1.1/direct_messages.format请求,此方法将包含发送者和接收者的用户对象。getDmsIn()
- 返回发送给认证用户的最近20条直接消息。包括发送者和接收者用户的详细信息。您可以每次请求最多200条直接消息,并且仅使用此端点可用最近200条DM。destroyDm()
- 销毁在必需ID参数中指定的直接消息。认证用户必须是指定直接消息的接收者。postDm()
- 从认证用户向指定用户发送新的直接消息。需要用户和文本参数,并且必须是POST。如果成功,将返回请求格式的已发送消息。
收藏
getFavorites()
- 返回认证用户或指定用户最近收藏的20条推文。destroyFavorite()
- 以认证用户身份取消收藏ID参数中指定的状态。如果成功,将返回请求格式的未收藏状态。postFavorite()
- 以认证用户身份收藏ID参数中指定的状态。如果成功,将返回收藏的状态。
友情
getNoRters()
- 返回当前认证用户不希望接收转推的用户ID集合。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()
- 搜索可以附加到statuses/update的位置。给定纬度和经度对、IP地址或名称,此请求将返回所有有效的位置列表,这些位置可以用作更新状态时的place_id。getGeoSimilar()
- 根据给定坐标查找名称相似的地方。从概念上讲,您会使用此方法首先获取一个已知地点列表进行选择。然后,如果所需的地点不存在,请通过POST geo/place 请求创建一个新的地点。响应中包含的令牌是创建新地点所需的令牌。
帮助
postSpam()
- 将指定用户报告为Twitter的垃圾邮件账户。此外,代表认证用户执行POST blocks / create等价操作。getHelpConfiguration()
- 返回Twitter当前使用的配置,包括不是用户名的twitter.com别名,最大照片分辨率和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或screen_name列表,将多个成员添加到列表中。认证用户必须是列表的所有者才能将其成员添加到列表中。请注意,列表不能有超过5,000个成员,并且您可以使用此方法一次将最多100个成员添加到列表中。getListMember()
- 检查指定的用户是否是指定列表的成员。getListMembers()
- 返回指定列表的成员。私有列表的成员只有在认证用户拥有指定列表时才会显示。postListMember()
- 向列表中添加成员。认证用户必须是列表的所有者才能将其成员添加到列表中。请注意,列表不能有超过5,000个成员。destroyList()
- 删除指定的列表。认证用户必须是列表的所有者才能将其删除。postListUpdate()
- 更新指定的列表。认证用户必须是列表的所有者才能将其更新。postList()
- 为认证用户创建一个新的列表。注意,每个账户最多可以创建20个列表。getList()
- 返回指定的列表。私有列表只有在认证用户拥有指定列表时才会显示。getListSubscriptions()
- 获取指定用户订阅的列表集合,默认每页20个列表。不包括用户自己的列表。destroyListMembers()
- 通过指定逗号分隔的成员ID或用户名列表,从列表中移除多个成员。认证用户必须是列表的所有者才能从列表中移除成员。请注意,列表不能超过500个成员,并且使用此方法一次最多只能从列表中移除100个成员。getListOwnerships()
- 返回指定Twitter用户拥有的列表。只有当认证用户也是列表的所有者时,才会显示私有列表。
媒体
uploadMedia()
- 上传媒体(图片和视频)到Twitter,用于推文或Twitter托管卡。uploadStatus()
- 获取上传到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()
- 返回单个推文,指定为推文网页URL或推文ID,以oEmbed兼容的格式。返回的HTML片段将在页面包含Twitter的widget JavaScript时自动识别为嵌入的推文。getRters()
- 返回最多100个用户ID的集合,这些用户ID属于已转发指定id参数的推文的用户。getStatusesLookup()
- 根据通过id参数传递的逗号分隔的值,返回最多100条推文的完全填充的推文对象。
趋势
getTrendsPlace()
- 如果特定WOEID有趋势信息,则返回该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 / suggestions / :slug中获取该类别的用户。getSuggestedsMembers()
- 访问Twitter建议用户列表中给定类别的用户,如果他们不是受保护用户,则返回他们的最新状态。
辅助函数
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' => 'scottybo', 'count' => 20, 'format' => 'json']); });
返回认证用户及其所关注用户发布的最新推文和转发的集合。
Route::get('/homeTimeline', function() { return Twitter::getHomeTimeline(['count' => 20, 'format' => 'json']); });
返回认证用户的X条最新提及(包含用户@screen_name的推文)。
Route::get('/mentionsTimeline', function() { return Twitter::getMentionsTimeline(['count' => 20, 'format' => 'json']); });
更新认证用户的当前状态,也称为推文。
Route::get('/tweet', function() { return Twitter::postTweet(['status' => 'Laravel is beautiful', '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作为字符串传递,而不是作为布尔值。布尔值将被转换为
1
,Twitter会忽略它。
这还假设您已正确设置Twitter的权限。您必须在设置Twitter应用程序时选择'获取用户电子邮件',仅传递值是不够的。
通过twitter登录
Route::get('twitter/login', ['as' => 'twitter.login', function(){ // your SIGN IN WITH TWITTER button should point to this route $sign_in_twitter = true; $force_login = false; // Make sure we make this request w/o tokens, overwrite the default values in case of login. Twitter::reconfig(['token' => '', 'secret' => '']); $token = Twitter::getRequestToken(route('twitter.callback')); if (isset($token['oauth_token_secret'])) { $url = Twitter::getAuthorizeURL($token, $sign_in_twitter, $force_login); 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', 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')) { $request_token = [ 'token' => Session::get('oauth_request_token'), 'secret' => Session::get('oauth_request_token_secret'), ]; Twitter::reconfig($request_token); $oauth_verifier = false; if (Input::has('oauth_verifier')) { $oauth_verifier = Input::get('oauth_verifier'); // getAccessToken() will reset the token for you $token = Twitter::getAccessToken($oauth_verifier); } if (!isset($token['oauth_token_secret'])) { return Redirect::route('twitter.error')->with('flash_error', 'We could not log you in on Twitter.'); } $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('flash_notice', 'Congrats! You\'ve successfully signed in!'); } return Redirect::route('twitter.error')->with('flash_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('flash_notice', 'You\'ve successfully logged out!'); }]);
上传视频
$file_size = 'FILE_SIZE_IN_BYTES'; // Initialize the media upload - no files are sent at this point // https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload-init#parameters $init_media = Twitter::uploadMedia([ 'command' => 'INIT', 'media_type' => 'video/mp4', 'media_category' => 'tweet_video', 'total_bytes' => $file_size, 'additional_owners' => null ]); // Upload the first (or only) chunk // https://developer.twitter.com/en/docs/media/upload-media/uploading-media/chunked-media-upload $uploaded_media = Twitter::uploadMedia([ 'media' => $file, 'command' => 'APPEND', 'segment_index' => '0', 'media_id' => $init_media->media_id_string ]); // Finalize the video upload $final_media = Twitter::uploadMedia([ 'command' => 'FINALIZE', 'media_id' => $init_media->media_id_string, ]); // After a video has been uploaded it can take Twitter some time to process it before // it can be used in a Tweet. A better approach than the one below would be to use a // queue (e.g. Redis), but this demonstrates the logic. $waits = 0; while($waits <= 3) { // Check the status $status_media = Twitter::uploadStatus([ 'command' => 'STATUS', 'media_id' => $init_media->media_id, ]); // Check that the STATUS command is returning a valid state if(isset($status_media->processing_info->state)) { switch($status_media->processing_info->state) { case 'succeeded': $waits = 4; // break out of the while loop break; case 'failed': throw new Exception('Video processing failed: '.$status_media->processing_info->error->message); default: // Check how long Twitter tells us to wait for before checking the status again $status_media->processing_info->check_after_secs; // Sleep for that amount of time sleep($status_media->processing_info->check_after_secs); // Increment the wait count (in this example, we'll wait 3 times before leaving the loop just in case Twitter breaks) $waits++; } } else { throw new Exception('There was an unknown error uploading your video'); } } // Now that Twitter has processed the video upload, let's send the Tweet $post_response = Twitter::postTweet([ 'status' => $text, 'media_ids' => $final_media->media_id_string ]);
调试
首先在配置文件中激活调试。
然后您可以访问logs()方法。
try { $response = Twitter::getUserTimeline(['count' => 20, 'format' => 'array']); } catch (Exception $e) { // dd(Twitter::error()); dd(Twitter::logs()); } dd($response);