Google URL-Shortener API with API-Key returns “403 - 超出未验证使用的每日限制。”使用 PHP & CURL
Google URL-Shortener API with API-Key returns "403 - Daily Limit for Unauthenticated Use Exceeded." using PHP & CURL
我创建了一个相当简单的脚本,它会为我生成一个随机且唯一的密码来重置用户的密码。因为我讨厌通过电子邮件以纯文本形式发送密码,所以我的脚本将密码转换为图像并存储在我的服务器上。脚本 returns 密码,密码图像,应该使用 Google URL-Shortener API 来缩短密码图像的 URL .
因为这是只在我们办公室使用的东西,而且页面的 URL 不是 public,我选择使用 API-Key 而不是 OAuth 2.0。
它运行良好,然后突然停止提供缩短的 URL。我添加了一些错误处理代码,因此它会显示错误并开始返回此错误:
403 - Daily Limit for Unauthenticated Use Exceeded. Continued use
requires signup.
这是我用来缩短 URL 的函数:
function shortURL($ImgID)
{
// This is the URL to shorten
$ImgURL = 'http://www.mywebsite.com/temp/'.$ImgID.'.jpg';
// Get API key from : http://code.google.com/apis/console/
$apiKey = 'MY_API_KEY'; //browser key
$postData = array('longUrl' => $ImgURL, 'key' => $apiKey);
$jsonData = json_encode($postData);
$curlObj = curl_init();
curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url');
curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curlObj, CURLOPT_HEADER, 0);
curl_setopt($curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
curl_setopt($curlObj, CURLOPT_POST, 1);
curl_setopt($curlObj, CURLOPT_POSTFIELDS, $jsonData);
$response = curl_exec($curlObj);
// Change the response json string to object
$json = json_decode($response);
// Change the response json string to an array
$shortLink = get_object_vars($json);
curl_close($curlObj);
// Error handling
$short = objectToArray($json);
$code = $short['error']['code'];
$message = $short['error']['message'];
return ($shortLink['id']?$shortLink['id']:$code.' - '.$message);
}
就像我说的,它工作正常,然后有一天停止了。我更改了 API 键但没有成功。我已经查看了开发人员控制台中的配额,但我远未达到那里建议的总体或基于每个用户的限制。
我转向这里是因为我的 Google-Fu 让我失望了,而且我无法找到任何解释来解释发生了什么变化以及为什么我以前的工作脚本停止了。
一个有趣的发展......我做了一个小改动:
我将 $postData 数组更改为仅包含 longURL 并将 API 键添加到 CURLOPT_URL 并在刷新原始页面以提取新代码后,它起作用了。
当我转到 goo.gl 并使用 "Activated" API 密钥的用户登录时,它没有显示我创建的最新密钥。
因此,虽然最初的问题似乎已得到解答(我现在已经开始工作了),但我还有两个问题:
- 为什么有效?
- 为什么不显示创建历史
缩短网址?
请参阅此 post
中的答案
您需要将 API 键添加到请求
$apikey = "YOURAPIKEY";
curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url?key='.$apikey);
我创建了一个相当简单的脚本,它会为我生成一个随机且唯一的密码来重置用户的密码。因为我讨厌通过电子邮件以纯文本形式发送密码,所以我的脚本将密码转换为图像并存储在我的服务器上。脚本 returns 密码,密码图像,应该使用 Google URL-Shortener API 来缩短密码图像的 URL .
因为这是只在我们办公室使用的东西,而且页面的 URL 不是 public,我选择使用 API-Key 而不是 OAuth 2.0。
它运行良好,然后突然停止提供缩短的 URL。我添加了一些错误处理代码,因此它会显示错误并开始返回此错误:
403 - Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.
这是我用来缩短 URL 的函数:
function shortURL($ImgID)
{
// This is the URL to shorten
$ImgURL = 'http://www.mywebsite.com/temp/'.$ImgID.'.jpg';
// Get API key from : http://code.google.com/apis/console/
$apiKey = 'MY_API_KEY'; //browser key
$postData = array('longUrl' => $ImgURL, 'key' => $apiKey);
$jsonData = json_encode($postData);
$curlObj = curl_init();
curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url');
curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curlObj, CURLOPT_HEADER, 0);
curl_setopt($curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
curl_setopt($curlObj, CURLOPT_POST, 1);
curl_setopt($curlObj, CURLOPT_POSTFIELDS, $jsonData);
$response = curl_exec($curlObj);
// Change the response json string to object
$json = json_decode($response);
// Change the response json string to an array
$shortLink = get_object_vars($json);
curl_close($curlObj);
// Error handling
$short = objectToArray($json);
$code = $short['error']['code'];
$message = $short['error']['message'];
return ($shortLink['id']?$shortLink['id']:$code.' - '.$message);
}
就像我说的,它工作正常,然后有一天停止了。我更改了 API 键但没有成功。我已经查看了开发人员控制台中的配额,但我远未达到那里建议的总体或基于每个用户的限制。
我转向这里是因为我的 Google-Fu 让我失望了,而且我无法找到任何解释来解释发生了什么变化以及为什么我以前的工作脚本停止了。
一个有趣的发展......我做了一个小改动:
我将 $postData 数组更改为仅包含 longURL 并将 API 键添加到 CURLOPT_URL 并在刷新原始页面以提取新代码后,它起作用了。
当我转到 goo.gl 并使用 "Activated" API 密钥的用户登录时,它没有显示我创建的最新密钥。
因此,虽然最初的问题似乎已得到解答(我现在已经开始工作了),但我还有两个问题:
- 为什么有效?
- 为什么不显示创建历史 缩短网址?
请参阅此 post
您需要将 API 键添加到请求
$apikey = "YOURAPIKEY";
curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url?key='.$apikey);