Skip to content

Instantly share code, notes, and snippets.

@speric
Last active August 29, 2015 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save speric/7ffd702e0d9c16c2cfa3 to your computer and use it in GitHub Desktop.
Save speric/7ffd702e0d9c16c2cfa3 to your computer and use it in GitHub Desktop.
Ping WordPress trackback URLs
<html>
<head>
<title>SD News Pinger</title>
<style>
body{ font-family: Arial, sans-serif; font-size: 12px; }
</style>
</head>
<body>
<?php
date_default_timezone_set('America/New_York');
require_once('inc/db.php');
require_once('inc/util.php');
require_once('inc/classes/cDatabase.php');
require_once('scripts/xmlrpc-2.2.2/lib/xmlrpc.inc');
require_once('xmlrpc-2.2.2/lib/xmlrpcs.inc');
require_once('xmlrpc-2.2.2/lib/xmlrpc_wrappers.inc');
include "Services/Trackback.php";
error_reporting(NULL);
$empty_ping_logs = "DELETE FROM `ping_logs`";
qdb($empty_ping_logs);
$get_trackbackable_sql = "SELECT * from `site_pings`";
$trackbackable = qdb($get_trackbackable_sql);
$trackbackable_urls = "";
$tracking_keys = array();
while ($foo = fetch($trackbackable)){
$trackbackable_urls .= "'".$foo['url_host']."',";
$tracking_keys[$foo['url_host']] = $foo['ping_url'];
$tracking_keys[$foo['url_host'].'_method'] = $foo['ping_method'];
}
$trackbackable_urls = substr($trackbackable_urls, 0, strlen($trackbackable_urls) -1 );
$get_items_sql = "SELECT id, title, url, url_host from `items` WHERE url_host in(".$trackbackable_urls.") AND pinged = 0";
$items = qdb($get_items_sql);
?>
<div style="width: 900px;">
<?php
while ($item = fetch($items)) {
echo "<p><b>Pinging ".$item['id']." - ".$item['url']."</b><br/>";
$trackback = new Services_Trackback();
if($tracking_keys[$item['url_host']] == "trackback"){
if(substr($item['url'], -1) == "/"){
$trackback_url = $item['url']."trackback";
}else{
$trackback_url = $item['url']."/trackback";
}
}else{
$trackback_url = $tracking_keys[$item['url_host']];
}
if($tracking_keys[$item['url_host'].'_method'] == "xmlrpc"){
$xmlrpc_client = new xmlrpc_client("xmlrpc.php", $item['url_host'], 80);
$xmlrpc_client->setDebug(1);
$xmlrpc_message = new xmlrpcmsg("pingback.ping", array(new xmlrpcval("http://news.sensusdivinitatis.com/item/".$item['id']), new xmlrpcval($item['url'])));
$xmlrpc_response = $xmlrpc_client->send($xmlrpc_message);
if($xmlrpc_response->faultString() == "The pingback has already been registered."){
update_item_as_pinged($item['id']);
new_ping_log($item['url'], "Pingback registered", 1);
}elseif($xmlrpc_response->faultCode() != 0){
new_ping_log($item['url'], $xmlrpc_response->faultString(), 0);
}else{
update_item_as_pinged($item['id']);
new_ping_log($item['url'], "Pingback registered", 1);
}
}else{
$trackbackData = array(
'title' => $item['title'],
'excerpt' => 'This post was chosen as newsworthy at Sensus Divinitatis News.',
'url' => 'http://news.sensusdivinitatis.com/item/'.$item['id'],
'blog_name' => 'Sensus Divinitatis News',
'trackback_url' => $trackback_url);
foreach ($trackbackData as $k => $v) {
$trackback->set($k, $v);
}
$ret = $trackback->send();
if (PEAR::isError($ret)) {
new_ping_log($item['url'], $ret->getMessage(), 0);
} else {
update_item_as_pinged($item['id']);
new_ping_log($item['url'], 'Trackback submission successful.', 1);
}
}
echo "</p>";
}
?>
</div>
<?php
echo "Done.";
mysql_close();
function new_ping_log($url, $msg, $success){
$ping_log_sql = "INSERT INTO `ping_logs` (url, msg, success) VALUES('$url','$msg',$success)";
qdb($ping_log_sql);
}
function update_item_as_pinged($item_id){
$update_item_sql = "UPDATE `items` SET pinged = 1 WHERE id = $item_id";
qdb($update_item_sql);
}
?>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment