Avatar billede losdivinos Nybegynder
05. april 2014 - 23:14 Der er 4 kommentarer

Preg_replace med funktion

Hejsa.

Jeg prøver at tage et URL ud af en string og shorte det med google's url shortener API.

Jeg kan dog ikke rigtigt få det til at virke. Selve shortningen er god nok, men jeg er i tvivl om hvor det rent faktisk går galt.

index.php
$pattern = "/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»""‘']))/";
echo preg_replace($pattern, shortenUrl('$1'), $_POST['message']);

functions.php

function shortenUrl($longUrl){

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

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

curl_close($curlObj);

return print_r($json);
}
Avatar billede erikjacobsen Ekspert
06. april 2014 - 08:41 #1
Du får json tilbage, der ser ca. såadn ud (klippet fra googles docs)

{
"kind": "urlshortener#url",
"id": "http://goo.gl/fbsS",
"longUrl": "http://www.google.com/"
}

Ud af den skal du vel tage "id". Og du skal da ikke sige print_r, med mindre du bare er ved at test det.
Avatar billede erikjacobsen Ekspert
06. april 2014 - 08:42 #2
Avatar billede losdivinos Nybegynder
06. april 2014 - 09:56 #3
Jeg kan sagtens få min shortener til at virke, men jeg prøver at tage det ud af en streng.

FØR:
streng = bla bla testing la http://facebook.com bla mere

EFTER:
streng = bla bla testing la http://goo.gl/39GUE3 bla mere


Jeg prøvede at decode Json til et array, men hvis jeg prøvede at returne $json['id']; sagde den at den ikke kunne finde det. Hvis jeg dog sendte $json tilbage som array, ville jeg godt kunne echo det med echo preg_replace(blbalbal, balbal, balbal)['id'];
Det giver ikke megen mening for mig.
Avatar billede erikjacobsen Ekspert
06. april 2014 - 14:54 #4
Du skal nok kigge på http://php.net/preg_replace_callback
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester