如何通过 Twitch GraphQL API 获取数据并显示数据

阅读时长 10 分钟读完

Twitch 是全球最大的游戏直播平台之一,提供了丰富的游戏、电竞、娱乐直播内容。为了方便开发者通过 Twitch 获取数据来开发一些有趣的应用,Twitch 提供了 GraphQL API。本文将介绍如何通过 Twitch GraphQL API 获取数据并显示数据。

1. 准备工作

在开始使用 Twitch GraphQL API 之前,需要进行以下准备工作:

  1. 注册一个 Twitch 帐户,并创建一个开发者应用,获取应用的 Client ID 和 Client Secret。

  2. 安装 Node.js,使用 npm 安装相关的 Node 模块,比如 express, graphql-request

  3. 搭建一个本地的 Web 服务器,并进行相应的配置。

2. 获取 Twitch GraphQL API 的访问凭证

在使用 Twitch GraphQL API 之前,需要先获取访问凭证。Twitch GraphQL API 使用 OAuth2 鉴权方式,需要先获取 OAuth2 的 Access Token。过程如下:

  1. 跳转至 Twitch OAuth2 授权页面:

    参数说明:

    • response_type:固定为 code
    • client_id:开发者应用的 Client ID
    • redirect_uri:授权完成后重定向的回调 URL
    • scope_list:授权的权限列表,可以是多个权限,用空格分隔
    • state:授权流程中传递的状态值,可以是任意字符串
  2. 用户点击授权按钮,授权成功后跳转至 redirect_uri,并携带 codestate 参数。

  3. 通过 http 请求向 Twitch 申请 Access Token:

    参数说明:

    • client_id:开发者应用的 Client ID
    • client_secret:开发者应用的 Client Secret
    • code:从 Twitch 授权页面获取到的授权码
    • grant_type:固定为 authorization_code
    • redirect_uri:授权完成后重定向的回调 URL
  4. Twitch 返回 Access Token:

    记录下 Access Token,以便后续使用。注意 Access Token 有过期时间,需要在过期前重新申请。

3. 查询 Twitch 数据

Twitch GraphQL API 支持的查询类型有:Query, Mutation, Subscription,本文只介绍 Query 类型的查询。具体查询的字段可以参考 Twitch GraphQL API 文档。

下面以查询某个游戏的直播列表为例,介绍如何使用 Node 模块 graphql-request 查询 Twitch 数据。假设查询的游戏名称为 GameName,通过 stream 字段查询该游戏的直播列表。

  1. 创建一个 GraphQL 查询语句:

    -- -------------------- ---- -------
    ----- ---------------------- -------- -
      -------------- --- ----- ---------- -
        ----- -
          ---- -
            --
            -----
            -----------
            --------------------
            ------------------- ---- ------- ----
          -
        -
      -
    -
    展开代码

    $gameName 是查询参数,需要传递游戏名称。

  2. 在 Node 中发起 GraphQL 查询请求:

    -- -------------------- ---- -------
    ----- - -------- --- - - ---------------------------
    
    ----- --- - --------------------------------------
    ----- ----- - --------- -- ------- ----
    
    ----- ------- - -
      ---------------- ------- ----------------
      ------------ ---------
    --
    ----- --------- - -
      --------- -----------
    --
    ----- ---- - ----- ------------ ------ ---------- --------- -- -- ------- ----
    展开代码

    accessToken 是上一步获取到的 Access Token,clientId 是开发者应用的 Client ID。

    注意请求头中需要携带 AuthorizationClient-Id,以便 Twitch 对该查询进行鉴权。

    variables 是查询参数,注意命名与查询语句中定义的 $gameName 一致。

    requestgraphql-request 模块提供的方法,用于发起 GraphQL 查询请求。注意该方法返回一个 Promise,需要使用 await 等待异步结果。

  3. 处理查询结果并显示数据:

    -- -------------------- ---- -------
    ----- --- - ----------
    
    ------------------- ----- ----- ---- -- -
      ----- - ---- - - ----- ------------ ------ ---------- ---------
    
      ----- ------- - ----------------------------- -- -----------
      -- ----------------
      ------------------
    ---
    
    ---------------- -- -- -
      ---------------------- -- ------------------------
    ---
    展开代码

    streams 数组作为响应发送给前端页面即可。根据具体需求,可以将数据进行进一步的处理和过滤,以便更好地展示数据。

4. 小结

本文介绍了如何通过 Twitch GraphQL API 获取数据并显示数据,需要进行 OAuth2 授权,查询 GraphQL 数据并处理数据。通过本文的学习,可以掌握如何使用 Twitch GraphQL API,并可以基于此进行二次开发。

5. 示例代码

以下是完整的示例代码,供读者参考:

-- -------------------- ---- -------
----- ------- - -------------------
----- - -------- --- - - ---------------------------

----- --- - --------------------------------------
----- -------- - ----------------------------------- -- ------ ------ --
----- ------------ - ----------------------------------- -- ------ ------ ------
----- ----------- - --------------------------------- -- ----------- ---

----- --- - ----------

-- ----
----------------- ----- ---- -- -
  ----- ------- - --------------------------------------- -
    --------------------- -
    ------------------------ -
    ------------------------------ -
    -------------------

  ----------------------
---

-- ------
-------------------- ----- ----- ---- -- -
  ----- - ---- - - ----------

  ----- ----------- - ----- ---------------------
  ----- - ---- - - ----- ------------------------- ------------
  ----- ------- - ----------------------------- -- -----------

  ------------------
---

-- -- ------ -----
----- -------- -------------------- -
  ----- -------- - ----- ------------------------------------------ -
    ------- -------
    ----- --- -----------------
      ---------- ---------
      -------------- -------------
      ----- -----
      ----------- ---------------------
      ------------- ------------
    ---
  ---
  ----- - ------------ - - ----- ----------------
  ------ -------------
-

-- --------
----- -------- ------------------------- --------- -
  ----- ----- - ----
    ----- ---------------------- -------- -
      -------------- --- ----- ---------- -
        ----- -
          ---- -
            --
            -----
            -----------
            --------------------
            ------------------- ---- ------- ----
          -
        -
      -
    -
  --
  ----- ------- - -
    ---------------- ------- ----------------
    ------------ ---------
  --
  ----- --------- - -
    --------- ---------
  --
  ----- ---- - ----- ------------ ------ ---------- ---------
  ------ -----
-

---------------- -- -- -
  ---------------------- -- ------------------------
---
展开代码

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67929dbe504e4ea9bd666f14

纠错
反馈

纠错反馈