谷歌API - 使用PHP进行URL缩短

20

以下是我的代码。网址缩短服务可以工作,但是当我插入$POST时就无法工作。有人知道如何通过查看代码来修复这个问题吗?

// This is the URL you want to shorten
$longUrl = 'http://www.mysite.com/XXXXX/XX/$_POST['qrname']';

// Get API key from : http://code.google.com/apis/console/
$apiKey = 'MyAPIKey';

$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);

echo 'Shortened URL is: '.$json->id;

在检查之后,删除或注释掉 echo 'Shortened URL is: '.$json->id; !它有效。 - Nirav Ranpara
1
我不知道你在API文档中找到这段代码的位置,但还是谢谢! - Macbernie
8个回答

11

试着按照以下方式操作:

$longUrl = 'http://www.mysite.com/XXXXX/XX/'.$_POST['qrname'];

以上方法可行。


9
你的问题与cURL无关,而是关于在PHP中连接变量和字符串,参见http://php.net/manual/de/language.types.string.php。 - Gottlieb Notschnabel
请问为什么我不能使用OP的Php代码来缩短URL?它返回错误信息domain": "usageLimits", "reason": "dailyLimitExceededUnreg", "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."?我已经检查了我的Http Referrer、配额等,一切看起来都很好... - Mavichow

7

您正在将php变量放在单引号之间传递,因此它不会被解析。请将它放在双引号之间传递,如:

$longUrl = "http://www.mysite.com/XXXXX/XX/$_POST['qrname']";

或者像这样连接

$longUrl = 'http://www.mysite.com/XXXXX/XX/'.$_POST['qrname'];

2
我更喜欢这个答案,因为它不仅解决了问题,还告诉了提问者为什么。 - Gottlieb Notschnabel

7
$longUrl = "http://www.xxxxxxx.com";
    $postData = array('longUrl' => $longUrl);
    $jsonData = json_encode($postData);

    //4
    $curlObj = curl_init(); 
    curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url?key=yourappkey');
    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);

    //5
    $response = curl_exec($curlObj);

    $json = json_decode($response);
//       echo "<pre>";
//    print_r($json);exit;
    //6
    curl_close($curlObj);

    //7
    if(isset($json->error)){
        echo $json->error->message;
    }else{
        echo $json->id;
    }   

6

4
对我来说这很有用,一些现有文档已经过时了。 - MarcF

1
<?php 
//URL Shortening Functions( Just copy & paste below code in your application)
function short_url($longUrl){
        $apiKey = '******************'; // put your GOOGLE API SHORTENING KEY 
        $postData = array('longUrl' => $longUrl, 'key' => $apiKey);
        $curlObj = curl_init();
        $jsonData = json_encode($postData);
        curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url?key='.$postData['key']);
        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);
        $json = json_decode($response);
        curl_close($curlObj);
        if(isset($json->error) || $json == null){
             return $longUrl; // retrun same url in case of error or null response
        }else{
            return $json->id; // return shorted url
        }
    }
// use this function here
$longUrl = 'https://www.w3schools.com/';
echo short_url($longUrl); // print short url

// If you want to return short url to long url use below function
function long_url($shortUrl){
        $apiKey = '***********'; // put your GOOGLE API SHORTENING Key
        $params = array('shortUrl' => $shortUrl, 'key' => $apiKey,'projection' => "ANALYTICS_CLICKS");
        $final_url = 'https://www.googleapis.com/urlshortener/v1/url?'.http_build_query($params);
        $curlObj = curl_init($final_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'));
        $response = curl_exec($curlObj);
        $json = json_decode($response);
        curl_close($curlObj);
        if(isset($json->error) || $json == null){
            return $shortUrl;
        }else{
            return $json->longUrl;
        }
    }
//Function Use here
echo "<br>"; // For next line
$shortUrl = ''; // put the short url generated from above function
echo long_url($shortUrl); // get long url
?>

1

我还没有足够的声望点来发表评论,但是我通过替换该行代码已经成功地使其工作:

echo 'Shortened URL is: '.$json->id;

with:

$shortLink = get_object_vars($json);
echo "Shortened URL is: ".$shortLink['id'];

可能是我的php安装有问题,但原始代码一直给我抛出500内部错误。


0

尝试使用这段代码。对我来说它是有效的。

$api_key = 'YOUR_KEY';
$request_data = array(
    'longUrl' => 'YOUR_LONG_URL'
);

$curl_obj = curl_init(sprintf('%s/url?key=%s', 'https://www.googleapis.com/urlshortener/v1', $api_key));
curl_setopt($curl_obj, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_obj, CURLOPT_POST, true);
curl_setopt($curl_obj, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
curl_setopt($curl_obj, CURLOPT_POSTFIELDS, json_encode($request_data));
curl_setopt($curl_obj, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_obj, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($curl_obj);
$json = json_decode($response);
curl_close($curl_obj);

var_dump($json);
die();

0

用以下代码替换$longUrl = 'http://www.example.com/XXXXX/XX/$_POST['qrname']';

$longUrl = 'http://www.example.com/XXXXX/XX/{$_POST['qrname']}';


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接