首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP - Google翻译版本2不支持PHP curl,是什么导致了403返回错误?

PHP - Google翻译版本2不支持PHP curl,是什么导致了403返回错误?
EN

Stack Overflow用户
提问于 2012-12-15 21:13:08
回答 1查看 518关注 0票数 0

我之前使用了ZF第一个旧函数,但不知何故ZF失败了,然后我做了单元测试模块。

我正在尝试使用谷歌翻译v2,但它再也不能工作了,是谷歌停止了公共使用的服务,还是PHP Bug或其他非常混乱的地方。

总是返回403和下面这两个函数。

你知道哪里出问题了吗?

代码语言:javascript
复制
<?php
## Test: How to's
/*
$ php tst.php 
403

$ curl http://ajax.googleapis.com/ajax/services/language/translate -d "v=1.0&q=dog&langpair=en|ru" -H "Referer: http://google.com"
{"responseData": null, "responseDetails": "Please use Translate v2.  See http://code.google.com/apis/language/translate/overview.html", "responseStatus": 403}sun@sun-M14xR2:/var/www/html/vooyz.com/unittest$ 

*/

// V1 - Old not working
function googleTranslatePostV1($text, $destLang = 'nl', $srcLang = 'en') {
  $url = 'http://ajax.googleapis.com/ajax/services/language/translate';
  $http_response = '';
  $text = urlencode($text);
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_REFERER, !empty($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "");
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, "v=1.0&q=" . $text . "&langpair=$srcLang|$destLang");
  $http_response = curl_exec($ch);
  $json = json_decode($http_response, true);

  if ($json['responseStatus'] != '200') {
    return $json['responseStatus'];
  } else {
    return $json['responseData']['translatedText'];
  }
  curl_close($ch);
}

// V2 - Curl way not working
function googleTranslatePostV2($text, $destLang = 'nl', $srcLang = 'en') {
  $url = 'https://www.googleapis.com/language/translate/v2';
  $http_response = '';
  $text = urlencode($text);
  $postArr = array('key' => 'sdfdsfdsfds',
          'q' => $text,
          'source' => $srcLang,
          'target' => $destLang);

  $ch = curl_init();    
  //curl_setopt($ch, CURLOPT_POSTFIELDS,'hl=en&ie=UTF8&text=-->this+is+a+test<--&langpair=en%7Car');      
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);       
  curl_setopt($ch, CURLOPT_REFERER, !empty($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "");
  curl_setopt($ch, CURLOPT_POST,true);
  curl_setopt($ch, CURLOPT_POSTFIELDS,$postArr);        
  $http_response = curl_exec($ch);

  var_dump($http_response);

  $json = json_decode($http_response, true);

  if ($json['responseStatus'] != '200') {
    return $json['responseStatus'];
  } else {
    return $json['responseData']['translatedText'];
  }
  curl_close($ch);
}


// V2 - Google way
function googleTranslateV2Method1($text, $destLang = 'nl', $srcLang = 'en') {
  require_once 'google/src/Google_Client.php';
  require_once 'google/src/contrib/Google_TranslateService.php';
  $client = new Google_Client();
  $client->setApplicationName('Google Translate PHP Starter Application');
  $client->setDeveloperKey('dsfdsfdsf');
  $service = new Google_TranslateService($client);

  //$langs = $service->languages->listLanguages();
  //print "<h1>Languages</h1><pre>" . print_r($langs, true) . "</pre>";
  $translations = $service->translations->listTranslations($text, 'hi');

  return $translations;
}

echo googleTranslatePostV1("V1: " . "How are you?") . "\n";
echo googleTranslatePostV2("V2: " . "How are you?") . "\n";
echo googleTranslateV2Method1("V2: " . "How are you?") . "\n";


?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-15 21:22:32

代码语言:javascript
复制
$ curl http://ajax.googleapis.com/ajax/services/language/translate -d "v=1.0&q=dog&langpair=en|ru" -H "Referer: http://google.com"

{"responseData": null, "responseDetails": "Please use Translate v2.  See http://code.google.com/apis/language/translate/overview.html", "responseStatus": 403}

http://code.google.com/apis/language/translate/overview.html

Google Translate API是一项付费服务。有关详细信息,请参阅定价和常见问题页面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13892492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档