为了账号安全,请及时绑定邮箱和手机立即绑定

Google翻译API v2,v3 PHP

Google翻译API v2,v3 PHP

PHP
墨色风雨 2021-05-13 16:19:50
我刚刚开始使用BING翻译API将少量翻译成大多数受支持的语言,并且效果很好。有一个GitHub项目,其中包含用于向Microsoft进行API调用的简单PHP代码。您通常只需要API密钥,并且可以很容易地对其进行自定义。https://github.com/MicrosoftTranslator/Text-Translation-API-V3-PHP/blob/master/Translate.php// NOTE: Be sure to uncomment the following line in your php.ini file.// ;extension=php_openssl.dll// **********************************************// *** Update or verify the following values. ***// **********************************************// Replace the subscriptionKey string value with your valid subscription key.$key = 'ENTER KEY HERE';$host = "https://api.cognitive.microsofttranslator.com";$path = "/translate?api-version=3.0";// Translate to German and Italian.$params = "&to=de&to=it";$text = "Hello, world!";if (!function_exists('com_create_guid')) {  function com_create_guid() {    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),        mt_rand( 0, 0xffff ),        mt_rand( 0, 0x0fff ) | 0x4000,        mt_rand( 0, 0x3fff ) | 0x8000,        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )    );  }}function Translate ($host, $path, $key, $params, $content) {    $headers = "Content-type: application/json\r\n" .        "Content-length: " . strlen($content) . "\r\n" .        "Ocp-Apim-Subscription-Key: $key\r\n" .        "X-ClientTraceId: " . com_create_guid() . "\r\n";    // NOTE: Use the key 'http' even if you are making an HTTPS request. See:    // http://php.net/manual/en/function.stream-context-create.php    $options = array (        'http' => array (            'header' => $headers,            'method' => 'POST',            'content' => $content        )    );    $context  = stream_context_create ($options);    $result = file_get_contents ($host . $path . $params, false, $context);    return $result;}我也有一个Google Cloud帐户,并且正在寻找Google支持BING不支持的几种语言的类似内容。对于v2,打电话给Google来返回翻译并不难。我发现这个GitHub项目似乎可用于带有API密钥的v2 API调用,但是不幸的是,我认为这是一个收费服务程序吗?
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

我非常不喜欢使用客户端库,因此没有安装Google PHP库。据我所知,使身份验证正常工作的唯一方法是实际完成整个Oauth2流程。我认为PHP库可以为您处理其中的一些问题,但是此代码应作为独立的解决方案工作。

首先,请确保您已设置Google Cloud Platform帐户,然后创建一个项目,然后启用Translation API,此后,请先创建并配置API密钥,然后再创建和配置OAuth 2.0客户端(确保您输入了正确的重定向网址)。没什么!;-)

如果您成功解决了所有问题,那么您应该很好!

该页面有效地将用户重定向到他们所在的同一页面,但将GET请求的结果包含在url中。响应中包含一个代码,该代码可用于发出另一个GET请求以检索访问令牌,一旦获得访问令牌,就可以发出POST请求以执行实际的翻译。

<?php


$clientId = "{your client id}";

$clientSecret = "{your client secret}";

$clientRedirectURL = "{your redirect URL}";

$login_url = 'https://accounts.google.com/o/oauth2/v2/auth?scope=' . urlencode('https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-translation') . '&redirect_uri=' . urlencode($clientRedirectURL) . '&response_type=code&client_id=' . $clientId . '&access_type=online';


if (!isset($_GET['code'])){

    header("location: $login_url");

} else {

    $code = filter_var($_GET['code'], FILTER_SANITIZE_STRING);  

    $curlGet = '?client_id=' . $clientId . '&redirect_uri=' . $clientRedirectURL . '&client_secret=' . $clientSecret . '&code='. $code . '&grant_type=authorization_code';

    $url = 'https://www.googleapis.com/oauth2/v4/token' . $curlGet;


    $ch = curl_init($url);      

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        

    curl_setopt($ch, CURLOPT_POST, 1);      

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    $data = curl_exec($ch); 

    $data = json_decode($data, true);   

    curl_close($ch);


    $accessToken = $data['access_token'];

    $apiKey = "{your api key}";

    $projectID = "{your project id}";


    $target = "https://translation.googleapis.com/v3/projects/$projectID:translateText?key=$apiKey";


    $headers = array( 

        "Content-Type: application/json; charset=utf-8", 

        "Authorization: Bearer " . $accessToken,

        "x-goog-encode-response-if-executable: base64",

        "Accept-language: en-US,en;q=0.9,es;q=0.8"

    );


    $requestBody = array();

    $requestBody['sourceLanguageCode'] = "en";

    $requestBody['targetLanguageCode'] = "pt";

    $requestBody['contents'] = array("So, I guess this thing works?");

    $requestBody['mimeType'] = "text/plain";


    $ch = curl_init($target);

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    curl_setopt($ch, CURLOPT_POST, true);

    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestBody)); 

    $data = curl_exec($ch);


    curl_close($ch);

    echo $data;

}

另外,我发现本教程非常有帮助。


查看完整回答
反对 回复 2021-05-28
  • 2 回答
  • 0 关注
  • 572 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信