SDKs

Elixir

Phoenix と OTP のための Elixir イディオムなパターン

Req(Elixir のモダンな HTTP クライアント)を使います —— Finch ベースで、リトライと接続プーリングが標準装備です。

mix.exs

defp deps do
  [
    {:req, "~> 0.5"}
  ]
end

Configure

defmodule Thunderbit do
  @api "https://openapi.thunderbit.com/openapi/v1"

  defp client do
    Req.new(
      base_url: @api,
      auth: {:bearer, System.fetch_env!("THUNDERBIT_API_KEY")},
      receive_timeout: 60_000
    )
  end
end

ページを Distill する

def distill(url) do
  client()
  |> Req.post!(url: "/distill", json: %{url: url})
  |> Map.fetch!(:body)
  |> get_in(["data", "markdown"])
end

構造化データを Extract する

def extract(url, schema) do
  client()
  |> Req.post!(url: "/extract", json: %{url: url, schema: schema})
  |> Map.fetch!(:body)
  |> Map.fetch!("data")
end

extract("https://example.com/product/iphone-15-pro", %{
  type: "object",
  properties: %{
    name: %{type: "string"},
    price: %{type: "number"}
  },
  required: ["name", "price"]
})

Batch を Oban で

非同期に並列展開するなら、ジョブを Oban でキューに積み、Phoenix エンドポイントで Webhook コールバックを受けます。

def submit_batch(urls) do
  client()
  |> Req.post!(url: "/batch/distill", json: %{
    urls: urls,
    webhook: %{
      url: "#{MyApp.Endpoint.url()}/webhooks/distill",
      secret: System.fetch_env!("WEBHOOK_SECRET")
    }
  })
end

Phoenix コントローラ側で Webhook 署名を検証してください —— Webhooks を参照。

公式 Elixir SDK は開発中です —— もう少しお待ちください。