Qiita
PHP
api
QiitaAPI

QiitaのAPIv2を使用して自身の記事取得

はじめに

現在自身の簡易的なホームページ的な物を作成してまして、そこで自身のQiitaの記事を載せたいなーと思い、取り掛かったのですが、初めてAPIを触るという事でチンプンカンプンでして、どうなる事やらと思ったのですが、なんとか取得できましたので、記載したいと思います。

QiitaのAPIv2に関しましては、下記を参考にして下さい。
[参考]
https://qiita.com/api/v2/docs

認証を用いて取得する場合と、認証を用いらず取得する場合があるのですが、認証を用いらず取得する場合は、公開された記事のみを取得する形となりまして、もし限定公開の記事がある場合、取得できません。

認証というのは、本人しか知り得ない情報を使用して、本人であるという事を証明する事だと解釈しています。

実際にクライアントとサーバー間の認証までの流れをざっくり話しますと、

1. クライアントからサーバに認証情報を渡す
2. サーバで認証情報を検証して、Access Token を発行
3. クライアントは API Call で Access Token を利用
4. サーバは Access Token を検証して、API のレスポンスを返す
という流れになります。

で、今回でいう本人しか知り得ない情報というのが、アクセストークンになりまして、自身のアカウントの設定からアプリケーションを選択しますと、新しくトークンを発行するというのがありますので、そちらでアクセストークンを発行して下さい。
スクリーンショット_2018-10-08_0_12_10.png

という事で、認証を用いて自身の記事を取得するまでを記載致します。

記事取得

まずはターミナル上でcurlコマンドを使用して、自身の記事を取得してみます。
コードに落とし込むのはその後になります。

$ curl -X GET "https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=10" -H "Content-Type: application/json" -H "Authorization: Bearer [自身のアクセストークン]"

こちらを叩きまして、取得してみて下さい。
ちなみにこのコマンドでは、per_page=10としてますので、最新の記事10件を取得する事になります。
per_pageは取得件数ですので、仮に10件以上の記事を投稿している方は、この値を変更すれば、取得できる件数も変えられるという事になりますが、ここでは自身の記事が取得できるかどうかが大事ですので、これでいいかと思われます。

curlコマンドについてはこちらを参考にしてみて下さい。
[参考]
https://qiita.com/yasuhiroki/items/a569d3371a66e365316f

取得できましたら、コードに落とし込んでいきましょう。
今回私はPHPのcURL関数を使用して書いていきます。

// curlの初期化
$ch = curl_init();
// 使用するURL
$url = "https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=10";
// curlのオプション設定
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HTTPHEADER => array(
        // データの形式、文字コード記載
        'Content-Type: application/json; charser=UTF-8',
        // 自身のアクセストークン
        'Authorization: Bearer ' . "[自身のアクセストークン]"
    ),
    // 返り値を文字列で取得
    CURLOPT_RETURNTRANSFER => true,
    // HTTPメソッド指定
    CURLOPT_CUSTOMREQUEST => 'GET',
);
// 複数のオプションを設定
curl_setopt_array($ch, $options);
// curlの実行
$json = curl_exec($ch);
// curlを閉じる
curl_close($ch);
// json文字列をデコード
$data = json_decode($json);

上記のコードがcurlコマンドからcURL関数に置き換えて書いたコードになります。
cURL関数がよくわからなかった為、非常に時間がかかりました。

先ほどper_pageについて触れましたが、コードに落とし込んだ際は、各個人の取得したい件数によって変更してみて下さい。

cURL関数に関しましては、こちらを参考にしてみて下さい。
[参考]
http://php.net/manual/ja/ref.curl.php

まとめ

考えた割にはコードは短かったです。
まだAPIについては理解しきっていませんので、勉強が必要かと思いますが、何より取得できたという事に喜びを感じました。
プログラミング楽しいなー
是非実践してみて下さい!!

おまけ

Twitterやってます!外部のエンジニアの方ともどんどん繋がりたいと考えていますので、是非フォローして頂ければと思います!@Tatsuo96
p.s.今年の2月までは溶接職人でした。ガッツ系エンジニアとしてやらせて頂いております。