Joomla!コンテンツ更新で自動Ping送信

提供: TeaPot
移動: 案内, 検索

Joomla!の標準的なコンテンツを保存するときに、更新Pingを送信します。

目次

ファイルを用意する

class-IXR.php

下記サイトからXML-RPC Library for PHPをダウンロードするかWordPressに含まれるライブラリを使います。

  1. 本家から
    http://scripts.incutio.com/xmlrpc/
    からダウンロードします。
    IXR_Library.inc.php.txtをclass-IXR.phpとリネームします。
  2. WordPressのライブラリから
    http://ja.wordpress.org/
    WordPressのwp-includes内にあるclass-IXR.phpをそのまま使いました。
    こちらのほうが本家よりバージョンが新しいです。

send_ping_list.txt

更新Pingを送信するアドレスのリストを用意します。
send_ping_list.txtというファイルを作成します。
そのファイルにアドレスを行ごとに記述していきます。
改行はUNIX形式にしてください。

send_ping.php

以下のソースをsend_ping.phpとして保存してください。

<?
 
include_once ('class-IXR.php');
 
function generic_ping() {
	global $mosConfig_absolute_path;
	$rec = file($mosConfig_absolute_path. "/administrator/components/com_content/send_ping_list.txt");
	foreach ($rec as $service) {
		$service = trim($service);
		log_write($service.'====================================');
		weblog_ping($service);
	}
}
 
function weblog_ping($server = '') {
	global $mosConfig_sitename, $mosConfig_live_site;
	$rss2_url = $mosConfig_live_site. '/component/option,com_rss/feed,RSS2.0/no_html,1/';
	$client = new IXR_Client($server);
	if ( !$client->query('weblogUpdates.extendedPing', $mosConfig_sitename, $mosConfig_live_site, $rss2_url ) )
		$client->query('weblogUpdates.ping', $mosConfig_sitename, $mosConfig_live_site);
	log_write(' '.$client->getErrorCode().' : '.$client->getErrorMessage());
	$a = $client->getResponse();
	foreach ($a as $key => $tmp) {
		log_write(' ['.$key.'] '.$tmp);
	}
}
 
function log_write($msg = '') {
	global $mosConfig_absolute_path;
	$xmlrpc_logging = 1;
	if ($xmlrpc_logging) {
		$fp = fopen($mosConfig_absolute_path. "/administrator/components/com_content/xmlrpc.log","a+");
		$date = gmdate("Y-m-d H:i:s ");
		fwrite($fp, $date.$msg."\n");
		fclose($fp);
	}
}
 
?>

アップロードをする

Joomla!のフォルダのadministrator/components/com_content/に上記の3つのファイルをアップロードします。

パッチを当てる

administrator/components/com_content/にあるadmin.content.phpを開きます。

$msg = 'アイテム'. $row->title.':  を保存しました';

という行の次に

include_once ('send_ping.php');
generic_ping();

を挿入します。以上です。

補足

administrator/components/com_content/にxmlrpc.logというログファイルを残すようにしています。 エラーが出るサイトも結構ありますが、基本的にWordPressと同じ処理をしているはずです。

Joomla!の設定でキャッシュを有効にしていると、更新Pingを送った後に、サイトを見に来たクローラーが最新記事を取得できないことがあります。

個人用ツール
名前空間

変種
操作
案内
情報
ツール