Packages

Inofficial Erlang/OTP client application for the official DeepL API Version 2

Current section

Files

Jump to
deeperl src deeperl_client.erl
Raw

src/deeperl_client.erl

%% @private
-module(deeperl_client).
-export([
call/2
]).
call({HttpcProfile, AuthKey}, {{Method, RequestData}, ResultFun}) ->
Request = case RequestData of
{Route, Headers, ContentType, Body} ->
{url(AuthKey, Route), Headers ++ headers(AuthKey), ContentType, Body};
{Route, Headers} -> {url(AuthKey, Route), Headers ++ headers(AuthKey)};
{Route} -> {url(AuthKey, Route), headers(AuthKey)}
end,
{ok, Response} = httpc:request(Method, Request, [], [], HttpcProfile),
{{_, StatusCode, StatusMessage}, _, ResponseBody} = Response,
case StatusCode of
400 -> {error, badrequest, StatusMessage};
401 -> {error, authfailed, StatusMessage};
403 -> {error, forbidden, StatusMessage};
404 -> {error, notfound, StatusMessage};
413 -> {error, requestsize, StatusMessage};
415 -> {error, notsupported, StatusMessage};
429 -> {error, toomanyrequests, StatusMessage};
456 -> {error, quotaexceeded, StatusMessage};
503 -> {error, resourceunavailable, StatusMessage};
529 -> {error, toomanyrequests, StatusMessage};
Code when Code >= 500 -> {error, internalerror, {StatusCode, StatusMessage}};
Code when Code >= 200, Code =< 299 -> ResultFun(ResponseBody)
end.
host(AuthKey) ->
case string:right(AuthKey, 3) of
":fx" -> "api-free.deepl.com";
_ -> "api.deepl.com"
end.
url(AuthKey, Route) ->
"https://" ++ host(AuthKey) ++ Route.
headers(AuthKey) ->
[
{"Authorization", "DeepL-Auth-Key " ++ AuthKey},
{"User-Agent", "deeperl/dev"}
].