Current section

Files

Jump to
deeplixir lib deepl_api_helper.ex
Raw

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
body
|>Poison.decode!()
|> get_in(["result","translations"])
|> Enum.at(0)|>Map.get("beams")
|>Enum.sort(&(&1["score"]>&2["score"]))
|>Enum.at(0)
|>Map.get("postprocessed_sentence")
|>(&Regex.run(~r/\d+. (.+)/,&1)).()|>Enum.at(1)
else
error -> "error #{error}"
end
#, {"Content-Length", byte_size(body)}
end
end