2012-10-25 15 views
20

Il mio codice è di sotto. Il servizio di accorciamento dell'URL funziona, ma non quando inserisco il mio $POST. Qualcuno sa come risolvere questo mio guardando il codice?API Google - Abbreviazione URL con PHP

// 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; 
+0

Rimuovi o commenta echo 'URL abbreviato è:'. $ Json-> id; dopo il controllo. ! Funziona . –

+1

Non so dove trovi questo codice nel documento API, ma grazie! – Macbernie

risposta

11

provare come di seguito

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

È possibile che questo funzionerà.

+8

Il tuo problema non è niente su cURL, si tratta di concatenare variabili e stringhe in PHP, vedi http://php.net/manual/de/language.types.string.php –

+0

Posso sapere perché non posso usare il codice PHP di OP e abbreviare l'url? Mi viene restituito il messaggio di errore 'dominio": "usageLimits", "reason": "dailyLimitExceededUnreg", "message": "Limite giornaliero per l'utilizzo non autenticato superato. L'uso continuato richiede l'iscrizione. "" Verificerei il mio referente Http, la quota, tutto sembra a posto .... – Mavichow

5

si passa la variabile php tra le virgolette singole in modo che non vengano analizzate. passarlo tra virgolette come

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

O concatinate come questo

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

Preferisco questa risposta a quella di Hackableweb in quanto non risolve il problema, ma dice anche all'OP, *** perché ***! –

1

Non hai ancora punti reputazione abbastanza per commentare, ma ho ottenuto questo lavorando bene sostituendo la linea:

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

con:

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

Potrebbe essere solo l'installazione del mio php, ma la linea originale continuava a generare un errore interno di 500 per me.

6

avete una chiave, ma non lo si utilizza in modo corretto

Si dovrebbe aggiungerlo all'URL, non inviare la chiave nel post

https://www.googleapis.com/urlshortener/v1/url?key='.$apiKey 

prega di controllare https://developers.google.com/url-shortener/v1/url/insert

+4

Questo lo ha risolto per me, alcuni documenti esistenti non sono aggiornati. – MarcF

6
$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; 
    } 
0

Provare con questo codice. Sto lavorando per me.

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