引続き自分に使えるLINEBotシリーズをひたすら研究中。
海外輸入でサポートに問い合わせることが多いので翻訳できるLINEBotを作ってみた。
翻訳ライブラリ
Google Cloud Translation APIは有料のようなので、Microsoft Translator APIを利用することにした。
200百万文字/月までは無料で利用できるようだ、Microsoftありがとう。
登録方法などはこの記事が詳しい。
Microsoft Translator APIを使ってみる - Qiita
Microsoft Translator APIを使ってみる - Qiita... |
プログラム
プログラムはこの記事をほぼ真似させてもらった。
Microsoft Translator APIを使ってみた - Qiita
Microsoft Translator APIを使ってみた - Qiita... |
日本語が混じっていれば入力は日本語と判定し英語に翻訳、それ以外は逆とした。
callback.php
<?php
require_once('./LINEBotTiny.php');
$channelAccessToken = 'YOUR_ACCESS_TOKEN';
$channelSecret = 'YOUR_SECRET';
$client = new LINEBotTiny($channelAccessToken, $channelSecret);
foreach ($client->parseEvents() as $event) {
switch ($event['type']) {
case 'message':
$message = $event['message'];
switch ($message['type']) {
case 'text':
$client->replyMessage(array(
'replyToken' => $event['replyToken'],
'messages' => array(
array(
'type' => 'text',
'text' => translation($message['text'])
)
)
));
break;
default:
error_log("Unsupporeted message type: " . $message['type']);
break;
}
break;
default:
error_log("Unsupporeted event type: " . $event['type']);
break;
}
};
function translation($text) {
$client_id = "YOUR_ID";
$client_secret = "YOUR_SECRET";
$access_token = getAccessToken($client_id, $client_secret)->access_token;
$text = mb_convert_kana($text, 'KVas');
$from = '';
$to = '';
if (preg_match('/[ぁ-んァ-ヶー一-龠、。]/u',$text)) {
$from = 'ja';
$to = 'en';
}
else{
$from = 'en';
$to = 'ja';
}
return tranlator($access_token, array(
'text' => $text,
'to' => $to,
'from' => $from));
}
function getAccessToken($client_id, $client_secret, $grant_type = "client_credentials", $scope = "http://api.microsofttranslator.com"){
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/",
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(array(
"grant_type" => $grant_type,
"scope" => $scope,
"client_id" => $client_id,
"client_secret" => $client_secret
))
));
return json_decode(curl_exec($ch));
}
function tranlator($access_token, $params){
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => "https://api.microsofttranslator.com/v2/Http.svc/Translate?".http_build_query($params),
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer ". $access_token),
));
preg_match('/>(.+?)<\/string>/',curl_exec($ch), $m);
return $m[1];
}
動作
(追記)
ちょうどこの記事を見て、 ニューラルネット翻訳に対応してみた。
Microsoft Translate API を用いた Slack ニューラルネット翻訳コマンドの実装 - Qiita
Microsoft Translate API を用いた Slack ニューラルネット翻訳コマンドの実装 - Qiita... |