带有API密钥的Google URL-Shortener API返回" 403 - 超出未经身份验证的使用的每日限制。"使用PHP&卷曲

时间:2015-06-16 21:26:55

标签: curl google-api-php-client api-key google-url-shortener

我创建了一个相当简单的脚本,可以为我生成一个随机且唯一的密码来重置用户'密码。因为我讨厌通过电子邮件将密码作为纯文本发送,所以我的脚本会将密码转换为存储在我服务器上的图像。该脚本返回密码,密码图像,并且应该使用Google URL-Shortener API缩短密码图像的URL。

由于这只是我们办公室使用的内容,并且页面的网址不公开,因此我选择使用API​​-Key而不是OAuth 2.0。

它工作得很好然后突然停止提供缩短的URL。我添加了一些错误处理代码,因此它会显示错误,并开始返回此错误:

  

403 - 超出未经身份验证的使用的每日限制。继续使用   需要注册。

这是我用来获取缩短网址的功能:

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让我失望了,而且我还没有找到任何有关改变的解释以及为什么我以前工作的脚本停止了。

2 个答案:

答案 0 :(得分:2)

请参阅此帖Goo.gl URL Shortener Stopped Working (php/curl)

中的答案

您需要将API密钥添加到请求

 $apikey = "YOURAPIKEY";
 curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url?key='.$apikey);

答案 1 :(得分:1)

一个有趣的发展......我做了一个小改动:

我将$ postData数组更改为仅包含longURL并将API密钥添加到CURLOPT_URL,并在刷新原始页面以提取新代码后,它工作正常。

当我去goo.gl并与用户登录"已激活" API Key,它没有显示我最近创建的那些。

因此,虽然最初的问题似乎得到了回答(我现在已经开始工作了),但我还有两个问题:

  1. 为什么会这样?
  2. 为什么它没有向我展示创建的历史 缩短的网址?