Til Top

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

kommentarer

Skrevet d. 10. Maj 2009 23:18 af Jan Ebsen
Bruger billede Yaj, så kom den endelig, lige efter jeg havde lavet min egen ;)

Men som altid, super arbejde du har lavet der Martin.
Skrevet d. 11. Maj 2009 09:24 af Martin Nielsen
Bruger billede Du skal også arbejde lidt jo :D

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
Skrevet d. 3. September 2009 13:21 af Randi Rehmeier
Bruger billede 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
Skrevet d. 3. September 2009 14:37 af Randi Rehmeier
Bruger billede 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
Skrevet d. 6. September 2009 13:04 af Martin Nielsen
Bruger billede 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.
Skrevet d. 7. September 2009 21:32 af Randi Rehmeier
Bruger billede Tusind tak! :-)
Skrevet d. 15. August 2010 12:06 af Nora
Bruger billede 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
Skrevet d. 15. August 2010 13:34 af Martin Nielsen
Bruger billede 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
Skrevet d. 15. August 2010 16:32 af Nora
Bruger billede Tak for hjelpen Martin :)
Skrevet d. 15. August 2010 16:37 af Nora
Bruger billede Et spørsmål mer: hva for et blogscript bruger du på den her side, er det et du har laget selv?
Skrevet d. 16. August 2010 10:00 af Martin Nielsen
Bruger billede 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
Skrevet d. 19. August 2010 12:45 af Nora
Bruger billede Får en lille fejl i scriptet:

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?
Skrevet d. 20. August 2010 20:20 af Martin Nielsen
Bruger billede 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.
Skrevet d. 24. August 2010 20:19 af Nora
Bruger billede Tak for all hjelp Martin, der er ingen flere php notice fejl nu.

Der pinget kommer frem virker det udmærket :)

skriv kommentar

Felter markeret med gult og * er påkrævet







Sikkerheds kode


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)