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:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | <?php |
| 02 | //indstillinger |
| 03 | $blogUrl='http://din blog url'; //din blog url |
| 04 | $blogName='Din blog titel'; //blog titel |
| 05 | /** |
| 06 | * Et script til at pinge blog indexes - enten via curl eller fsock |
| 07 | * @Application: Martin Blog Ping v1.0 |
| 08 | * @Author: Martin Nielsen mail[at]martin-nielsen[dot]com |
| 09 | * @URL: http://martin-nielsen.com |
| 10 | * Usage: blogPing('http://dinblogurl.com','Blog navn'); |
| 11 | * @param string url til din blog |
| 12 | * @param string din blogs navn/titel |
| 13 | * @param string url der skal pinges |
| 14 | * @return string ok eller fejlbesked |
| 15 | */ |
| 16 | function blogPing($blogUrl,$blogName,$pingUrl) { |
| 17 | $timeout = 20; //hvor lang tid vil vi vente på svar |
| 18 | $urlDele = parse_url($pingUrl); //parse vores pingurl |
| 19 | if(!isset($urlDele['host'])) { //hvis ikke en url - returner fejl |
| 20 | return '<span style="color:red"><strong>FEJL:</strong> '.$pingUrl. er ikke en url</span> |
| 21 | ; |
| 22 | } |
| 23 | //forbered url til fsocket løsning i tilfælde af cURL ikke er hjemme |
| 24 | $host = $urlDele['host']; //host |
| 25 | $port = (isset($urlDele['port']) ? $urlDele['port'] : 80); |
| 26 | $sti = (isset($urlDele['path']) ? $urlDele['path'] : '/'); //sti |
| 27 | $sti.= (isset($urlDele['query']) ? '?' . $urlDele['query'] : ''); //querystring |
| 28 | //xml kald |
| 29 | $xmlRequest ='<?xml version="1.0"?>'."\n"; |
| 30 | $xmlRequest.='<methodCall>'."\n"; |
| 31 | $xmlRequest.='<methodName>weblogUpdates.ping</methodName>'."\n"; |
| 32 | $xmlRequest.='<params>'."\n"; |
| 33 | $xmlRequest.='<param><value><string>'.htmlspecialchars($blogName).'</string></value></param>'."\n"; |
| 34 | $xmlRequest.='<param><value><string>' . htmlspecialchars($blogUrl) . '</string></value></param>'."\n"; |
| 35 | $xmlRequest.='</params>'."\n"; |
| 36 | $xmlRequest.='</methodCall>'; |
| 37 | //hvis curl er installeret |
| 38 | if(function_exists('curl_init')) { |
| 39 | //curl kald |
| 40 | $cPing = curl_init(); //start curl |
| 41 | //curl options |
| 42 | curl_setopt($cPing,CURLOPT_URL,$pingUrl); |
| 43 | curl_setopt($cPing,CURLOPT_RETURNTRANSFER,1); |
| 44 | curl_setopt($cPing,CURLOPT_HTTPHEADER,array('Content-Type: text/xml')); |
| 45 | curl_setopt($cPing, CURLOPT_POST,1); |
| 46 | curl_setopt($cPing,CURLOPT_POSTFIELDS,$xmlRequest); |
| 47 | curl_setopt($cPing, CURLOPT_TIMEOUT, $timeout); |
| 48 | $responseContent = curl_exec($cPing); //udfør kald |
| 49 | $responseCode = curl_getinfo($cPing); //hent header info |
| 50 | $responseCode = $responseCode['http_code']; |
| 51 | curl_close($cPing); //luk curl |
| 52 | } else{ |
| 53 | //old school fsock |
| 54 | if(!$fp = @fsockopen($host, $port, $errno, $errstr, $timeout)) { //hvis vi ikke kan skabe forbindelse til url |
| 55 | return '<span style="color:red"><strong>FEJL:</strong> '.$pingUrl. kunne ikke kontaktes</span> |
| 56 | ; |
| 57 | } else{ |
| 58 | $responseCode=''; |
| 59 | } |
| 60 | socket_set_timeout($fp, $timeout); //sæt timeout |
| 61 | //opbyg vores kald |
| 62 | $request = "POST $sti HTTP/1.0\r\n" . |
| 63 | "Host: $host\r\n" . |
| 64 | "Content-Type: text/xml\r\n" . |
| 65 | "Content-Length: " . strlen($xmlRequest) . "\r\n" . |
| 66 | "\r\n" . |
| 67 | $xmlRequest; |
| 68 | //send data |
| 69 | fputs($fp, $request); |
| 70 | //hent svar ud |
| 71 | $responseContent = ''; |
| 72 | while (!feof($fp)) { |
| 73 | $responseContent .= fgets($fp, 1024); |
| 74 | } |
| 75 | fclose($fp); |
| 76 | } |
| 77 | //håndter svar |
| 78 | preg_match('#<name>message</name>s*<value>(s*<string>)?([^</]*)(</string>s*)?</value&g t;#i', $responseContent, $msg); |
| 79 | preg_match('#<name>flerror</name>s*<value>(s*<boolean>)?([^</]*)(</boolean>s*)?</value >#i', $responseContent, $msg2); |
| 80 | if($responseCode != 200 && !stristr($responseContent,'200 OK')) { |
| 81 | return <span style="color:red"><strong>FEJL:</strong> kunne ikke kontaktes</span> |
| 82 | ; |
| 83 | } else if($msg2[2]==1) { |
| 84 | return '<span style="color:red"><strong>Der opstod en fejl:</strong> '.$msg[2].</span> |
| 85 | ; |
| 86 | } else{ |
| 87 | return ' - PING OK<br/>'; |
| 88 | } |
| 89 | } |
| 90 | // Array med ping urls |
| 91 | $pingUrls = array( |
| 92 | 'http://blogbot.dk/io/xml-rpc.php', |
| 93 | 'http://rpc.weblogs.com/RPC2', |
| 94 | 'http://overskrift.dk/ping/', |
| 95 | 'http://rpc.twingly.com/', |
| 96 | 'http://blogsearch.google.com/ping/RPC2', |
| 97 | 'http://rpc.technorati.com/rpc/ping', |
| 98 | 'http://ping.feedburner.com', |
| 99 | 'http://api.moreover.com/ping', |
| 100 | 'http://api.my.yahoo.com/RPC2', |
| 101 | 'http://api.my.yahoo.com/rss/ping', |
| 102 | 'http://bblog.com/ping.php', |
| 103 | 'http://blog.goo.ne.jp/XMLRPC', |
| 104 | 'http://ping.bitacoras.com', |
| 105 | 'http://ping.bloggers.jp/rpc/', |
| 106 | 'http://ping.myblog.jp', |
| 107 | 'http://ping.syndic8.com/xmlrpc.php', |
| 108 | 'http://ping.weblogalot.com/rpc.php', |
| 109 | 'http://pingoat.com/goat/RPC2', |
| 110 | 'http://rpc.icerocket.com:10080/', |
| 111 | 'http://rpc.pingomatic.com/', |
| 112 | 'http://topicexchange.com/RPC2', |
| 113 | 'http://www.bitacoles.net/ping.php', |
| 114 | 'http://www.blogdigger.com/RPC2', |
| 115 | 'http://www.blogpeople.net/servlet/weblogUpdates', |
| 116 | 'http://www.blogsnow.com/ping', |
| 117 | 'http://www.overskrift.dk/ping/', |
| 118 | 'http://www.popdex.com/addsite.php', |
| 119 | 'http://wasalive.com/ping/', |
| 120 | 'http://xping.pubsub.com/ping/' |
| 121 | ); |
| 122 | //gennemløb vores pingurls og ping dem |
| 123 | foreach ($pingUrls as $pingUrl) { |
| 124 | echo 'Pinger: '.$pingUrl; |
| 125 | flush(); |
| 126 | echo blogPing($blogUrl,$blogName,$pingUrl); |
| 127 | } |
| 128 | ?> |
Håber funktionen kan bruges - filen kan også hentes her: PHP Blog Ping v1.0
Links i dette indlæg
kommentarer
Men som altid, super arbejde du har lavet der Martin.
Link til seneste blogindlæg: PHP - Fejl rapportering
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
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
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
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
skriv kommentar
Felter markeret med gult og * er påkrævet
Pingbacks
Hvis du linker til en af mine blog artikler fra et blogsystem der udsender pings vil du få et gratis do-follow link fra mig, du kna også twitte om en post og få et link til din twitter profil (Jeg forbeholder mig dog retten til at slette eller nofollow spam :P)











