3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[WordPress] GitHub API v4を WordPress から呼んでみる

Last updated at Posted at 2019-11-07

GitHub API v4 を使って、WordPress で GitHub のデータを取得する方法です。
参考: GitHub API v4をPHPから呼んでみる

v4 では GraphQL のクエリを含んだ JSON を POST する形になります。
https://developer.github.com/v4/

GraphQL のクエリ

取得したいデータに合わせて GraphQL のクエリを作成しましょう。
GitHub GraphQL API で、実際にクエリ作って確認することができます。

僕は、release データからパッケージのダウンロード URL を取得したかったので、こんな感じで作りました。

{
  repository(owner: "getshifter", name: "shifter-github-hosting-plugin-sample") {
    releases(last: 1){
      edges {
        node {
          releaseAssets(last: 1) {
            nodes {
              downloadUrl
              url
            }
          }
          url
          tagName
          isPrerelease
          publishedAt
          updatedAt
        }
      }
    }
  }
}

結果

{
  "data": {
    "repository": {
      "releases": {
        "edges": [
          {
            "node": {
              "releaseAssets": {
                "nodes": [
                  {
                    "downloadUrl": "https://github.com/getshifter/shifter-github-hosting-plugin-sample/releases/download/1.0.1/shifter-github-hosting-plugin-sample.zip",
                    "url": "https://github-production-release-asset-2e65be.s3.amazonaws.com/205090003/f64b1a80-cd47-11e9-81c2-8e04f2876f81?....."
                  }
                ]
              },
              "url": "https://github.com/getshifter/shifter-github-hosting-plugin-sample/releases/tag/1.0.1",
              "tagName": "1.0.1",
              "isPrerelease": false,
              "publishedAt": "2019-09-02T06:07:38Z",
              "updatedAt": "2019-09-02T06:07:38Z"
            }
          }
        ]
      }
    }
  }
}

最終リリースパッケージをダウンロードするための URL が取得できたよー

トークンを取得する

API v4 を叩くには、個人アクセストークンを取得する必要があります。
アクセストークンの取得方法は、公式ドキュメントを参考に
コマンドライン用の個人アクセストークンを作成する

POST する

WordPress には wp_remote_post() という関数があるので、それを使いましょう。

$query = '__GRAPHQL_QUERY_HERE__';
$token = '__GITHUB_ACCESS_TOKEN_HERE__';

$options = [
    'method'  => 'POST',
    'headers' => [
        'Authorization' => 'bearer ' . $token,
        'Content-type'  => 'application/json; charset=UTF-8',
    ],
    'body'    => json_encode(['query' => $query]),
];
$res = wp_remote_post( 'https://api.github.com/graphql', $options);

if (200 !== wp_remote_retrieve_response_code( $res )) {
    return new \WP_Error(
        wp_remote_retrieve_response_code( $res ),
        wp_remote_retrieve_body( $res )
    );
}
$body = json_decode( wp_remote_retrieve_body( $res ) );

return $body;

簡単ですね。

実際にこのコードを使って作った WordPress プラグインが以下になります。
shifter-github

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?