エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

【小ネタ】Qiita APIを利用して記事を取得してみた

経緯

実装

環境情報

  • 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

Qiita APIを使って記事一覧を取得する - Qiita

Qiita APIを触ってみる - Qiita