質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

1396閲覧

QiitaAPIv2を使用して自身の記事を複数件取得できない

Tatsuo_Iriyama

総合スコア50

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2018/10/07 02:02

##現状

QiitaのAPIv2を使用して自身の記事取得をしようとしております。

Controller

1public function hoge() 2 { 3 $user = Qiitaのアカウント名; 4 $url = 'https://qiita.com/api/v2/items?page=1&per_page=10&query=qiita+user%3A' . $user; 5 $json = file_get_contents($url); 6 $data = json_decode($json); 7 $this->render($this->request->action, 'default'); 8 }

Controllerにて上記のコードにより自身の記事を取得しようとしています。

##問題点

  • per_pageの値を変更しても1件しか取得できない。

(当たり前ですが、Qiitaの記事は1件以上投稿しております。)

上記が問題点となります。

私が答えて頂きたい事は、

  • 複数件取得する方法

になります。

現状なぜ1件しか取得できないのかが、わかりません。
取得される記事も最新の記事が取得されているわけではなく、逆に一番古い記事が取得されているわけでもありません。

複数件取得する方法をなるべく早急に教えて頂きたいと思っております。
どうかよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

下記のどこまでできているのでしょうか?

Webブラウザで、API の URL を開いたら、データは複数件取得されますか?

$json にデータは取得できていますか?

$data にデータは入っていますか?


(追記)
コメント欄に書けなかったので、こちらへ

コメント欄で記載した curl コマンドを PHP の cURL 関数に置き換えるとこんな感じでしょうか。

$ch = curl_init(); $url = "https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=10"; $options = array( CURLOPT_URL => $url CURLOPT_HTTPHEADER => array( 'Content-Type: application/json; charser=UTF-8', 'Authorization: Bearer ' . "アクセストークン" ), CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'GET', ); curl_setopt_array($ch, $options); $json = curl_exec($ch) curl_close($ch); $data = json_decode($json);

参考:

投稿2018/10/07 03:31

編集2018/10/07 11:34
CHERRY

総合スコア25175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tatsuo_Iriyama

2018/10/07 05:40

WebブラウザでAPIのURLを開いたら、やはり1件しか取得できていませんでした。 もちろんその後の$jsonや$dataには、その取得したデータは入っています。 どうしてなのでしょうか?
CHERRY

2018/10/07 05:56

このURLでは、認証していないので、公開された記事しか取得できません。 参照しようとしている投稿記事は、公開された記事ではなく限定公開記事ということはないでしょうか?
Tatsuo_Iriyama

2018/10/07 06:02

今まで書いた記事に関して公開の是非を考えた事はなかったので、おそらく全て公開されているのではないかなと思うのですが、 公開されているのか、限定公開なのか、はどのように確認すればよろしいでしょうか? 質問の内容と逸れてしまい申し訳ありません。
CHERRY

2018/10/07 06:04 編集

Qiita をログオフした状態で表示できれば、公開された投稿です。
Tatsuo_Iriyama

2018/10/07 06:07 編集

全て公開されていましたので、条件は満たしているのではないかと思われます。 そもそも認証されたURLなら、公開、限定公開に関わらず取得できるのであれば、 その方法を教えて頂きたいです。 重ね重ねすいません。
Tatsuo_Iriyama

2018/10/07 06:42

アクセストークンの取得は完了しております。
CHERRY

2018/10/07 10:33 編集

トークンを取得済みということなので、まずは、 curl -X GET https://qiita.com/api/v2/items?per_page=10&query=qiita+user:ユーザー名 -H "Content-Type: application/json" -H 'Authorization: Bearer トークン' のようにヘッダに アクセストークンを付加するようにして curl で実行してみるとどうでしょうか? なお、ユーザー名とトークンの部分は、ご自身のものに置き換えて実行してください。
Tatsuo_Iriyama

2018/10/07 10:01 編集

