##はじめに
現在自身の簡易的なホームページ的な物を作成してまして、そこで自身のQiitaの記事を載せたいなーと思い、取り掛かったのですが、初めてAPIを触るという事でチンプンカンプンでして、どうなる事やらと思ったのですが、なんとか取得できましたので、記載したいと思います。
QiitaのAPIv2に関しましては、下記を参考にして下さい。
[参考]
https://qiita.com/api/v2/docs
認証を用いて取得する場合と、認証を用いらず取得する場合があるのですが、認証を用いらず取得する場合は、公開された記事のみを取得する形となりまして、もし限定公開の記事がある場合、取得できません。
認証
というのは、本人しか知り得ない情報を使用して、本人であるという事を証明する事
だと解釈しています。
実際にクライアントとサーバー間の認証までの流れをざっくり話しますと、
1. クライアントからサーバに認証情報を渡す
2. サーバで認証情報を検証して、Access Token を発行
3. クライアントは API Call で Access Token を利用
4. サーバは Access Token を検証して、API のレスポンスを返す
という流れになります。
で、今回でいう本人しか知り得ない情報
というのが、アクセストークン
になりまして、自身のアカウントの設定
からアプリケーション
を選択しますと、新しくトークンを発行する
というのがありますので、そちらでアクセストークンを発行して下さい。
という事で、認証を用いて自身の記事を取得するまでを記載致します。
##記事取得
まずはターミナル上で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月までは溶接職人でした。ガッツ系エンジニアとしてやらせて頂いております。