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($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! :-)

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)