コマンドとしては、 curl -X ~~~ 'Authorization:Bearer アクセストークン' までが一つのコマンドで、これをターミナル上で叩く という事でしょうか? 私が入力したコマンドは、 [ curl -X GET https://qiita.com/api/v2/items?per_page=10&query=qiita+user:キータのアカウント名 -H "Content-Type: application/json" -H 'Authorization:Bearer アクセストークン(read onlyのトークン) ] []←カッコ内のコマンドを入力しましたが、そもそも実行できませんでした。 また、 [ curl -X GET https://qiita.com/api/v2/items?per_page=10&query=qiita+user:ユーザー名 ] のみの実行ですと自身の記事は取得されていないように思いました。 文字化けのような形で返ってきたので、正確にどの記事が取得されているのかは、わかりませんが。
CHERRY

2018/10/07 10:52 編集

あ、失礼しました。 貼り付けた際に シングルクォートが化けていたようです。 > -H 'Authorization: Bearer トークン'   の部分が、認証するために必要ですから、省略すると認証されないので、結果は、質問のURLと同じになると思われます。
Tatsuo_Iriyama

2018/10/07 10:54

[ curl -X GET https://qiita.com/api/v2/items?per_page=10&query=qiita+user:キータのアカウント名 -H "Content-Type: application/json" ] このコマンドですと、いわゆる認証をしていない状態で記事を取得しようとしているという事でしょうか? で、 [ curl -X GET https://qiita.com/api/v2/items?per_page=10&query=qiita+user:キータのアカウント名 -H "Content-Type: application/json" -H 'Authorization:Bearer アクセストークン(read onlyのトークン)' ] が認証をして記事を取得するコマンドになるという事でしょうか? 私の出力結果では、実行直後に [ -bash: -H: コマンドが見つかりません ] というエラーを吐いた後、curlが実行され、記事を取得するという感じなのですが、どうやら自分の記事を取得できていないようです。原因はわかりませんが。認証部分を省略してもしなくても同じ結果になります。 タイポ等はしていないと思いますので、指定されたコマンドを叩けてはいると思うので、なぜ自分の記事を取得できていないのか、がわかりません。
CHERRY

2018/10/07 11:04 編集

うーん。 投稿記事を取得できる条件を探さないとプログラムにたどり着けないんですよね... https://curl.haxx.se/docs/manpage.html にあるとおり、 -H は HTTPヘッダを指定するオプションなのですが... Bash で、エラーがでているということは、どこかで改行されてコマンドが切れているのですね。 URL の前後をダブルクォートで囲ったら、Bash のエラーは出なくなりますか? (ややこしいので全部ダブルクォートに揃えました。) curl -X GET "https://qiita.com/api/v2/items?per_page=10&query=qiita+user:キータのアカウント名" -H "Content-Type: application/json" -H "Authorization: Bearer アクセストークン(read onlyのトークン)"
CHERRY

2018/10/07 11:11 編集

もう一度、Qiita API v2 Documents ( https://qiita.com/api/v2/docs ) を読んでいたら... エンドポイントは、/api/v2/authenticated_user/items ( https://qiita.com/api/v2/docs#get-apiv2authenticated_useritems )の方がよいかもしれないです。 (「認証済ユーザの投稿一覧」を取得) 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 アクセストークン(read onlyのトークン)" のような感じかな。
Tatsuo_Iriyama

2018/10/07 11:12

取得できました!!! -H に対してもエラーも出ず!ただ1件のみですが!
Tatsuo_Iriyama

2018/10/07 11:14

後者のコマンドを叩きましたら、全件記事を取得することができました!
CHERRY

2018/10/07 11:35

うーん... なぜだ... API の仕様の違いなのか... まあ、ちょっと置いておいて...  PHPからアクセスする場合も 同じように cURL 関数( http://php.net/manual/ja/ref.curl.php )を使います。 テストしていないのですが、先ほどの curl コマンドを PHP の cURL 関数で書いた例を 解答欄に追記しましたので、参考にしていろいろ試してみてください。
Tatsuo_Iriyama

2018/10/07 11:56

若干疑問点は残ってしまいましたが、非常に助かりました! 長々とお付き合いして頂きありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問