gpt4 book ai didi

php - 谷歌翻译 API v2、v3 PHP

转载 作者:行者123 更新时间:2023-12-04 15:45:22 25 4
gpt4 key购买 nike

我刚开始使用 BING 翻译 API 将少量翻译成他们支持的大多数语言,效果很好。

有一个 GitHub 项目包含用于向 Microsoft 调用 API 的简单 PHP 代码。大多数情况下,您只需要 API key ,并且可以非常轻松地对其进行自定义。

Text-Translation-API-V3-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;
}

$requestBody = array (
array (
'Text' => $text,
),
);
$content = json_encode($requestBody);
$result = Translate ($host, $path, $key, $params, $content);
// Note: We convert result, which is JSON, to and from an object so we can pretty-print it.
// We want to avoid escaping any Unicode characters that result contains. See:
// http://php.net/manual/en/function.json-encode.php
$json = json_encode(json_decode($result), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;

我也有一个谷歌云帐户,我正在寻找一些谷歌支持但 BING 不支持的语言的类似内容。对于 v2,调用 Google 返回翻译并不难。

我发现这个 GitHub 项目似乎适用于带有 API key 的 v2 API 调用,但不幸的是,我认为它现在是按服务收费的程序?

google-cloud-php-translate

如果您有 API key ,这似乎也能很好地工作。如果您使用的是 v3,他们显然更新了库和支持。您可以从命令行进行 CURL 调用,他们的网站上记录了其中的一些内容,但我正在寻找一种使用 PHP 文件进行调用的方法。

require 'vendor/autoload.php';   
use Google\Cloud\Translate\TranslateClient;

$translate = new TranslateClient([
'key' => 'APIKEY'
]);

// Translate text from english to french.
$result = $translate->translate('Hello world!', [
'target' => 'fr'
]);

echo $result['text'] . "\n";

// Detect the language of a string.
$result = $translate->detectLanguage('Greetings from Michigan!');

echo $result['languageCode'] . "\n";

// Get the languages supported for translation specifically for your target language.
$languages = $translate->localizedLanguages([
'target' => 'en'
]);

foreach ($languages as $language) {
echo $language['name'] . "\n";
echo $language['code'] . "\n";
}

// Get all languages supported for translation.
$languages = $translate->languages();

foreach ($languages as $language) {
echo $language . "\n";
}

不确定这是否可能,但我能想到的最好的方法是基于命令行 CURL 的类似方法,但身份验证是错误的并且失败了。我的项目/服务凭据确实有 .json 文件。 ${PROJECT_ID} 我认为是该帐户的项目 ID,我不确定 Bearer $(gcloud auth application-default print-access-token) 。有一些关于如何通过 CLI 获取它的说明,但是有没有办法通过 PHP 文件获取它?就像我说的,v2 版本工作正常。

$ch = curl_init();   
curl_setopt($ch, CURLOPT_URL, "https://translation.googleapis.com/v3beta1/projects/${PROJECT_ID}/locations/global:detectLanguage");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n mimeType: 'text/plain',\n content: 'Omnia Gallia est divisa in tres partes'\n}");
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = 'Authorization: Bearer $(gcloud auth application-default print-access-token)';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
} else {
echo $result;
}
curl_close ($ch);

这里可能有线索,但它讨论了导出凭据文件的路径并从命令行而不是从服务器运行 PHP 脚本。

Google Cloud Translate API Samples

最佳答案

我不喜欢使用客户端库,所以我没有安装 Google PHP library .据我所知,使身份验证起作用的唯一方法是实际完成整个 Oauth2 过程。我认为 PHP 库会为您处理其中的一部分,但这段代码应该作为一个独立的解决方案工作。

首先,确保您已经设置了 Google Cloud Platform 帐户,然后创建一个项目,然后启用 Translation API,之后,在创建和配置 OAuth 2.0 客户端之前创建和配置 API key (确保您输入正确的重定向 url)。没什么! ;-)

如果您成功地解决了所有这些问题,那么您就可以开始了!

该页面有效地将用户重定向到他们刚刚所在的同一页面,但在 url 中包含 GET 请求的结果。响应包含一个代码,可用于发出另一个 GET 请求以检索访问 token ,获得访问 token 后,您可以发出 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;
}

另外,我找到了this tutorial很有帮助。

关于php - 谷歌翻译 API v2、v3 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55996377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com