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(isset($msg2[2]) && $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
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
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?
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?
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | 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:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | allow_url_fopen = On |
| 02 | allow_url_include = On |
Skal der åbnes mer i php?
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
Der pinget kommer frem virker det udmærket :)
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)









