Итак, у меня есть небольшой скрипт PHP для генерации коротких ссылок, он работает, но иногда я получаю эту ошибку:
Неопределенное свойство: stdClass :: $ id «,» file «: ShortLink.php», «line»: 31
Это мой сценарий:
<?php
class ShortLink {
public static function generateShortLink($longUrl)
{
//This is the URL you want to shorten
$apiKey = 'MY_API_KEY';
//Get API key from : http://code.google.com/apis/console/
$postData = array('longUrl' => $longUrl, '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);
curl_close($curlObj);
return $json->id;
}
}
Когда я начал работать с этим сценарием 6 или 7 месяцев назад, у меня не было этой ошибки, но теперь я начинаю получать ее, и я понятия не имею, почему, поэтому, пожалуйста, если у кого-то есть идея, я буду очень признателен.
Обновить :
Когда я vardump
мой $json
я понимаю :
{ ["domain"]=> string(11) "usageLimits" ["reason"]=> string(26) "userRateLimitExceededUnreg" ["message"]=> string(40) "User Rate Limit Exceeded. Please sign up" ["extendedHelp"]=> string(36) "https://code.google.com/apis/console" } } ["code"]=> int(403) ["message"]=> string(40) "User Rate Limit Exceeded. Please sign up" }}
Так что я подумал, ограничил ли Google услугу сокращения Google?
class ShortLink {
public static function generateShortLink($longUrl)
{
//This is the URL you want to shorten
$apiKey = 'YOUR_SERVER_API_KEY';
//Get API key from : http://code.google.com/apis/console/
$postData = array('longUrl' => $longUrl, '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);
curl_close($curlObj);
if(!is_object($json))
{
return(false);
}
return $json->id;
}
}
$api = new ShortLink();
$shorturlid=$api->generateShortLink('http://avecsrthgdgnb.avcd');
echo $shorturlid;
Вы используете новую консоль, затем включите URL Shortener API.
Иногда из-за сетевого curl не возвращается с ответом в течение 30 секунд (ограничение по умолчанию в php для cmd до конца)
Попробуйте изменить ограничение по времени в php.ini или если оно не находится под вашим контролем, или вы не хотите изменять его для всех попыток php bool set_time_limit ( int $seconds )
перед звонком curl_exec
Обновить:
Я вижу, что в json нет поля id, которое возвращается.
{ ["domain"]=> string(11) "usageLimits"["reason"]=> string(26) "userRateLimitExceededUnreg"["message"]=> string(40) "User Rate Limit Exceeded. Please sign up"["extendedHelp"]=> string(36) "https://code.google.com/apis/console"}
}
["code"]=> int(403)
["message"]=> string(40) "User Rate Limit Exceeded. Please sign up"}
}
И если вы внимательно посмотрите, был достигнут лимит вашего пользователя Посмотреть здесь Для получения подробной информации об ограничении использования Google API. (Вы можете попробовать другой IP, то есть другой компьютер или другой ключ API, и один и тот же код может начать работать).
Надеюсь это поможет