経緯
実装
環境情報
- Java17
- SpringBoot3
実装
// ① HttpClient client = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_1_1) .followRedirects(HttpClient.Redirect.NORMAL) .connectTimeout(Duration.ofSeconds(20)) .build(); // ② String weekStartDate = getWeekStartDate().format(DateTimeFormatter.ISO_LOCAL_DATE); // ③ Map<String, String> params = Map.of( "page", "1", "per_page", "10", "query", String.join("+", "created:>" + weekStartDate, "stocks:>10") // ④ ); // ⑤ HttpRequest request = HttpRequest.newBuilder() .GET() .uri(urlService.buildQueryStringURI("https://qiita.com/api/v2/items", params)) .header("Authorization", "Bearer " + accessToken) .header("accept", "application/json") .build(); // ⑥ HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
説明
①
Http通信する必要があるので、Java標準で装備されたHttpClientを用意。
特に、必要な設定ないので、適当に作った。
②
APIで利用する日付の取得。
クエリに使うので、特に必要な実装というわけではない
③+④
渡すクエリパラメータを定義
詳しくは、APIの内容参照
Qiita API v2 documentation - Qiita Developer
queryのところは、Qiitaが提供している機能で記事検索のフィルタリングをしてくれる。
たぶん、ホームタブで出てくる記事の一覧を取れるんだと思う。
俺は、今週、注目されている記事一覧を見たいので、LocalDateで今週頭の日付を取ってきて、それ以上でストック数が10より大きいものを10個まで取ってきている。
並び変えも実装したいとは思っている。
⑤
リクエスト内容の生成。
認証が必要なので、アクセストークンくっつける。
やり取りはJSONなので、念のため、acceptを追記しておく。
アクセストークンの発行は、参考リンク参照。
ざっくり説明すると、Qiitaのアカウント作って、設定→アプリケーションから、個人用アクセストークンを発行する。
⑥
作ったリクエストでアクセス。
サイトの一覧が取れる。
感想
リクエストが弾かれたりしたので、結構迷った。。。
直近で試したら、サーバーが落ちてたみたいで、俺が悪いのかコード見直しを何回もしたので疲れた。。。
参考リンク
Next.js から Qiita API v2 を叩いて人気記事のデータを取得する | WWW WATCH