0

Ping(ブログ更新通知)の送信

Posted by Koumei on 2010年7月16日 in 未分類 |

 ブログが更新されたというのを通知することをpingという。
 この場合はトラックバックピングの略だろう。

 pingは本来「ピン」で、何かと言うとソナーの音である。
 潜水艦が出す音で、周りの状況を音で知るために出しているものだ。
 これ(ping)が帰ってくれば、何かがあるということになる。

 更新通知のpingだが、形式が決まっている。

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param><value>サイトのタイトル</value></param>
<param><value>サイトのURL</value></param>
</params>
</methodCall>

 
 方法として、サーバから送信することと、各パソコンから送信することがある。
 負荷分散でパソコンからJavascriptで送信しようと思ったのだが、やめた。
 どうやら、送信してきた相手のIPアドレスが、サーバのIPアドレスと違うとスパムにされてしまうことがあるらしいからだ。
 つまり、ベストはサーバから発信することである。

 pingを出してどのくらいで反映されるかだが、1分以内だった。
 このブログからgoogleへpingして、検索してみたら、「1分以内」の更新として検索結果に表示されていた。
 まあ、偶然検索に引っかかっただけなのだが、早いのにびっくりした。

 後は送信先のURLに対し、ソケットを開いて送信して結果を受け取るだけである。
 そのあたりは次回へ・・・と思ったが、実際書いたのは参考にしたコードをほとんど変更しなかった。
 
 $pingstrには送る内容、$hostにはサーバ、$pathにはそれ以降のアドレスを指定する。
 例えば「http://blogsearch.google.co.jp/ping/RPC2」なら、「blogsearch.google.co.jp」が$hostで、「ping/RPC2」が$pathとなる。
 要はparse_url(PHP関数)によって得られる内容である。
 送信内容はhttp://www.xmlrpc.com/weblogsComに詳しく出ている。

$sock = fsockopen($host, 80, $errno, $errstr, 60);
if ($sock != FALSE)	{
fputs($sock, "POST " . $path . " HTTP/1.1\r\n");
fputs($sock, "Host: " . $host. "\r\n");
fputs($sock, "Content-type: text/xml\r\n");
fputs($sock, "Content-length: " . strlen($pingstr); . "\r\n");
fputs($sock, "\r\n");
fputs($sock, $pingstr);

$res = '';
while (!feof($sock))	$res .= fgetc($sock);
fclose($sock);

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

キャプチャ *

Copyright © 2009-2018 Koumei Soft 開発ログ All rights reserved.
This site is using the Desk Mess Mirrored theme, v2.5, from BuyNowShop.com.