drupal/modules/ping.module

129 lines
5.2 KiB
Plaintext
Raw Normal View History

<?php
// $Id$
/**
* @file
* Alerts other sites that your site has been updated.
*/
/**
* Implementation of hook_help().
*/
function ping_help($section) {
switch ($section) {
case 'admin/help#ping':
$output .= t("
<p>Drupal can automatically send notifications (called \"pings\") to the following sites to tell them that your site has changed. To do so, Drupal implements the %weblogs-XML.</p>
<ul>
<li>%weblogs, a web site that tracks and displays links to changed weblogs and news-oriented web sites. Many services use %weblogs to determine if a site has been recently updated.</li>
<li>%weblogs-RSS for RSS, a web site that tracks and displays links to recently changed RSS feeds in XML format.</li>
<li>%blo-gs, a directory of recently updated weblogs and tools for tracking interesting weblogs, in the spirit of services like %weblogs, %blogtracker and %blogrolling. To get your Drupal site listed, %blo-gs must be informed about your site's updates. This is the job of the ping module and when installed, the administrator doesn't have to do anything to participate in the %blo-gs system.</li>
<li>%technorati, a web site that tracks links between websites in real time, and can answer the question 'who linked to me in the last hour?'</li>
<li>%yahoo users can track RSS feeds, so when it is pinged, %yahoo will immediately queue up refreshing your site's RSS feed so that it displays your latest content to its users.</li>
</ul>
<p>The ping feature requires crontab.</p>", array('%weblogs' => '<a href="http://www.weblogs.com/">Weblogs.com</a>', '%weblogs-XML' => '<a href="http://www.xmlrpc.com/weblogsCom/">'. t('XML-RPC interface of weblogs.com') .'</a>', '%weblogs-RSS' => '<a href="http://www.xmlrpc.com/weblogsComForRSS">'. t('Weblogs.Com for RSS') .'</a>', '%weblogs-RSS-changes' => '<a href="http://www.weblogs.com/rssUpdates/changes.xml">'. t('the weblogs.com for RSS') .'</a>', '%blo-gs' => '<a href="http://blo.gs/">blo.gs</a>','%blogtracker' => '<a href="http://www.dansanderson.com/blogtracker">blogtracker</a>', '%blogrolling' => '<a href="http://www.blogrolling.com">blogrolling.com</a>', '%blo-gs-XML' => '<a href="http://blo.gs/ping.php">'. t('XML-RPC interface of blo.gs').'</a>', '%technorati' => '<a href="http://www.technorati.com/">'. t("Technorati"). '</a>', '%yahoo' => '<a href="http://my.yahoo.com/">My Yahoo!</a>'));
break;
case 'admin/modules#description':
$output = t('Alerts other sites that your site has been updated.');
break;
}
return $output;
}
/**
* Implementation of hook_cron().
*
* Fire off notifications of updates to remote sites.
*/
function ping_cron() {
global $base_url;
if (variable_get('site_name', 0) && variable_get('site_slogan', 0)) {
if (db_num_rows(db_query("SELECT nid FROM {node} WHERE status = 1 AND moderate = 0 AND (created > '". variable_get('ping_cron_last', time()) ."' OR changed > '". variable_get('ping_cron_last', time()) ."')"), 1)) {
_ping_notify(variable_get('site_name', '') .' - '. variable_get('site_slogan', ''), $base_url);
}
variable_set('ping_cron_last', time());
}
}
/**
* Call hook_ping() in all modules to notify remote sites that there is
* new content at this one.
*/
function _ping_notify($name, $url) {
module_invoke_all('ping', $name, $url);
}
/**
* Implementation of hook_ping().
*
* Notifies weblogs.com, blo.gs, and technorati.com of changes at this site.
*/
function ping_ping($name = '', $url = '') {
$feed = url('node/feed', NULL, NULL, TRUE);
$client = new xmlrpc_client('/RPC2', 'rpc.weblogs.com', 80);
$message = new xmlrpcmsg('weblogUpdates.ping', array(new xmlrpcval($name), new xmlrpcval($url)));
$result = $client->send($message);
if (!$result || $result->faultCode()) {
watchdog('error', t('Failed to notify weblogs.com (site).'));
}
unset($client);
$client = new xmlrpc_client('/RPC2', 'rssrpc.weblogs.com', 80);
$message = new xmlrpcmsg('rssUpdate', array(new xmlrpcval($name), new xmlrpcval($feed)));
$result = $client->send($message);
if (!$result || $result->faultCode()) {
watchdog('error', t('Failed to notify weblogs.com (RSS).'));
}
unset($client);
$client = new xmlrpc_client('/', 'ping.blo.gs', 80);
$message = new xmlrpcmsg('weblogUpdates.extendedPing', array(new xmlrpcval($name), new xmlrpcval($url), new xmlrpcval($url), new xmlrpcval($feed)));
$result = $client->send($message);
if (!$result || $result->faultCode()) {
watchdog('error', t('Failed to notify blo.gs.'));
}
unset($client);
$client = new xmlrpc_client('/rpc/ping', 'rpc.technorati.com', 80);
$message = new xmlrpcmsg('weblogUpdates.ping', array(new xmlrpcval($name), new xmlrpcval($url)));
$result = $client->send($message);
if (!$result || $result->faultCode()) {
watchdog('error', t('Failed to notify technorati.com.'));
}
2004-11-06 12:56:05 +00:00
unset($client);
$client = new xmlrpc_client('/RPC2', 'api.my.yahoo.com', 80);
$message = new xmlrpcmsg('weblogUpdates.ping', array(new xmlrpcval($name), new xmlrpcval($feed)));
$result = $client->send($message);
if (!$result || $result->faultCode()) {
watchdog('error', t('Failed to notify yahoo.com.'));
}
}
2004-11-06 12:56:05 +00:00
?>