LoginSignup
8
4

More than 5 years have passed since last update.

GitHub API v4をPHPから呼んでみる

Posted at

APIを「叩く」って言い方、よく聞くけど、痛そうだから好きじゃないのよね…。

さて、GitHubのAPI使って何かやろうと思ったら、今はv4のGraphQLなんてのがあるんですね。
https://developer.github.com/v4/

こいつをPHPから呼び出してみようというわけです。

GitHub API v4は、GraphQLのクエリを含んだJSONを、ベアラートークンを付けて、エンドポイントにPOSTすると、JSONデータが返ってくる、という仕組みになっています。QueryじゃなくMutationを投げたら更新らしいですが、今回は取得だけやってみます。

GraphQLのクエリを書いてみる

GraphQL API Explorerなんてのがあるので、ここで書いてみましょう。

とりあえず、よくあるパターンで、特定ユーザーのリポジトリの名前とURLの一覧を取得するクエリを書いてみました。

{
  user(login: "mifumi323") {
    repositories(first: 10) {
      nodes {
        name
        url
      }
    }
  }
}

GraphQL見たことのない人でも何となくわかるんじゃないでしょうか。「mifumi323」というユーザーのリポジトリの最初の10件の名前とURLを取得するクエリです。

返ってくるJSONも見りゃわかる内容なので、省略します。

ベアラートークンを取得する

GitHub APIの要件なのかGraphQLの要件なのか知りませんが、APIを呼び出すときにはベアラートークンが必要です。

settings.png

Settings→Developer settings→Personal access tokensと進んでいって、Generate new tokenしましょう。scopeはrepoでいいはず。発行したトークンは一度しか表示されないので、忘れずにメモしておきましょう。

POSTする

クエリとトークンがそろったので、POSTするPHPプログラムを書いてみます。\$tokenと\$queryにはさっき作ったやつを入れましょう。

<?php

$token = 'ここにトークンを書いてね';
$query = 'ここにクエリを書いてね';

$options = [
    'http' => [
        'method' => 'POST',
        'header' => [
            'User-Agent: My User Agent',
            'Authorization: bearer '.$token,
            'Content-type: application/json; charset=UTF-8',
        ],
        'content' => json_encode(['query' => $query]),
    ],
];
$context = stream_context_create($options);
$contents = file_get_contents('https://api.github.com/graphql', false, $context);
var_dump(json_decode($contents));

file_get_contentsって便利ですね。stream_context_createでPOSTするコンテンツやらヘッダやらを用意しています。

contentはクエリそのままだと受け付けないので、queryフィールドにクエリの内容を含んだJSONにしておきます。それに合わせて、Content-typeも指定しておきます。

そして、ベアラートークンをAuthorizationに入れてPOSTします。

GitHubはv3の頃もそうでしたが、ヘッダにUser-Agentを入れておかないとエラーになります。特に何かに使っているわけでもないようなので、適当に無難な文字列を入れておくといいかと思います。

エラー処理など

GraphQLのエラーは、dataフィールドがnullになってerrorsフィールドが入ってきます。ただし、GraphQLをパースする前のエラー、例えば認証エラーなどの場合は、HTTPのエラーコードが返ってきます。

理屈を考えれば当たり前ですが、区別して扱うようにしましょう。

8
4
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
8
4