[Elixir] Qiita 자신의 기사 내보내기
11608 단어 ElixirQiita 여름 축제 2020_Qiita
소개
Qiita 여름 축제 2020 온라인 라이브 방송에 가입했습니다
Elixir은 1.11.2-otp-23을 사용합니다.
0. 설치 및 프로젝트 만들기
$ mix new qiita_export
$ cd qiita_export
1. 종속성 해결
mix.exs defp deps do
[
{:httpoison, "~> 1.6"}, # add
{:jason, "~> 1.2"} # add
]
end
$ mix deps.get
2. 소스 코드 작성
lib/qiita/api.exdefmodule Qiita.Api do
@token "secret"
@per_page 100
@headers [Authorization: "Bearer #{@token}", Accept: "Application/json; Charset=utf-8"]
def items_count(id \\ "torifukukaiou") do
HTTPoison.get("https://qiita.com/api/v2/users/#{id}")
|> decode_response()
|> Jason.decode!()
|> Map.get("items_count")
end
def items_by_page(page) do
"https://qiita.com/api/v2/authenticated_user/items?page=#{page}&per_page=#{@per_page}"
|> HTTPoison.get(@headers)
|> decode_response()
|> Jason.decode!()
end
def max_page(items_count) when rem(items_count, @per_page) == 0 do
div(items_count, @per_page) |> min(100)
end
def max_page(items_count) do
(div(items_count, @per_page) + 1) |> min(100)
end
defp decode_response({:ok, %HTTPoison.Response{body: body, status_code: 200}}) do
body
end
defp decode_response(_), do: raise("")
end
defp deps do
[
{:httpoison, "~> 1.6"}, # add
{:jason, "~> 1.2"} # add
]
end
$ mix deps.get
lib/qiita/api.ex
defmodule Qiita.Api do
@token "secret"
@per_page 100
@headers [Authorization: "Bearer #{@token}", Accept: "Application/json; Charset=utf-8"]
def items_count(id \\ "torifukukaiou") do
HTTPoison.get("https://qiita.com/api/v2/users/#{id}")
|> decode_response()
|> Jason.decode!()
|> Map.get("items_count")
end
def items_by_page(page) do
"https://qiita.com/api/v2/authenticated_user/items?page=#{page}&per_page=#{@per_page}"
|> HTTPoison.get(@headers)
|> decode_response()
|> Jason.decode!()
end
def max_page(items_count) when rem(items_count, @per_page) == 0 do
div(items_count, @per_page) |> min(100)
end
def max_page(items_count) do
(div(items_count, @per_page) + 1) |> min(100)
end
defp decode_response({:ok, %HTTPoison.Response{body: body, status_code: 200}}) do
body
end
defp decode_response(_), do: raise("")
end
qiita_export.ex
defmodule QiitaExport do
@user_id "torifukukaiou"
def run do
max_page = Qiita.Api.items_count(@user_id) |> Qiita.Api.max_page()
1..max_page
|> Enum.each(fn page ->
Qiita.Api.items_by_page(page)
|> Enum.each(fn %{"body" => body, "title" => title} ->
File.write!(filename(title), body)
end)
end)
end
defp filename(title) do
title
|> String.replace("/", "_") # ファイル名に使えない文字があったらここで調整
|> Kernel.<>(".md")
end
end
.md
괜찮습니까? ) 3. 실행
$ iex -S mix
iex> QiitaExport.run
:ok
Wrapping Up
$ iex -S mix
iex> QiitaExport.run
:ok
Qiita 여름 축제 2020 온라인 라이브 방송은 다양한 이야기를 듣고 흥미 롭습니다.
Enjoy!!!
Reference
이 문제에 관하여([Elixir] Qiita 자신의 기사 내보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torifukukaiou/items/5ed277b219da1731dc78텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)