【PHP】PINGサーバーへURLを送信!インデックス登録を促進するサンプル
無料ブログなど記事を投稿することでGoogleなどに更新情報を送信する仕組み【PING送信】があります。ワードプレスは、設定>投稿設定の更新情報サービスで指定することができます。
更新情報サービスやPING送信の正式名称は、XML-RPC通知サービスです。
更新情報を受け付けてくれるサーバーはGoogle以外にもあります。2017年8月時点で受け付けてくれたPING送信先は以下の通りです。
http://blogsearch.google.co.jp/ping/RPC2
http://blogsearch.google.com/ping/RPC2
http://ping.blogranking.net/
http://ping.dendou.jp/
http://ping.fc2.com/
http://ping.freeblogranking.com/xmlrpc/
http://ping.feedburner.com/
http://ping.rss.drecom.jp/
http://pingoo.jp/ping/
http://rpc.pingomatic.com/
http://rpc.reader.livedoor.com/ping
http://services.newsgator.com/ngws/xmlrpcping.aspx
http://xping.pubsub.com/ping/
http://www.blogpeople.net/ping/
http://www.blogpeople.net/servlet/weblogUpdates
Contents
PING送信の仕組み
更新情報を受け取るサーバーの細かな仕組みは未調査です。
更新情報を受け取ったサーバーは、独自のインデックスを更新します。
BOTが巡回してRSSファイル、サイトマップファイルにアクセスし更新するものもあります。
更新を受け付けるサーバーへ送るフォーマットは、XML形式(weblogUpdates.ping)です。URLとタイトルを含む単純なXMLフォーマットです。
実際に送った後、インデックスする、しないは、更新情報サーバーの仕組みに依存してしまいます。
送信元とURLのIPアドレスが違ったり、記事の内容が薄かったりするとインデックスされないこともあります。
XML形式のフォーマットは、PHPでは1行(xmlrpc_encode_request関数)で作ることができるので覚える必要はありません。
xmlrpc_encode_request関数が用意されていない環境の場合は、http://www.weblogs.com/api.htmlを参考にしてください。
PING送信の効果
おまじない程度かと感じています。
数多くの記事、サイトがPING送信しています。やっていないよりマシ程度
【PHP】PINGサーバーへURLを送信!インデックス登録を促進するサンプル
これからご紹介するサンプルコードは、ブラウザからアクセスし、URL、タイトルを指定してPING送信することができるサンプルです。
サンプルソースをコピペし、「weblogUpdate.php」ファイルを作ります。
同一IPから送信させるため、サイトを公開しているサーバーへ配置してください。
注意事項
IPアドレスによる簡単なセキュリティ(2行目から6行目)を施しています。
不要な場合は、削除してください。
指定する場合は、あなたの環境のWAN側IPアドレスに書き換えてください。
もしわからない場合は、このコード
1 |
<?php print_r($_SERVER["REMOTE_ADDR"]); ?> |
をサーバに配置してブラウザでアクセスしてください。あなたの環境のWAN側IPアドレスがわかります。通常PrivateIPアドレスです。そのためタイミングや時間でIPアドレスが変化することがあります。forbiddenになった場合は、再度確認して指定します。
PING送信サンプルコード
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
<?php if($_SERVER["REMOTE_ADDR"] != "あなたの環境のWAN側IPアドレス" ){ header('HTTP/1.0 403 Forbidden'); echo 'You are forbidden!'; exit(0); } $PINGLIST_STRING = <<< EOM http://blogsearch.google.co.jp/ping/RPC2 http://blogsearch.google.com/ping/RPC2 http://ping.blogranking.net/ http://ping.dendou.jp/ http://ping.fc2.com/ http://ping.freeblogranking.com/xmlrpc/ http://ping.feedburner.com/ http://ping.rss.drecom.jp/ http://pingoo.jp/ping/ http://rpc.pingomatic.com/ http://rpc.reader.livedoor.com/ping http://services.newsgator.com/ngws/xmlrpcping.aspx http://xping.pubsub.com/ping/ http://www.blogpeople.net/ping/ http://www.blogpeople.net/servlet/weblogUpdates EOM; class UrlPing { public $_ping_list ; function __construct(){ global $PINGLIST_STRING ; $this->_ping_list = explode( "\n", $PINGLIST_STRING ); } public function run( $url , $title ){ $xml = xmlrpc_encode_request( 'weblogUpdates.ping', array($title,$url), array('encoding' => 'UTF-8') ); foreach( $this->_ping_list as $ping_site_url ){ $this->curl( $ping_site_url, $xml ); } } function curl( $ping_site_url, $xml){ $ch = curl_init( $ping_site_url); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml ); curl_setopt($ch, CURLOPT_POST,true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml", 'Content-length: ' . strlen($xml)) ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $res = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE ); curl_close($ch); if( $code == 200 ){ echo "<li>OK ${ping_site_url}".PHP_EOL; echo "<textarea>${res}</textarea>"; } else{ echo "<li>NG ${ping_site_url}".PHP_EOL; echo "<textarea>${res}</textarea>"; } } function request( $ping_site_url, $xml ){ $context = stream_context_create(array('http' => array( 'method' => "POST", 'header' => "Content-Type: text/xml\r\nContent-length: " . strlen( $xml ), 'content' => $xml ))); $file = file_get_contents($ping_site_url, false, $context); $response = xmlrpc_decode($file); if ($response && xmlrpc_is_fault($response)) { echo "<li>NG ${ping_site_url}".PHP_EOL; } else { echo "<li>OK ${ping_site_url}".PHP_EOL; } } } $_url = ""; $_title =""; if( is_array($_POST) && array_key_exists("execute",$_POST) ){ $_url = trim($_POST["url"]); $_title = $_POST["title"]; } ?><!DOCTYPE html><html class="ja"><head> </head> <body> <form method="POST" action="./weblogUpdates.php"> <h2>PING送信設定</h2> <table><tr><td><b style="color:red">【必須】</b>URL:</td><td><input type="text" size="80" place-holder="http[s]://domain/[page]" name="url" value="<?php echo $_url; ?>"><br>PINGサーバーへ送信したいあなたのURLを1つ指定します。</td></tr> <tr><td><b style="color:red">【必須】</b>タイトル:</td><td><input type="text" size="80" place-holder="タイトル" name="title" value="<?php echo $_title; ?>"><br>上記URLのタイトルを指定します。</td></tr> </table> <ol> <li>PINGサーバーへ送信したいURL、タイトルを入力します。<p>日本語ドメインの場合、ascii文字列(xn--・・・)のドメインで指定してください。</p> <li>「<button name="execute">実行ボタン</button>」でPINGサーバーへURL、タイトルを送信します。 <p>PINGサーバーを変更する場合は、$PINGLIST_STRINGを編集し、FTPでこのファイルを再アップロードしてください。</p> <li>PINGサーバーからHTTPコード200(正常)で"OK"を表示します。正常以外の場合"NG"を表示します。 <li>PINGサーバーは受け取ったURLを元に、即時、または別のタイミングであなたのサイトのRSSファイルにアクセスします。 <p>あなたのサイトのHTMLはRSSに対応していますか?対応しているかよくわからない場合は、サイトのHTMLソースを開いて以下記述があることを確認してください。 <link rel="alternate" type="application/rss+xml" title="RSS" href="RSSのURL" /></p> </ol> <p style="text-align:center"><button name="execute">実行ボタン</button></p> </form> <h2>PING送信結果</h2> <ul><?php if( strlen($_url) != 0 && strlen($_title) !=0 ){ $ping送信 = new UrlPing(); $ping送信->run( $_url , $_title ); }else if( is_array($_POST) && array_key_exists("execute",$_POST) ){ echo '<li><b sytle="color:red">URLまたはタイトルが未入力です。</b>'; }?> </ul> </body> </html> |
まとめ
ここまで【PHP】PINGサーバーへURLを送信!インデックス登録を促進するサンプルコードをご紹介しました。
このコードでアクセスするPINGサーバは、瞬間で応答していることを確認しています。
PINGサーバーは閉鎖されることもあります。
アクセスには30秒のタイムアウトを指定しているので、時間がかかるようになったサーバーは削除すると快適です。