For godt et år siden skrev jeg en simpelt funktion til fx at pinge overskrift.dk (Blog Ping v0.5) – Denne funktion brugte cURL til at udsende pings med. Dengang lovede jeg faktisk en god gammeldags fsocket løsning, til dem som ikke havde curl på deres server – dette blev dog aldrig rigtigt til noget. Nu er den her så, PHP Blog Ping Version 1.0 – som bruger cURL hvis curl er installeret og ellers bruger fsock:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
<?php
//indstillinger
$blogUrl='http://din blog url'; //din blog url
$blogName='Din blog titel'; //blog titel
/**
* Et script til at pinge blog indexes - enten via curl eller fsock
* @Application: Martin Blog Ping v1.0
* @Author: Martin Nielsen mail[at]martin-nielsen[dot]com
* @URL: http://martin-nielsen.com
* Usage: blogPing('http://dinblogurl.com','Blog navn');
* @param string url til din blog
* @param string din blogs navn/titel
* @param string url der skal pinges
* @return string ok eller fejlbesked
*/
function blogPing($blogUrl,$blogName,$pingUrl) {
$timeout = 20; //hvor lang tid vil vi vente på svar
$urlDele = parse_url($pingUrl); //parse vores pingurl
if (!isset($urlDele['host'])) { //hvis ikke en url - returner fejl
return '<span style="color:red"><strong>FEJL:</strong> '.$pingUrl.' er ikke en url</span><br />';
}
//forbered url til fsocket løsning i tilfælde af cURL ikke er hjemme
$host = $urlDele['host']; //host
$port = (isset($urlDele['port']) ? $urlDele['port'] : 80); //port?
$sti = (isset($urlDele['path']) ? $urlDele['path'] : '/'); //sti
$sti.= (isset($urlDele['query']) ? '?' . $urlDele['query'] : ''); //querystring
//xml kald
$xmlRequest ='<?xml version="1.0"?>'."\n";
$xmlRequest.='<methodCall>'."n";
$xmlRequest.='<methodName>weblogUpdates.ping</methodName>'."n";
$xmlRequest.='<params>'."n";
$xmlRequest.='<param><value><string>'.htmlspecialchars($blogName).'</string></value></param>'."n";
$xmlRequest.='<param><value><string>' . htmlspecialchars($blogUrl) . '</string></value></param>'."n";
$xmlRequest.='</params>'."n";
$xmlRequest.='</methodCall>';
//hvis curl er installeret
if (function_exists('curl_init')) {
//curl kald
$cPing = curl_init(); //start curl
//curl options
curl_setopt($cPing,CURLOPT_URL,$pingUrl);
curl_setopt($cPing,CURLOPT_RETURNTRANSFER,1);
curl_setopt($cPing,CURLOPT_HTTPHEADER,array('Content-Type: text/xml'));
curl_setopt($cPing, CURLOPT_POST,1);
curl_setopt($cPing,CURLOPT_POSTFIELDS,$xmlRequest);
curl_setopt($cPing, CURLOPT_TIMEOUT, $timeout);
$responseContent = curl_exec($cPing); //udfør kald
$responseCode = curl_getinfo($cPing); //hent header info
$responseCode = $responseCode['http_code'];
curl_close($cPing); //luk curl
} else {
//old school fsock
if (!$fp = @fsockopen($host, $port, $errno, $errstr, $timeout)) { //hvis vi ikke kan skabe forbindelse til url
return '<span style="color:red"><strong>FEJL:</strong> '.$pingUrl.' kunne ikke kontaktes</span><br />';
} else {
$responseCode='';
}
socket_set_timeout($fp, $timeout); //sæt timeout
//opbyg vores kald
$request = "POST $sti HTTP/1.0rn" .
"Host: $hostrn" .
"Content-Type: text/xmlrn" .
"Content-Length: " . strlen($xmlRequest) . "rn" .
"rn" .
$xmlRequest;
//send data
fputs($fp, $request);
//hent svar ud
$responseContent = '';
while (!feof($fp)) {
$responseContent .= fgets($fp, 1024);
}
fclose($fp);
}
//håndter svar
preg_match('#<name>message</name>s*<value>(s*<string>)?([^</]*)(</string>s*)?</value>#i', $responseContent, $msg);
preg_match('#<name>flerror</name>s*<value>(s*<boolean>)?([^</]*)(</boolean>s*)?</value>#i', $responseContent, $msg2);
if ($responseCode != 200 && !stristr($responseContent,'200 OK')) {
return '<span style="color:red"><strong>FEJL:</strong> kunne ikke kontaktes</span><br />';
} else if(isset($msg2[2]) && $msg2[2]==1) {
return '<span style="color:red"><strong>Der opstod en fejl:</strong> '.$msg[2].'</span><br />';
} else {
return ' - PING OK<br/>';
}
}
// Array med ping urls
$pingUrls = array(
'http://blogbot.dk/io/xml-rpc.php',
'http://rpc.weblogs.com/RPC2',
'http://overskrift.dk/ping/',
'http://rpc.twingly.com/',
'http://blogsearch.google.com/ping/RPC2',
'http://rpc.technorati.com/rpc/ping',
'http://ping.feedburner.com',
'http://api.moreover.com/ping',
'http://api.my.yahoo.com/RPC2',
'http://api.my.yahoo.com/rss/ping',
'http://bblog.com/ping.php',
'http://blog.goo.ne.jp/XMLRPC',
'http://ping.bitacoras.com',
'http://ping.bloggers.jp/rpc/',
'http://ping.myblog.jp',
'http://ping.syndic8.com/xmlrpc.php',
'http://ping.weblogalot.com/rpc.php',
'http://pingoat.com/goat/RPC2',
'http://rpc.icerocket.com:10080/',
'http://rpc.pingomatic.com/',
'http://topicexchange.com/RPC2',
'http://www.bitacoles.net/ping.php',
'http://www.blogdigger.com/RPC2',
'http://www.blogpeople.net/servlet/weblogUpdates',
'http://www.blogsnow.com/ping',
'http://www.overskrift.dk/ping/',
'http://www.popdex.com/addsite.php',
'http://wasalive.com/ping/',
'http://xping.pubsub.com/ping/'
);
//gennemløb vores pingurls og ping dem
foreach ($pingUrls as $pingUrl) {
echo 'Pinger: '.$pingUrl;
flush();
echo blogPing($blogUrl,$blogName,$pingUrl);
}
?> |
Håber funktionen kan bruges – filen kan også hentes her: PHP Blog Ping v1.0
Yaj, så kom den endelig, lige efter jeg havde lavet min egen 😉
Men som altid, super arbejde du har lavet der Martin.
Link til seneste blogindlæg: PHP – Fejl rapportering
Du skal også arbejde lidt jo 😀
Nej nu var der efterhånden en håndfuld der pev over ikke at ha curl så jeg tænkte jeg hellere måtte opdatere
Link til seneste blogindlæg: PHP Blog Ping Version 1.0 – Nu med fsocket løsning
Hej Martin!
Som blogger med hosting på blogspot.com læste jeg med ret stor interesse dette post. Blogspot pinger ikke automatisk ligesom WordPress f.eks. gør, så jeg har ledt efter en mulighed for at sætte ping-funktionen op manuelt. Men hvor gør jeg af den php-kode, du har skrevet, så det virker?
Mvh
Randi
Hej Martin!
Som blogger med hosting på blogspot.com læste jeg med ret stor interesse dette post. Blogspot pinger ikke automatisk ligesom WordPress f.eks. gør, så jeg har ledt efter en mulighed for at sætte ping-funktionen op manuelt. Men hvor gør jeg af den php-kode, du har skrevet, så det virker?
Mvh
Randi
Hej Randi – For at du kan bruge ovenstående script, er det nødvendigt med en server hvorpå du kan afvikle PHP. Du kan fx oprette et gratis webhotel på http://dinhost.net/
Her kan du så uploade ovenstående kode i fx blogping.php og så ændre indstillingerne så de passer med din blogspot blog -og så er det bare at gå ind på blogping.php hver gang du har postet på blogspot.
Link til seneste blogindlæg: Anmeldelse af Inglourious Basterds – Et Tarantino mesterværk
Tusind tak!
Hej Martin
Tak for all informasjon og script. Har selv pinget via forskjellige bloggsystemer, men er usikker på hva man pinger når det gjøres manuelt. Pinger man hovedsiden, hovedsidens rss feed eller seneste innlegg?
$blogUrl=’ ? ‘; //din blog url
$blogName=’ ? ‘; //blog titel
Hej Nora,
Det er normalt blot din hovedside der skal pinges, så finder de forskellige service selv ud af hvilke rss feeds der er. Mange ping services kræver dog du først registrerer din side hos dem, og evt tilmelder rss feed.
Mvh
Martin
Link til seneste blogindlæg: Anmeldelse af Inception – Christopher Nolans mesterværk?
Tak for hjelpen Martin
Et spørsmål mer: hva for et blogscript bruger du på den her side, er det et du har laget selv?
Det var så lidt Nora, glad for at kunne hjælpe
Ja hele platform er hjemmelavet, med de fordele og ulemper det giver, hvis du er interesseret kan du læse lidt mere om det her
Mvh
Martin
Link til seneste blogindlæg: Anmeldelse af Inception – Christopher Nolans mesterværk?
Får en lille fejl i scriptet:
PHP Notice: Undefined offset: 2 in /www/public_html/ping.php on line 82
De fleste ping gir også “FEJL: kunne ikke kontaktes”, kun de “store” (Google, Yahoo, etc) virkede uden problemer.
I php er:
Skal der åbnes mer i php?
Hej Nora, jeg har lige rettet scriptet til så du ikke burde få notice fejlen.
Kan se mange af de pingservices der eksisterede da jeg skrev dette blogindlæg simpelthen ikke eksisterer længere – har ikke lige nogen opdateret liste, men skal nok lige kigge lidt rundt.
Link til seneste blogindlæg: Anmeldelse af the Expendables
Tak for all hjelp Martin, der er ingen flere php notice fejl nu.
Der pinget kommer frem virker det udmærket
Pingback: PHP Blog Ping v0.5 - nemmere end nemt | Martin Nielsens nørdede tanker