bulgarianhealer/laravel-twitch

Twitch PHP Wrapper for Laravel

3.0.3 2020-09-24 07:43 UTC

README

Latest Stable Version Total Downloads License Code Quality GitHub Build Status

PHP Twitch Helix API Wrapper for Laravel 5+

⚠️ 2020年5月1日变更

自2020年5月1日起,Twitch要求所有请求都必须包含有效的OAuth访问令牌。这可以通过使用客户端凭据流请求OAuth令牌来实现。

如果您自己不处理此问题,请确保通过配置文件中的oauth_client_credentials.auto_generate配置项启用内置的访问令牌生成功能。

您需要通过配置或可用的设置器定义有效的<强>客户端ID和<强>客户端密钥!有关更多信息,请参阅完整配置

目录

  1. 安装
  2. 配置
  3. 示例
  4. 文档
  5. 升级
  6. 开发

安装

composer require romanzipp/laravel-twitch

如果您使用Laravel 5.5+,则已完成,否则请继续。

将服务提供程序添加到您的app.php配置文件中

romanzipp\Twitch\Providers\TwitchServiceProvider::class,

配置

将配置复制到配置文件夹

$ php artisan vendor:publish --provider="romanzipp\Twitch\Providers\TwitchServiceProvider"

将环境变量添加到您的.env

TWITCH_HELIX_KEY=
TWITCH_HELIX_SECRET=
TWITCH_HELIX_REDIRECT_URI=https://

示例

基本

$twitch = new romanzipp\Twitch\Twitch;

$twitch->setClientId('abc123');

// Get User by Username
$result = $twitch->getUsers(['login' => 'herrausragend']);

// Check, if the query was successful
if ( ! $result->success()) {
    return null;
}

// Shift result to get single user data
$user = $result->shift();

return $user->id;

设置器

$twitch = new romanzipp\Twitch\Twitch;

$twitch->setClientId('abc123');
$twitch->setClientSecret('abc456');
$twitch->setToken('abcdef123456');

$twitch = $twitch->withClientId('abc123');
$twitch = $twitch->withClientSecret('abc123');
$twitch = $twitch->withToken('abcdef123456');

OAuth令牌

$twitch = new romanzipp\Twitch\Twitch;

$twitch->setClientId('abc123');
$twitch->setToken('abcdef123456');

$result = $twitch->getUsers(['login' => 'herrausragend']);

OAuth客户端凭据流

自2020年5月1日起,每个请求都需要一个OAuth令牌,可以使用OAuth客户端凭据流颁发。

use romanzipp\Twitch\Enums\GrantType;
use romanzipp\Twitch\Twitch;

$twitch = new Twitch;

$twitch->setClientId('abc123');
$twitch->setClientSecret('def123');
$twitch->setToken('abcdef123456');

$result = $twitch->getOAuthToken(null, GrantType::CLIENT_CREDENTIALS, ['user:read']);

if ( ! $result->success()) {
    return;
}

$accessToken = $result->data()->access_token;

分页

Twitch API返回一个paginator字段,包含分页结果,如/streams/follows/games。要跳转到不同的页面,必须将提供的游标附加到以下查询中,使用方向属性afterbefore

在此示例中,我们将获取一组流并使用提供的游标来切换到下一组/前一组的数据库数据。

❗️ 为了防止无限循环或错误,请使用Result::hasMoreResults()方法检查是否有更多结果可用。

$twitch = new romanzipp\Twitch\Twitch;

// Page 1
$firstResult = $twitch->getStreams(['language' => 'de']);

// Page 2
$secondResult = $twitch->getStreams(['language' => 'de'], $firstResult->next());

// Page 1 (again)
$thirdResult = $twitch->getStreams(['language' => 'de'], $secondResult->back());

外观

use romanzipp\Twitch\Facades\Twitch;

Twitch::withClientId('abc123')->withToken('abcdef123456')->getUsers();

分页循环示例

此示例获取所有Twitch游戏并将它们存储到数据库中。

use romanzipp\Twitch\Twitch;

$twitch = new Twitch;

do {
    $nextCursor = null;

    // If this is not the first iteration, get the page cursor to the next set of results
    if (isset($result)) {
        $nextCursor = $result->next();
    }

    // Query the API with an optional cursor to the next results page
    $result = $twitch->getTopGames(['first' => 100], $nextCursor);

    foreach ($result->data as $item) {
        // Process the games result data
    }

    // Continue until there are no results left
} while ($result->hasMoreResults());

插入用户对象

新API不包括用户对象在如关注者或bits的端点。

[
  {
    "from_id": "123456",
    "to_id": "654321",
    "followed_at": "2018-01-01 12:00:00"
  }
]

您可以通过调用insertUsers方法来插入所有由from_id标识的用户数据到from_user

use romanzipp\Twitch\Twitch;

$twitch = new Twitch;

$result = $twitch->getUsersFollows(['to_id' => 654321]);

$result->insertUsers('from_id', 'from_user');

新的结果数据

[
  {
    "from_id": "123456",
    "to_id": "654321",
    "followed_at": "2018-01-01 12:00:00",
    "from_user": {
      "id": "123456",
      "display_name": "HerrAusragend",
      "login": "herrausragend"
    }
  }
]

文档

Twitch Helix API文档:https://dev.twitch.tv/docs/api/reference

OAuth

public function getOAuthAuthorizeUrl(string $responseType = 'code', array $scopes = [], ?string $state = NULL, bool $forceVerify = false)
public function getOAuthToken(?string $code = NULL, string $grantType = 'authorization_code', array $scopes = [])

广告

public function startCommercial(array $parameters = [])

分析

public function getExtensionAnalytics(array $parameters = [])
public function getGameAnalytics(array $parameters = [])

Bits

public function getCheermotes(array $parameters = [])
public function getBitsLeaderboard(array $parameters = [])
public function getExtensionTransactions(array $parameters = [])

剪辑

public function createClip(array $parameters = [])
public function getClips(array $parameters = [])

权益

public function createEntitlementUrl(array $parameters = [])
public function getEntitlementsCodeStatus(array $parameters = [])
public function getDropsEntitlements(array $parameters = [])
public function redeemEntitlementsCode(array $parameters = [])

扩展

public function getAuthedUserExtensions()
public function getAuthedUserActiveExtensions()
public function disableAllExtensions()
public function disableUserExtensionById(?string $parameter = NULL)
public function disableUserExtensionByName(?string $parameter = NULL)
public function updateUserExtensions(?string $method = NULL, ?string $parameter = NULL, bool $disabled = false)

游戏

public function getTopGames(array $parameters = [], ?Paginator $paginator = NULL)
public function getGames(array $parameters = [])

激情列车

public function getHypeTrainEvents(array $parameters = [])

搜索

public function searchCategories(array $parameters = [])
public function searchChannels(array $parameters = [])

直播

public function getStreamKey(array $parameters = [])
public function getStreams(array $parameters = [], ?Paginator $paginator = NULL)
public function createStreamMarker(array $parameters = [], array $body = [])
public function getStreamMarkers(array $parameters = [], ?Paginator $paginator = NULL)
public function getChannels(array $parameters = [])
public function updateChannels(array $parameters = [], array $body = [])

用户

public function createUserFollows(array $parameters = [], array $body = [])
public function deleteUserFollows(array $parameters = [])
public function getUsers(array $parameters = [])
public function getUsersFollows(array $parameters = [], ?Paginator $paginator = NULL)
public function updateUser(array $parameters = [])
public function getUserExtensions(array $parameters = [])
public function getUserActiveExtensions(array $parameters = [])
public function updateUserExtension(array $parameters = [], array $body = [])

视频

public function getVideos(array $parameters = [], ?Paginator $paginator = NULL)

订阅

public function getSubscriptions(array $parameters = [], ?Paginator $paginator = NULL)

标签

public function getStreamTags(array $parameters = [])
public function getAllStreamTags(array $parameters = [], ?Paginator $paginator = NULL)
public function replaceStreamTags(array $parameters = [], array $body = [])

管理

public function checkAutoModStatus(array $parameters = [], array $body = [])
public function getBannedUsers(array $parameters = [], ?Paginator $paginator = NULL)
public function getBannedEvents(array $parameters = [], ?Paginator $paginator = NULL)
public function getModerators(array $parameters = [], ?Paginator $paginator = NULL)
public function getModeratorEvents(array $parameters = [], ?Paginator $paginator = NULL)

Webhooks

public function getWebhookSubscriptions(array $parameters = [])
public function subscribeWebhook(array $parameters = [], array $body = [])
public function unsubscribeWebhook(array $parameters = [], array $body = [])
public function buildWebhookTopic(string $path, array $parameters = [])

OAuth作用域枚举

升级

开发

运行测试

composer test
CLIENT_ID=xxxx composer test
CLIENT_ID=xxxx CLIENT_SECRET=xxxx composer test

生成文档

composer docs

加入Twitch Dev Discord!

Discord

Discord