猿问

Google翻译API v2,v3 PHP

我刚刚开始使用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调用,但是不幸的是,我认为这是一个收费服务程序吗?


墨色风雨
浏览 573回答 2
2回答

MM们

我非常不喜欢使用客户端库,因此没有安装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'])){&nbsp; &nbsp; header("location: $login_url");} else {&nbsp; &nbsp; $code = filter_var($_GET['code'], FILTER_SANITIZE_STRING);&nbsp;&nbsp;&nbsp; &nbsp; $curlGet = '?client_id=' . $clientId . '&redirect_uri=' . $clientRedirectURL . '&client_secret=' . $clientSecret . '&code='. $code . '&grant_type=authorization_code';&nbsp; &nbsp; $url = 'https://www.googleapis.com/oauth2/v4/token' . $curlGet;&nbsp; &nbsp; $ch = curl_init($url);&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; curl_setopt($ch, CURLOPT_POST, 1);&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);&nbsp; &nbsp; $data = curl_exec($ch);&nbsp;&nbsp; &nbsp; $data = json_decode($data, true);&nbsp; &nbsp;&nbsp; &nbsp; curl_close($ch);&nbsp; &nbsp; $accessToken = $data['access_token'];&nbsp; &nbsp; $apiKey = "{your api key}";&nbsp; &nbsp; $projectID = "{your project id}";&nbsp; &nbsp; $target = "https://translation.googleapis.com/v3/projects/$projectID:translateText?key=$apiKey";&nbsp; &nbsp; $headers = array(&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "Content-Type: application/json; charset=utf-8",&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "Authorization: Bearer " . $accessToken,&nbsp; &nbsp; &nbsp; &nbsp; "x-goog-encode-response-if-executable: base64",&nbsp; &nbsp; &nbsp; &nbsp; "Accept-language: en-US,en;q=0.9,es;q=0.8"&nbsp; &nbsp; );&nbsp; &nbsp; $requestBody = array();&nbsp; &nbsp; $requestBody['sourceLanguageCode'] = "en";&nbsp; &nbsp; $requestBody['targetLanguageCode'] = "pt";&nbsp; &nbsp; $requestBody['contents'] = array("So, I guess this thing works?");&nbsp; &nbsp; $requestBody['mimeType'] = "text/plain";&nbsp; &nbsp; $ch = curl_init($target);&nbsp; &nbsp; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);&nbsp;&nbsp; &nbsp; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);&nbsp;&nbsp; &nbsp; curl_setopt($ch, CURLOPT_POST, true);&nbsp; &nbsp; curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestBody));&nbsp;&nbsp; &nbsp; $data = curl_exec($ch);&nbsp; &nbsp; curl_close($ch);&nbsp; &nbsp; echo $data;}另外,我发现本教程非常有帮助。
随时随地看视频慕课网APP
我要回答