Current section
Files
Jump to
Current section
Files
lib/deepl_api_helper.ex
defmodule DeeplApiHelper do
@moduledoc """
include the body which is send to deepl and the http client request function, right now
this module is really basic because only include the json for make short text translations
"""
@deepl_hostname "https://www2.deepl.com"
@deepl_endpoint "/jsonrpc"
def build_json_body(text, target, source, beginning) do
Poison.encode!(%{
jsonrpc: "2.0",
method: "LMT_handle_jobs",
id: 1,
params: %{
jobs: [
%{
kind: "default",
raw_en_sentence: text,
de_sentence_beginning: beginning
}
],
lang: %{
user_preferred_langs: ["EN"],
source_lang_user_selected: source,
target_lang: target
},
priority: -1
}
})
end
@doc """
this function make the http request and decode the json response, extracting the translation
"""
def make_request(text, target, source, beginning \\ 1) do
builded_body = build_json_body(text, target, source, beginning)
with {:ok, response} <-
HTTPoison.post(@deepl_hostname <> @deepl_endpoint, builded_body, [
{"Content-Type", "application/json"},
{"Cache-Control", "no-cache"}
]),
%{body: body, status_code: 200} <- response do
result =
body
|> Poison.decode!()
|> get_in(["result", "translations"])
|> Enum.at(0)
|> Map.get("beams")
|> Enum.sort(&(&1["score"] < &2["score"]))
|> Enum.at(0)
|>IO.inspect(label: "1")
|> Map.get("postprocessed_sentence")
|> (&Regex.replace(~r/^\d+\)\s*/,&1,"")).()
|> (&Regex.replace(~r/\d+\.*\s*/,&1,"")).()
{:ok, result}
else
error -> {:error, "error #{error}"}
end
# , {"Content-Length", byte_size(body)}
end
end