-
-
Save robwent/c2a06fce388add738cb0 to your computer and use it in GitHub Desktop.
<?php | |
// Turn off all error reporting | |
error_reporting(0); | |
/** | |
* Constant that is checked in included files to prevent direct access. | |
* define() is used in the installation folder rather than "const" to not error for PHP 5.2 and lower | |
*/ | |
define('_JEXEC', 1); | |
define( 'DS', DIRECTORY_SEPARATOR ); | |
if (file_exists(__DIR__ . '/defines.php')) | |
{ | |
include_once __DIR__ . '/defines.php'; | |
} | |
if (!defined('_JDEFINES')) | |
{ | |
define('JPATH_BASE', __DIR__); | |
require_once JPATH_BASE . '/includes/defines.php'; | |
} | |
require_once JPATH_BASE . '/includes/framework.php'; | |
// Mark afterLoad in the profiler. | |
JDEBUG ? $_PROFILER->mark('afterLoad') : null; | |
//Set the domain we're going to import to (no trailing slash). If blank the current domain will be used | |
$site = ''; | |
// Instantiate the application. | |
$app = JFactory::getApplication('site'); | |
$config = JFactory::getConfig(); | |
$siteTitle = $config->get('sitename'); | |
if ($site == '') { | |
$site = JURI::base(); | |
} | |
$site = rtrim($site, '/'); | |
//import the k2 router to construct the urls | |
require_once(JPATH_SITE.DS.'components'.DS.'com_k2'.DS.'helpers'.DS.'route.php'); | |
// Get a db connection. | |
$db = JFactory::getDbo(); | |
// Create a new query object. | |
$query = $db->getQuery(true); | |
// Select all items with the needed parts to create the urls and the post title | |
$query | |
->select(array('a.id', 'a.alias', 'a.catid', 'a.title')) | |
->select($db->quoteName('b.alias', 'catalias')) | |
->from($db->quoteName('#__k2_items', 'a')) | |
->join('INNER', $db->quoteName('#__k2_categories', 'b') . ' ON (' . $db->quoteName('a.catid') . ' = ' . $db->quoteName('b.id') . ')') | |
->order($db->quoteName('a.id') . ' ASC'); | |
//$query->setLimit('400'); | |
// Reset the query using our newly populated query object. | |
$db->setQuery($query); | |
// Load the results as a list of stdClass objects. | |
$items = $db->loadObjectList(); | |
$xmlItems = array(); | |
//Loop through the posts and get the associated comments | |
foreach ($items as $item) { | |
$query = $db->getQuery(true); | |
$query | |
->select('*') | |
->from($db->quoteName('#__k2_comments')) | |
->where($db->quoteName('itemID') . ' = \''.$item->id.'\'') | |
->order($db->quoteName('id') . ' ASC'); | |
$db->setQuery($query); | |
$comments = $db->loadObjectList(); | |
if ($comments){ | |
$itemLink = urldecode(JRoute::_(K2HelperRoute::getItemRoute($item->id.':'.urlencode($item->alias), $item->catid.':'.urlencode($item->catalias)))); | |
$itemTitle = $item->title; | |
$item = "\t\t".'<item>'."\n"; | |
$item .= "\t\t".'<title>'.$itemTitle.'</title>'."\n"; | |
$item .= "\t\t".'<link>'.$site.$itemLink.'</link>'."\n"; | |
foreach ($comments as $comment) { | |
$item .= "\t\t\t".'<wp:comment>'."\n"; | |
$item .= "\t\t\t\t".'<wp:comment_id>'.$comment->id.'</wp:comment_id>'."\n"; | |
$item .= "\t\t\t\t".'<wp:comment_author><![CDATA['.$comment->userName.']]></wp:comment_author>'."\n"; | |
$item .= "\t\t\t\t".'<wp:comment_author_email><![CDATA['.$comment->commentEmail.']]></wp:comment_author_email>'."\n"; | |
$item .= "\t\t\t\t".'<wp:comment_date>'.$comment->commentDate.'</wp:comment_date>'."\n"; | |
$item .= "\t\t\t\t".'<wp:comment_date_gmt>'.$comment->commentDate.'</wp:comment_date_gmt>'."\n"; | |
$item .= "\t\t\t\t".'<wp:comment_content><![CDATA['.$comment->commentText.']]></wp:comment_content>'."\n"; | |
$item .= "\t\t\t\t".'<wp:comment_approved>'.$comment->published.'</wp:comment_approved>'."\n"; | |
$item .= "\t\t\t\t".'<wp:comment_parent>0</wp:comment_parent>'."\n"; | |
$item .= "\t\t\t".'</wp:comment>'."\n"; | |
} | |
$item .= "\t\t".'</item>'."\n"; | |
//push into the items | |
$xmlItems[] = $item; | |
} | |
} | |
// Output XML header. | |
$xml = '<?xml version="1.0" encoding="UTF-8" ?>' . "\n"; | |
$xml .= '<rss version="2.0" xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wp="http://wordpress.org/export/1.2/" >' . "\n"; | |
// Output root element. | |
$xml .= '<channel>'."\n"; | |
$xml .= '<title>'.$siteTitle.'</title>'."\n"; | |
$xml .= '<link>'.$site.'</link>'."\n"; | |
// Output the data. | |
if(!empty($xmlItems)){ | |
foreach ($xmlItems as $xmlItem){ | |
$xml .= $xmlItem; | |
} | |
} | |
// Terminate root element. | |
$xml .= '</channel>'."\n"; | |
// Terminate rss element. | |
$xml .= '</rss>'."\n"; | |
header('Content-disposition: attachment; filename=k2_comment_export.xml'); | |
header ("Content-Type:text/xml; charset=utf-8"); | |
//output the XML data | |
echo $xml; | |
header("Expires: 0"); |
hey Rob, this is great! just what I'm looking for but it doesn't seem to be exporting all the comments?
How many do you have?
I didn't take into account any php timeouts or anything as this was working for the site I needed it on.
Do you get a file download or do you know what's missing from it?
If you have more than 400 then check the limit line
good reminder for me there. I was limiting to 400 but I need to export 3000.
I'll comment that bit out...
edit That limits to 400 posts so if you have more posts than that you will need to change the limit or up the number
Thanks Rob, I did change the limit and it worked! I also have sh404sef component running, is there a way to get the links from this instead of Joomla's SEF URLs? I've tried ways around this in Disqus's admin tools to do a redirect crawler which works in the admin panel however the threads don't actually show up on the site.
As well is there a way to change the SQL query to filter from a category?
Change the $site url to your website and place the file in the root of the site.
Browse to the file to download the comment xml file.
Go to your disqus account and import the file as wordpress format.