ん~気が付けば11月、プログラム関係の投稿を最後にしたのが5月。
そう滞っております、技術系の記事投稿がね!
仕事の忙しさも多少落ち着いて❓きてはいるので、ちょっとずつあれやりたい~これやりたい~ができる時間ができてきているので、今後は多少増えるのではと考えております・・・
目次
前置き
とある英語サイトの最新情報を通知するプログラムを作成しているんですが、僕は英語が読めないため、通知されても雰囲気しかつかめない❕という問題に直面しました。
ただ世の中には翻訳ツールがいくつもあり、WEB上で翻訳することができます。
であれば翻訳APIぐらいあるだろうということで今回目を付けたのが、
DeepL API
というわけです。
アカウント登録
「DeepL API」とかでググると「https://www.deepl.com/ja/pro-api」がヒットするので、そこからスタート。
「無料で始める」をクリックします。
プラン選択が出てきますが、Freeプラン一択!
※プランごとの特徴については割愛します
次にメールアドレスを登録します、
右の表記は何なんですかね。。。
次にパスワードを入力します。
諸々の個人情報を登録します。
クレカ情報についてはFreeプランでも必須の様子、、、というか最近のAPIは基本必須❓クレカがないとAPIが使えない時代ということでしょうか。。。
最後にチェックを入れて登録を完了です。メルマガはいらなければチェックしなくても大丈夫。
無事登録完了!!
簡単な翻訳の実施(PHP)
無事登録が完了したので、早速APIを使っていこうと思います。
翻訳するための最低限のデータは自動的に生成されているので、APIキーを確認したらプログラムを書くだけ。
APIリクエスト情報の確認
ホーム画面の様子、タブからAPIキーをクリックします。
APIキーが既に一つ生成されているので、これを使えば翻訳を実行することが可能です。
次にAPIをつかうためのリクエスト方法について確認します。
フッタに技術資料(https://developers.deepl.com/docs/ja)のリンクがあるので、そこから上記のようなページにジャンプします。
このページが日本語じゃないのは多少不安になりましたが、書いてあることは単純なので高卒の頭でもなんとかなりました。
とりあえず左の「Your first API request」からAPIリクエストの方法を確認できます。
The example below uses our API Pro endpoint https://api.deepl.com. If you're an API Free user, remember to update your requests to use https://api-free.deepl.com instead.
とあるように、注意点としては、
Freeプランの場合、APIリクエスト先ドメインは”https://api.deepl.com”ではなく、”https://api-free.deepl.com”になるということです。
これを見落として1時間ぐらい無駄な時間を過ごしました。。。
APIリクエストのプログラム
ではAPIリクエストのプログラムを書いていきます。
いくつか種類があるんですが、今回はPHPのcurlで書いていきます。
サンプルコード
<?php
class Deepl{
private $url = "https://api-free.deepl.com/v2/translate";
private $key = "[APIキー]";
private $lang = "JA";//JAで日本語に翻訳
public function translateText($text){
$text = preg_replace("/’/","'",$text);
$data = array(
"text" => array($text)
,"target_lang" => $this->lang
);
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL ,$this->url);
curl_setopt($curl,CURLOPT_CUSTOMREQUEST ,"POST");
curl_setopt($curl,CURLOPT_POSTFIELDS ,json_encode($data));
curl_setopt($curl,CURLOPT_HTTPHEADER ,array(
"Authorization: DeepL-Auth-Key ".$this->key
,"Content-Type: application/json"
));
$json = curl_exec($curl);
$result = json_decode($json);
print_r($result);
}
}
$deepl = new Deepl();
$deepl->translateText("The PostgreSQL Global Development Group today announced the release of PostgreSQL 17, the latest version of the world's most advanced open source database.");
?>
DeepL内のPHPのAPIリクエスト例はライブラリを使うサンプルコードが書かれていたんですが、ちょっと面倒と思いcurlで書いてます。
英語の文章を日本語に翻訳するサンプルになってます。
使っている文章はPostgreSQLのNews(https://www.postgresql.org/)です。
個のリクエストの結果は下記のようなもの、
{"translations":[
{ "detected_source_language":"EN"
,"text":"PostgreSQLグローバル開発グループは本日、世界で最も先進的なオープンソースデータベースの最新バージョンであるPostgreSQL 17のリリースを発表しました。"
}
]}
翻訳前後で見比べるとなかなかいい感じです。
■翻訳前の文章(英語)
The PostgreSQL Global Development Group today announced the release of PostgreSQL 17, the latest version of the world's most advanced open source database.
■翻訳後の文章(日本語)
PostgreSQLグローバル開発グループは本日、世界で最も先進的なオープンソースデータベースの最新バージョンであるPostgreSQL 17のリリースを発表しました。
ちなみにAPIを使わずWEBブラウザで使えるDeepLで翻訳すると、下記のように同じ文章になりました。
これが常に同じになるのかどうかはちょっと不明。
トラブルシューティング
endpointが違うと返ってくる
{"message":"Wrong endpoint. Use https://api-free.deepl.com"}
freeプランを使ってるのにfreeじゃないプランのURLを使っている可能性があります。
Not Fountエラーが返ってくる
<!DOCTYPE html><html lang="en"><title>404 Not Found</title><body><h1>404 Not Found</h1></body></html>1
リクエスト先のURLが間違っている可能性があります。
※ちなみに僕は”https://api-free.deepl.com/v2/translate”とリクエストするべきところを、”https://api-free.deepl.com/”としていたことに気づかず沼にハマりました。
サポートしていない言語だと返ってくる
{"message":"Value for 'target_lang' not supported."}1
APIリクエスト時の"target_lang"が不正な可能性があります。
英語→日本語しか訳していないため、他の言語についてはあまり検証してないんですが、技術資料のRetrieve language(https://developers.deepl.com/docs/ja/api-reference/languages)で記載されている"language"であれば通るのかと思います。
何も返ってこない。。。
APIキーやリクエストURLが誤っていると何もレスポンスがありません。
まとめ
DeepLのAPIについて記載してきたわけですが、今までのAPIの中で一番導入が簡単だったかも、、、APIのできることがそこまで多くないからかもしれません、boxが面倒すぎるだけかもしれませんが、あれの後だと驚くくらい簡単でした。
使いどころはどこにあるのかについては、
「とりあえず僕はPostgreSQLのニュースをウォッチするか!」というモチベが最近あるので、そのニュースの翻訳に使っています。日本語のニュースがあれば話は速いんですけどね。。。