このたびはぬさも取りあへずたむけ山もみぢのにしき神のまにまに(菅公)
Advent Calendar 2022 73日目1の記事です。
I'm looking forward to 12/25,2022
私のAdvent Calendar 2022 一覧。
はじめに
Elixirを楽しんでいますか
AdventCalendar2022タグがついた記事を取得してみます。
AdventCalendar2022タグ
@kaizen_nagoya さんの記事である事実を知りました。
AdventCalendar2022タグが付いた記事の数が、AdventCalendar2021タグが付いた記事の数を超えたそうです。
Qiita API v2
Qiita API v2でAdventCalendar2022タグがついた記事を取得してみます。
もちろん、Elixirで書きます。
GET /api/v2/items APIを使います。
Mix.install([:req])
Stream.iterate(1, &(&1 + 1))
|> Enum.reduce_while([], fn page, acc ->
IO.puts(page)
encoded_query = URI.encode_query(%{query: "tag:AdventCalendar2022", page: page, per_page: 100})
%{body: body, headers: headers} =
Req.get!("https://qiita.com/api/v2/items?#{encoded_query}",
finch_options: [pool_timeout: 50000, receive_timeout: 50000]
)
total_count = headers |> Map.new() |> Map.get("total-count") |> String.to_integer()
new_acc = body ++ acc
{if(Enum.count(new_acc) >= total_count, do: :halt, else: :cont), new_acc}
end)
|> IO.inspect()
実行
Elixirは1.12 or laterをインストールしておいてください。
elixir adventcalendar2022.exs
結果は、Listで得られます。
List内の各要素は以下のようなMapです。
先頭のMapのみすべてのキーを書いています。
[
%{
"body" => "**月見ればちぢにものこそ悲しけれわが身ひとつの秋にはあらねど**\n\nAdvent Calendar 2022 72日目[^1]の記事です。\nI'm looking forward to 12/25,2022 ...",
"coediting" => false,
"comments_count" => 0,
"created_at" => "2022-03-13T22:48:32+09:00",
"group" => nil,
"id" => "e29ccaffa405ebdbc4c1",
"likes_count" => 3,
"page_views_count" => nil,
"private" => false,
"reactions_count" => 0,
"rendered_body" => "<p><strong>月見ればちぢにものこそ悲しけれわが身ひとつの秋にはあらねど</strong></p>\n<p>Advent Calendar 2022 72日目<sup><a href=\"#fn-1\" id=\"fnref-1\">1</a></sup>の記事です。<br>\nI'm looking forward to 12/25,2022 ...",
"tags" => [
%{"name" => "Elixir", "versions" => []},
%{"name" => "40代駆け出しエンジニア", "versions" => []},
%{"name" => "autoracex", "versions" => []},
%{"name" => "AdventCalendar2022", "versions" => []}
],
"team_membership" => nil,
"title" => "thenを読んでみる、見様見真似でマクロを書いて楽しむ(Elixir)",
"updated_at" => "2022-03-14T22:11:45+09:00",
"url" => "https://qiita.com/torifukukaiou/items/e29ccaffa405ebdbc4c1",
"user" => %{
"description" => "",
"facebook_id" => "",
"followees_count" => 437,
"followers_count" => 137,
"github_login_name" => nil,
"id" => "torifukukaiou",
"items_count" => 343,
"linkedin_id" => "",
"location" => "",
"name" => "",
"organization" => "",
"permanent_id" => 131808,
"profile_image_url" => "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131808/profile-images/1616590306",
"team_only" => false,
"twitter_screen_name" => "torifukukaiou",
"website_url" => "https://www.torifuku-kaiou.tokyo/"
}
},
%{...},
...
]
Enumモジュールでいろいろ整形したり、likes_count
で並び替えたり、Enum.reduce/3で作者ごとのlikes_count
数を集計したり、いろいろ楽しめます。
PATCH /api/v2/items/:item_idと組み合わせれば、記事の自動更新ができます。
そうだ!
以下を書きます。
- LGTM数順に記事を並べる自動更新される記事
- これを題材にEnumモジュールの連載を書こうとおもいます。
楽しみます。
Wrapping up 



今回は、AdventCalendar2022タグが付いた記事の数が、AdventCalendar2021タグが付いた記事の数を超えたことを記念? して、Qiita API v2からAdventCalendar2022タグが付いた記事を取得するプログラムを作ってみました。
もちろんプログラミング言語は、Elixirを使いました。
Enjoy Elixir
$\huge{Enjoy\ Elixir🚀}$
以上です。
I organize autoracex.
And I take part in NervesJP, fukuoka.ex, EDI, tokyo.ex, Pelemay.
I hope someday you'll join us.
We Are The Alchemists, my friends!