Work in Progress

Elixir project

$ mix new a13dl
$ cd a13dl

a13dl.exs

defmodule A13dl do
    def scr() do
        url = "https://13dl.me/list/popular/"
        getnext(url,[])
    end

    #### private function (recursive call)
    defp getnext(target,total_list) do
        html = HTTPoison.get!(target, [], [timeout: 150_000, recv_timeout: 150_000]).body
        {:ok, document} = Floki.parse_document(html)

#      IO.puts html
#        link = document
#            |> Floki.find(".cluetip")
#            |> Floki.attribute("href")
#
#        if length(link) > 0 do
#            name = Enum.with_index(link, &(
#                p = URI.parse(&1)
#                   |> Map.fetch!(:path)
#                   |> Path.basename()
#
#                num = length(total_list) + (&2 + 1)
#                "#{num} #{p}"
#            ))
#            Enum.each(name, &(IO.puts &1))
#        end
        atag = document
            |> Floki.find("a")
            |> Floki.attribute("title")
#           |> Floki.raw_html

        if length(atag) > 0 do
            result = Enum.filter(atag, fn(s) ->
                flag0 = (s == "")
                flag1 = Regex.match?(~r/^Home/, s)    
                flag2 = Regex.match?(~r/^Popular Manga/, s)    
                flag3 = Regex.match?(~r/^Page/, s)    
                flag4 = Regex.match?(~r/^Prev/, s)    
                flag5 = Regex.match?(~r/^Next/, s)    
                !flag0 and !flag1 and !flag2 and !flag3 and !flag4 and !flag5
            end)

            newlist = total_list ++ result

            Enum.with_index(result, fn(x,index) ->
                num = length(total_list) + (index + 1)
                IO.puts "#{num} #{x}"
            end)

        #------------------------------------------
            nextaddr = document
                |> Floki.find("a")
                |> Floki.find("[title='Next']")
                |> Floki.attribute("href")

            if length(nextaddr) > 0 do
                #IO.puts nextaddr
                getnext("#{nextaddr}",newlist)
            end

        #------------------------------------------
        end

    end
end

mix.exs

defmodule A13dl.MixProject do
  use Mix.Project

  def project do
    [
      app: :a13dl,
      version: "0.1.0",
      elixir: "~> 1.13",
      start_permanent: Mix.env() == :prod,
      deps: deps()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      # {:dep_from_hexpm, "~> 0.3.0"},
      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
    {:httpoison, "~> 1.8.0"},
    {:floki, "~> 0.32.0"}
    ]
  end
end

terminal

$ ~/e/1/a13dl> mix deps.get
$ ~/e/1/a13dl> export ERL_AFLAGS="-kernel shell_history enabled"
$ ~/e/1/a13dl> iex -S mix

Erlang/OTP 24 [erts-12.3.2] [source] [smp:8:8] [ds:8:8:10] [async-threads:1]
Interactive Elixir (1.13.4) - press Ctrl+C to exit (type h() ENTER for help)

iex(1)> c("a13dl.exs")
warning: redefining module A13dl (current version loaded from_build/dev/lib/a13dl/ebin/Elixir.A13dl.beam)
a13dl.exs:1
[A13dl]
iex(2)> spawn A13dl.scr()

Edit
Pub: 18 May 2022 08:47 UTC
Edit: 20 May 2022 16:26 UTC
Views: 291