水菜巻のメモ的ななにか。

主にLinuxやAndroid、Web関連について書いています。自作アプリや趣味のことも書くかもしれません。The雑食ブログ。

はてなブログで更新Pingを送信したら彼女ができました ~手動Ping実装法~

f:id:miz7maki:20150301013843p:plain

カノジョさんはできませんでしたが、更新Pingの送信に成功しました!

Pentan.infoさんを参考にさせていただきました。

サイトの更新情報をPINGサーバに送信する方法 - [サンプルコード/PHP] ぺんたん info


以下のコードをphpの使用できるサーバにアップロードし、アクセスします。

下記コードの送り先PingサーバURL、ブログ名、ブログURLを修正します。

送り先Pingサーバは多すぎると使用するサーバがタイムアウトで500エラー吐くので、5サイトくらいにしています。

パーミッションは755あたりでいいんじゃないでしょうか。

<?php

// Pingサーバ
$ping_servers = array(
  "http://ping.dendou.jp/",
  "http://blogsearch.google.co.jp/ping/RPC2",
  "http://blogsearch.google.com/ping/RPC2",
  "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/"
);
// url重複回避
$ping_servers = array_unique($ping_servers);

// ブログ名(海外でもOKな英語表記が無難です)
$blog_name = "(ブログ名)";
// ブログURL
$blog_url = "(ブログURL)";

// 送信ヘッダに含めるXML(weblogUpdates.ping)
$content = '<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param><value>'.$blog_name.'</value></param>
<param><value>'.$blog_url.'</value></param>
</params>
</methodCall>
';

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

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

foreach($ping_servers as $ping_server){
  $http_response_header = null;
  $response = file_get_contents($ping_server,false,$context);
  echo $ping_server,"...",$response,"<br>";
}

結果はこんな感じです。

http://ping.dendou.jp/... flerror 0 message Thanks for the ping. 
http://blogsearch.google.co.jp/ping/RPC2... flerror0 messageThanks for the ping. 
http://blogsearch.google.com/ping/RPC2... flerror0 messageThanks for the ping. 
http://ping.bloggers.jp/rpc/...DB error
http://ping.fc2.com... flerror 0 message Thanks for your ping. 
http://ping.freeblogranking.com/xmlrpc/... flerror 0 message Thanks for the ping. 
http://pingoo.jp/ping/... flerror 0 message Thanks for the ping. 


素のXMLだと1サイトあたり下記のような形式で返ってきます。

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


戻り値の"flerror"はPingサーバ側の更新通知の受信処理でエラーが発生したかどうかを意味します。

なのでこの値が0ならば「ちゃんと受け取ったよ!」というサインになります。

もしこれが1だとうまく受け取れてないことになります。

戻り値の"message"はPingサーバからのメッセージなのですが、たいていの場合は"Thanks for the ping."です。

「ありがとよ!だがネットに反映させるかはこちら次第だがな!」みたいな感じでしょうかねw


とりあえず、更新Ping通知はこれでできます。


あとはクローラBOTや訪問者がアクセスすると更新Ping通知されてしまうので、クロール回避設定や認証画面入れ、自分専用にすることで、スパムPing扱いされないように工夫したらいいかもですね。

更新Ping送りまくるのも控えましょう。

気になる方は是非お試しあれ!

ピンポン(1) (ビッグコミックス)

ピンポン(1) (ビッグコミックス)