読者です 読者をやめる 読者になる 読者になる

統計分析ソフトRのミニソース集

かゆいところに手が届くようなRのミニソースを作成

はてなブログから各種ブログランキングへのping送信を完全リアルタイム自動化(PHP+mySQL+cron)

はてなブログは,インターフェイスがシンプルでわかりやすく,たいへん使い勝手が良い。

一方で,pingの送信機能がないため,新しい記事を追加したことを各種ブログランキングに通知できないという問題がある。

この問題に対処するため,一般的には以下のような方法が考えられる。

  • PINGOO!のようなサービスを利用して,自動化する。

しかし,毎回手動で送信するのは手間であるし,PINGOO!は,無料アカウントの場合,RSSの更新確認が不定期(有料アカウントでさえ,60分に1回が上限),という問題がある。

この問題については,id:MoneyReportさんの記事(2015, Feb.)が詳しい。

はてなブログと名乗っていながら、ブログの基本機能であったはずのPing通知が使えないのは時に不便です。

PINGOO!を利用して、はてなブログで「にほんブログ村」と「人気ブログランキング」に自動でPING通知する方法! - マネー報道 MoneyReport

このような問題を解決するため,今回は,「当該はてなブログRSSを1分おきに更新確認し,更新されていれば自動でping送信する」という,PINGOO!が提供するサービスに近いミニプログラムを自作した。

具体的なPHPコードのロジック概要は次の通りである。
このPHPをcronで1分毎に実行している。

<?php
//(1) RSSの取得
$rss = simplexml_load_file('http://●●●●●.hatenablog.com/rss');
foreach($rss->channel->item as $item){
	$title = $item->title;
	$pubDateTime = date("Y-n-j H:i:s", strtotime($item->pubDate));
	$url = $item->link;
	$content = mb_strimwidth (strip_tags($item->description), 0 , 100000, "", "utf-8");
	$content = str_replace("'", "?", $content); 
	$content = str_replace("\"", "?", $content);  //Quotoが入るとSQLでエラーになる

	//(2) DBとの同期的処理
	//もし新着記事なら,記事情報をレコードに追加
	//記事urlが,ユニークキーになるはず
	//コード略
}

//(3) ping送信処理
//もし新着記事があったら,以下を実行
// 送信先の設定
$ping_servers = array();
$ping_servers[] = "http://ping.blogmura.com/xmlrpc/●●●●●"; //ブログ村
$ping_servers[] = "http://blog.with2.net/ping.php/●●●●●/●●●●●"; //人気ブログ
$ping_servers = array_unique($ping_servers);

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

// 送信する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);
  //echo $response;
}

//(4) メール送信処理
//お好みで足すと便利
//もしping送信したら,指定したアドレスにメール通知
//例)ブログ(●●●●●)に,新しい記事(●●●●●)が投稿されました。
//ブログランキングへの新着記事としての掲載を,要求しましたので,お知らせいたします。
?>


尚,ping送信については,Pentan.infoさんによる,以下の記事を参考にした。
サイトの更新情報をPINGサーバに送信する方法 - [サンプルコード/PHP] ぺんたん info


cronで上記PHPを1分毎に実行するようにした結果,新しい記事を公開してから,遅くとも10分後には,ブログランキングの新着記事リストに紹介されていることが確認できた。


ーーー

ご案内

需要があれば,今後,Webサービス化を検討しております。
サーバの負荷がどのくらいかかるか等を検証してみたいので,もし,自身のはてなブログping送信も自動化してほしいという人がいらっしゃいましたら,下記情報を添えて,コメント欄にてお知らせください*1。先着10名様くらいで,無料でサービスを提供させて頂きます(※)。

  • ご自身のはてなブログのURL※1
  • ご希望の新着記事更新確認頻度(1分毎/10分毎のどちらかをお選びください※2)
  • ping送信先URL※3(ブログ村のマイページからコピペしてください)
  • ping送信時のメール通知希望(希望する/希望しないのどちらかをお選びください)
  • 連絡先兼/ping送信通知先メールアドレス※3(@gmail.comからメールを受信できるよう設定してください)

※サービスを終了する予定は,当分の間ありませんが,突然終了する可能性もありますので,予めご容赦願います。
※1 少なくとも,これまでに記事を10件以上投稿されているブログについて,ご希望ください。
※2 1分ごとに更新確認する場合,誤って記事を投稿した場合でも,すぐにping送信されてしまう恐れがあります。送信後の取消はできませんので,ご注意願います。
※3 当ブログのコメントは,承認後公開される設定です。これらの内容を含むコメントは,承認されず,内々に処理いたします。

一両日中に設定後,連絡先メールアドレス宛に,ご連絡いたします。

*1:追記:TwitterのDMでも構いません