【작은 재료】 즉시 지브리의 이미지를 다운로드합니다 (Elixir)

8347 단어 Elixir

소개



  • @mine820 님의 【작은 재료】 즉시 지브리 이미지 다운로드을 쳐다 보았습니다.

    0. 프로젝트 만들기


    $ mix new ghibli_download
    $ cd ghibli_download
    

    1. Elixir 소개



    mix.exs
      defp deps do
        [
          {:httpoison, "~> 1.6"}
        ]
      end
    
    $ mix deps.get
    
  • 종속성 해결

  • 2. 소스 코드 작성



    lib/ghibli_download.ex
    defmodule GhibliDownload do
      @works ~W{marnie kaguyahime kazetachinu kokurikozaka karigurashi ponyo ged chihiro}
      @url_base "http://www.ghibli.jp/gallery"
      @ext ".jpg"
      @local_base "#{System.user_home()}/memo/ghibli"
    
      def run do
        @works
        |> Enum.flat_map(&urls(&1, 50))
        |> Enum.map(fn {url, file_name} ->
          IO.puts(url)
          download(url, file_name)
          Process.sleep(1000 * 20)
        end)
      end
    
      defp urls(work, num) do
        1..num
        |> Enum.map(&{"#{@url_base}/#{file_name(work, &1)}", file_name(work, &1)})
      end
    
      defp file_name(work, num) do
        "#{work}#{Integer.to_string(num) |> String.pad_leading(3, "0")}#{@ext}"
      end
    
      defp download(url, file_name) do
        HTTPoison.get!(url)
        |> Map.get(:body)
        |> (fn content -> File.write("#{@local_base}/#{file_name}", content) end).()
      end
    end
    
  • 1을 "001"로 하는 것은 어떻게 하는 것일까? 는 HTTPoison 를 참고로 했습니다
  • In Elixir, how do you format numbers with string interpolation

  • 3. 실행


    $ iex -S mix
    
    iex> GhibliDownload.run
    
  • 숨을 쉴 수 있었기 때문에 2시간 반 정도 내버려 두면 끝나고 있을 것입니다

  • Wrapping Up


  • Enjoy String.pad_leading/3 !!!
  • Enjoy 지브리 !!!
  • 좋은 웹페이지 즐겨찾기