@codenerd på twitter Mit seneste tweet:

PHP Blog Ping v0.5 – nemmere end nemt

Ny version med fsocket support: PHP Blog Ping v1.0

Hvis du har et hjemmestrikket blog system, som udgiver RSS feeds, er det tænkeligt du enten ikke pinger nogen services eller sidder og gør det manuelt. Dette er tidskrævende, men selvfølgelig nødvendigt for at få lidt flere besøgende. Jeg har selv tidligere siddet og pinget 3-4 forskellige services manuelt, men det gør jeg ikke længere, og synes da heller ikke du skal gøre det. Derfor får du her en funktion i PHP som kan gøre arbejdet for dig.

Funktionen følger XML-RPC specifikationen og bruger metoden weblogUpdates.ping. Har valgt ikke at bruge weblogUpdates.extendedPing, da flere services endnu ikke understøtter denne metode.

Funktionen

PHP
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
<?php
/*
* Application: Martin Blog Ping v0.5
* Author: Martin Nielsen mail[at]martin-nielsen[dot]com
* URL: http://martin-nielsen.com
* Released: April 03, 2008
* Description: Et script til at pinge blog indexes
* Usage: blogPing('http://dinblogurl.com','Blog navn');
*/
//indstillinger
$blogUrl='http://dinblogurl.dk'; //din blog url
$blogName='Din blog titel'; //blog titel
function blogPing($blogUrl,$blogName,$pingUrl) {
    //xml
    $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>';    
    //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, 20);
    $responseContent = curl_exec($cPing); //udfør kald
    $responseCode = curl_getinfo($cPing); //hent header info
    curl_close($cPing); //luk curl
    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['http_code']!=200) {
        return '<span style="color:red"><strong>FEJL:</strong> kunne ikke kontaktes</span><br />';
    } elseif($msg2[2]==1) {
        return '<span style="color:red"><strong>Der opstod en fejl:</strong> '.$msg[2].'</span><br />';
    } else {
        return ' - PING OK<br/>';
    }
}?>

Brug

Her vil vi fx pinge overskrift.dk:

PHP
1
<?php echo blogPing($blogUrl,$blogName,'http://overskrift.dk/ping/');?>

Pinge flere services

Ved at lave en array med ping urls kan vi hurtigt pinge x antal ping services:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// Array med ping urls
$pingUrls = array(
'http://blogbot.dk/io/xml-rpc.php',
    'http://overskrift.dk/ping/',
    'http://rpc.twingly.com/',
    'http://blogsearch.google.com/ping/RPC2'
);
//gennemløb arrayet og kald blogPing for hver pingUrl
foreach ($pingUrls as $pingUrl) {
    echo 'Pinger: '.$pingUrl;
    flush();
    echo blogPing($blogUrl,$blogName,$pingUrl);
}
?>

Her pinger vi fx de fem nok vigtigste services for en dansk blogger

Liste over flere ping services

Anders Saugstrup har samlet en ganske fin liste over ping services som jeg vil gengive her i modificeret form (har frasorteret en håndfuld):

  • 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://blogsearch.google.com/ping/RPC2
  • 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/

Funktionen er til fri afbenyttelse, og som altid hvis der er problemer så bare skriv. Funktionen kræver at cURL er installeret på serveren, men hvem ved kan være jeg strikker en god gammeldags fsocket løsning sammen på et tidspunkt.

Hent eksempel

18 kommentarer

  1. Nu kører ejg selv med WordPress, ligesom størstedelen af alle bloggere, men en utrolig brugbar artikel hvis man en dag skal bruge noget andet, og som du siger, ikke har lyst til at pinge manuelt.
    Super artikel.

    Svar på kommentaren
  2. Skrevet af Martin  d. 30/04/2008 kl 06:48

    Ja selvbyg er jo ikke den mest udbredte form for blog-software derude længere, af gode grunde og nogen gange får jeg da også bare lyst til at skrotte det hele og installere en wordpress, men friheden vinder alligevel altid til sidst 😀

    Svar på kommentaren
  3. Skrevet af Jonas  d. 01/05/2008 kl 13:10

    Det er super det der, jeg arbejder selv på at lave en blog, og vil helt klart bruge denne funktion, er der nogle ping services du vil anbefale mere end andre?

    Svar på kommentaren
  4. Skrevet af Martin  d. 01/05/2008 kl 15:02

    Hej Jonas,
    I en lign. diskussion på Saugstrups blog kom vi frem til

        http://blogbot.dk/io/xml-rpc.php
    http://overskrift.dk/ping/
    http://rpc.twingly.com/
    http://blogsearch.google.com/ping/RPC2
    

    Var de vigtigste for en dansk blogger, dvs dem som jeg har taget med i eksemplet omkring at pinge flere services.

    Mvh
    Martin

    Svar på kommentaren
  5. Skrevet af Martin  d. 19/05/2008 kl 12:08

    Hej Steff, og velkommen til,
    Wordpress er der i hvert fald indbygget ping service i, lige en engelsk guide jeg fandt da jeg ikke selv er wordpress bruger:
    Log in to your WordPress weblog.
    Select "Options" from the top menu.
    Select "Writing" from the sub-menu.
    The last option on the page is "Update Services." Add ping server as a new line within the Update Services text box.

    Ved ikke med blogger…

    Svar på kommentaren
  6. Hehe, ja det fungerer sådan set også fint nok, jeg tror næsten det er manuelt spam jeg får – det virker underligt at den ikke bare spammer igennem hvis det var en der decodede billede valideringen.

    Men ja ja det giver da nogle hits 😀 – om det så er kvalitetsbesøg er jo så en helt anden side af sagen

    Svar på kommentaren
  7. hey folkens,
    jeg har lidt forskellige blogs, nogle på blogger og nogle på self-hosted wordpress… pinger de automatisk, eller kan jeg ligge noget script ind i en widget eller noget for at sikre at de vigtigste services bliver pinget?

    /steffmeister

    Svar på kommentaren
  8. Skrevet af Vadskær  d. 18/02/2009 kl 07:02

    Ha ha… De robotter har stadig fat i den lange ende, Martin. Dit spam-filter har da ellers holdt dem fra døren længe.
    Du kan bruge min yderst primitive løsning med to tal. Jeg har – 7-9-13 – endnu ingen spam-problemer.

    Svar på kommentaren
  9. Pingback: PHP Blog Ping Version 1.0 - Nu med fsocket løsning | Martin Nielsens nørdede tanker

Leave a Reply to Kim Andersen Cancel reply

Krævede felter er markeret med *.

*