サイトの更新情報をPINGサーバに送信する方法

ブログなどのサイト更新情報をpingサーバに送信する方法です。
ページが更新された時や新規投稿された時にpingサーバにお知らせすることができます。
[参考記事] サイトマップ(sitemap.xml)のつくり方とちょっとしたテクニック

現在、稼働していると思われるping送信先サーバの一覧
サンプルコード
アメブロでのping送信の設定方法
FC2ブログでのping送信の設定方法

pingを送信すると、送信先のサーバはHTMLページを確認してRSSリンクからRSSファイルを取得して更新情報を確認します。
このためpingを送信する場合は、まずRSSフィードを作成してHTMLにリンクを張り付けます。
[参考記事] RSS 2.0の作り方

ブログサービスの創世記にはpingサーバはたくさんありましたが、多くのping送信先はサービスを終了しています。
Yahoo!JAPANの送信先サーバも2014年7月でサービスを終了しているようです。
http://api.my.yahoo.co.jp/RPC2

現在、稼働していると思われるping送信先サーバの一覧

http://blogsearch.google.co.jp/ping/RPC2
http://blogsearch.google.com/ping/RPC2
http://ping.dendou.jp/
http://ping.bloggers.jp/rpc/
http://ping.fc2.com
http://ping.freeblogranking.com/xmlrpc/
http://pingoo.jp/ping/
http://rpc.reader.livedoor.com/ping
http://rpc.weblogs.com/RPC2
http://www.bloglines.com/ping
http://www.blogpeople.net/servlet/weblogUpdates
http://rpc.pingomatic.com/
http://blog.goo.ne.jp/XMLRPC
http://xping.pubsub.com/ping/
http://news.atode.cc/rssdaily.php
http://blogranking.net/
http://www.blogmura.com/
http://ping.rss.drecom.jp/
http://www.blogoon.net/

サンプルコード

PINGの送信にはweblogUpdates.pingにサイト名・サイトURLが記載されたXMLファイルを送信先サーバにPOST送信します。
送信先のサービスが終了することを想定に入れたほうがいいです。

<?php

// 送信先の設定
$ping_servers = array();
$ping_servers[] = "http://ping.dendou.jp/";
$ping_servers[] = "http://blogsearch.google.co.jp/ping/RPC2";
$ping_servers[] = "http://blogsearch.google.com/ping/RPC2";
$ping_servers[] = "http://ping.bloggers.jp/rpc/";
$ping_servers[] = "http://ping.fc2.com";
$ping_servers[] = "http://ping.freeblogranking.com/xmlrpc/";
$ping_servers[] = "http://pingoo.jp/ping/";
$ping_servers[] = "http://rpc.reader.livedoor.com/ping";
$ping_servers[] = "http://rpc.weblogs.com/RPC2";
$ping_servers[] = "http://www.bloglines.com/ping";
$ping_servers[] = "http://www.blogpeople.net/servlet/weblogUpdates";
$ping_servers[] = "http://rpc.pingomatic.com/";
$ping_servers[] = "http://blog.goo.ne.jp/XMLRPC";
$ping_servers[] = "http://xping.pubsub.com/ping/";
$ping_servers[] = "http://news.atode.cc/rssdaily.php";
$ping_servers[] = "http://blogranking.net/";
$ping_servers[] = "http://www.blogmura.com/";
$ping_servers[] = "http://ping.rss.drecom.jp/";
$ping_servers[] = "http://www.blogoon.net/";
//$ping_servers[] = "http://api.my.yahoo.co.jp/RPC2";
//$ping_servers[] = "http://ping.myblog.jp/";
//$ping_servers[] = "http://ping.blogoon.net/";
//$ping_servers[] = "http://ping.namaan.net/rpc/";
//$ping_servers[] = "http://ping.rootblog.com/rpc.php";
$ping_servers = array_unique($ping_servers);

// 自分のサイト名
// (日本語名が使用できない送信先サーバがあります)
$site_name = "pentan.info";
// 自分のサイトURL(RSSファイルのリンクがあるページ)
$site_url = "http://pentan.info/";

// 送信するweblogUpdates.pingのXMLデータ
$post_data = '<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param><value>'.$site_name.'</value></param>
<param><value>'.$site_url.'</value></param>
</params>
</methodCall>
';

$headers = array(
  'Content-Type: application/xml',
  'Content-Length: '.strlen($post_data)
);

$context = stream_context_create(
  array(
    'http'=>array(
      'method'=>'POST',
      'header'=>implode( "\r\n", $headers ),
      'content'=>$post_data
    )
  )
);

foreach($ping_servers as $ping_server){
  $http_response_header = null;
  $response = @file_get_contents($ping_server,false,$context);
}

多くの場合、レスポンスはXMLです。
flerrorが『0』または『false』の場合は送信がエラーがなく送信が成功しています。

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value><struct>
<member><name>flerror</name>
<value><boolean>0</boolean></value>
</member>
<member><name>message</name>
<value><string>Thanks for the ping.</string></value>
</member>
</struct></value>
</param>
</params>
</methodResponse>

PHPでXMLデータを扱うにはsimplexml_load_stringが使えます。
simplexml_load_stringは戻り値がオブジェクト形式なので配列で扱いたい時には変換するといいです。

$res_data = simplexml_load_string($res_data);

レスポンスヘッダーはfile_get_contentsのあとに$http_response_headerで受け取れます。
ただし$http_response_headerはサーバに接続ができなかったときやレスポンスがなかった場合には変数の値が変わりません。
このため直前に接続が成功したfile_get_contentsのときの値と勘違いしてしまいがちなので注意が必要です。
これを防ぐためにfile_get_contentsの直前で$http_response_headerの値をnullなどにしたほうがいいです。
[参考記事] file_get_contentsで$http_response_headerを使用するときの注意点

print_r($http_response_header);

アメブロでのping送信の設定方法

ブログ管理画面の左カラムから『PINGの送信先』を選択します。


送信先のURLを記述して『保存』ボタンを押します。
送信先に指定できるのは20個までです。

FC2ブログでのping送信の設定方法

ブログ管理画面の左カラムから『環境設定』を選択します。


『ブログの設定』から『更新情報(Ping)設定』を選択します。


送信先のURLを記述して『更新』ボタンを押します。

関連記事

スポンサーリンク

表の背景色塗りつぶしが正常に行われない場合がある

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る