1
0

* Added improved Blogger.com importer using the API, thanks to jaa

This commit is contained in:
Garvin Hicking
2009-02-17 09:11:23 +00:00
parent f541e5874d
commit d9194ac95e
3 changed files with 538 additions and 256 deletions

View File

@@ -3,6 +3,8 @@
Version 1.5 () Version 1.5 ()
------------------------------------------------------------------------ ------------------------------------------------------------------------
* Added improved Blogger.com importer using the API, thanks to jaa
* Change password hashing from plain md5 to salted SHA1. Logins * Change password hashing from plain md5 to salted SHA1. Logins
should continue to work and are migrated to SHA1 keys upon should continue to work and are migrated to SHA1 keys upon
first login. MD5-logins will only work successfully once. This first login. MD5-logins will only work successfully once. This

View File

@@ -1,257 +1,280 @@
<?php # $Id$ <?php # $Id$
# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team) # Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
# All rights reserved. See LICENSE file for licensing details # All rights reserved. See LICENSE file for licensing details
class Serendipity_Import_Blogger extends Serendipity_Import { /****************************************************************
var $info = array('software' => 'Blogger.com'); * Blogger Importer v0.2, by Jawish Hameed (jawish.org) *
var $data = array(); ****************************************************************/
var $inputFields = array();
require_once S9Y_PEAR_PATH . 'HTTP/Request.php';
function Serendipity_Import_Blogger($data) {
global $serendipity; class Serendipity_Import_Blogger extends Serendipity_Import {
var $info = array('software' => 'Blogger.com [using API]');
$this->data = $data; var $data = array();
$this->inputFields = array(array('text' => 'Path to your Blogger export file', var $inputFields = array();
'type' => 'input',
'name' => 'bloggerfile',
'value' => $serendipity['serendipityPath']), function Serendipity_Import_Blogger($data) {
global $serendipity;
array('text' => 'New author default password (used for non-existing authors on the serendipity backend, as author passwords from Blogger are not migrated)',
'type' => 'input', $this->data = $data;
'name' => 'defaultpass', $this->inputFields = array(array('text' => 'Category',
'value' => ''), 'type' => 'list',
'name' => 'bCategory',
array('text' => CHARSET, 'value' => 0,
'type' => 'list', 'default' => $this->_getCategoryList()),
'name' => 'charset',
'value' => 'UTF-8', array('text' => ACTIVATE_AUTODISCOVERY,
'default' => $this->getCharsets()), 'type' => 'bool',
'name' => 'autodiscovery',
array('text' => RSS_IMPORT_BODYONLY, 'default' => 'false'),
'type' => 'bool',
'name' => 'bodyonly', array('text' => CHARSET,
'value' => 'false')); 'type' => 'list',
} 'name' => 'bCharset',
'value' => 'UTF-8',
function validateData() { 'default' => $this->getCharsets())
return sizeof($this->data); );
} }
function getInputFields() { function getImportNotes(){
return $this->inputFields; if (empty($_REQUEST['token'])) {
} $msg = 'In order to import your blog on Blogger, Serendipity needs to be able to access it via Google\'s Blogger Data APIs.<br />';
$msg .= 'Login to your Google/Blogger account and then click the link below.<br /><br />';
function getImportNotes() { $msg .= '<a href="https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session=1&secure=0&next='. urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']) .'">Go to Google to grant access</a><br />';
$out = ' return $msg;
<style type="text/css"> } else {
<!-- return '';
.style1 { }
font-size: large; }
font-weight: bold;
font-family: Arial, Helvetica, sans-serif; function validateData() {
} return sizeof($this->data);
.style2 { }
font-family: Arial, Helvetica, sans-serif;
font-size: x-small; function getInputFields() {
} // Make sure Google login has been completed
--> if (!empty($_REQUEST['token'])) {
</style>
// Prepare session token request
<p class="style1">BLOGGER.COM to SERENDIPITY IMPORT</p> $req = new HTTP_Request('https://www.google.com/accounts/AuthSubSessionToken');
<p class="style2">Version 0.1,( 29/10/2005 )</p> $req->addHeader('Authorization', 'AuthSub token="'. $_REQUEST['token'] .'"');
<p class="style2"> <br />
1. First go to Blogger.com, login.</p> // Request token
<p class="style2">2. Go to the templates section. Set the following as your template. You should backup the current template if you want to reset it back after this operation. Click &quot;Save template changes&quot; button to save this new template.</p> $req->sendRequest();
<p class="style2">
<label> // Handle token reponse
<textarea name="textarea" cols="60" rows="20"><Blogger> if ($req->getResponseCode() != '200') return;
STARTPOST
// Extract Auth token
TITLE: <PostSubject><$BlogItemSubject$></PostSubject> preg_match_all('/^(.+)=(.+)$/m', $req->getResponseBody(), $matches);
AUTHOR: <$BlogItemAuthor$> $tokens = array_combine($matches[1], $matches[2]);
DATE: <$BlogItemDateTime$> unset($matches);
-----
BODY: // Add hidden auth token field to input field list
<$BlogItemBody$> array_unshift($this->inputFields, array( 'text' => 'Google Auth Token (leave alone)',
----- 'type' => 'input',
<BlogItemCommentsEnabled> 'name' => 'bAuthToken',
<BlogItemComments> 'default' => $tokens['Token']));
COMMENT:
AUTHOR: <$BlogCommentAuthor$> // Prepare blog list request
DATE: <$BlogCommentDateTime$> $req = &new HTTP_Request('http://www.blogger.com/feeds/default/blogs');
BODY: <$BlogCommentBody$> $req->addHeader('GData-Version', 2);
----- $req->addHeader('Authorization', 'AuthSub token="'. $tokens['Token'] .'"');
</BlogItemComments>
</BlogItemCommentsEnabled> // Fetch blog list
ENDPOST $req->sendRequest();
</Blogger>
</textarea> // Handle errors
</label> if ($req->getResponseCode() != '200') return false;
</p>
<p class="style2">3. Go to the &quot;Settings&quot; section of blogger. </p> // Load list
<p class="style2">4. Click the &quot;Formatting&quot; link. From the formatting options, find the &quot;Timestamp Format&quot; option and set it to the top most option. i.e the one with the date and time showing. Find the &quot;Show&quot; option, and set it to 999. Save changes</p> $bXml = simplexml_load_string($req->getResponseBody());
<p class="style2">5. Now click the &quot;Comments&quot; link. Find the &quot;Comments Timestamp Format&quot; option and set it to the 2nd option from the list. i.e the one with the date and time showing. Save changes. </p>
<p class="style2">6. On the server with your Serendipity installation, create a directory called &quot;blogger&quot;. </p> // Generate list of the blogs under the authenticated account
<p class="style2">7. Next, back on Blogger.com, go to the &quot;Publishing&quot; section. Set it to publish to an FTP server. Enter the details of the server with your Serendipity installation. Set the FTP path as the path to the &quot;blogger&quot; directory you created in the previous step. </p> $bList = array();
<p class="style2">8. Go back to Blogger.com and find &quot;Publish Entire Blog&quot; under &quot;Posting&quot; -&gt; &quot;Status&quot;. Click the Publish entire blog button to let blogger publish the blog to your ftp server.</p> foreach ($bXml->entry as $entry) {
<p class="style2">9. Now in the box below type in the path to the &quot;index.html&quot; file blogger created under your &quot;blogger&quot; directory. File path should then look something like &quot;/httpdocs/blogger/index.html&quot;.</p> $bList[substr($entry->id, strpos($entry->id, 'blog-') + 5)] = $entry->title;
<p class="style2">10. This script will create the users as from the blogger blog being imported. However if a user already exists, then that user will be used instead of creating a new user with similar name. For the new users that this script will create, you need to provide a default password. Type it in the box below.</p> }
<p class="style2">11. Click &quot;Submit&quot;. Your posts and comments should be imported to serendipity!</p>
<p class="style2"> If you have questions or problems, feel free to drop me a mail at jaa at technova dot com dot mv.<br /> // Add blog list to input fields for selection
<br /> array_unshift($this->inputFields, array('text' => 'Blog to import',
Jaa<br /> 'type' => 'list',
http://jaa.technova.com.mv</p>'; 'name' => 'bId',
return $out; 'value' => 0,
} 'default' => $bList));
function import() { return $this->inputFields;
global $serendipity; } else {
return array();
if (empty($this->data['bloggerfile']) || !file_exists($this->data['bloggerfile'])) { }
echo "Path to blogger file empty or path to file wrong! Go back and correct."; }
return false;
} function _getCategoryList() {
$res = serendipity_fetchCategories('all');
# get default pass from request $ret = array(0 => NO_CATEGORY);
$defaultpass = $this->data['defaultpass']; if (is_array($res)) {
foreach ($res as $v) {
# get blogger uploaded file path from request and load file $ret[$v['categoryid']] = $v['category_name'];
$html = file_get_contents($this->data['bloggerfile']); }
}
# find posts using pattern matching return $ret;
preg_match_all("/STARTPOST(.*)ENDPOST/sU", $html, $posts); }
# iterate through all posts function import() {
foreach($posts[1] as $post) { global $serendipity;
# locate the post title // Force user to select a blog to act on
if (preg_match("/TITLE:(.*)/", $post, $title)) { if (empty($this->data['bId']) || $this->data['bId'] == 0) {
$title = trim($title[1]); echo 'Please select a blog to import!';
echo "<b>" . htmlspecialchars($title) . "</b><br />"; return false;
} else { }
$title = "";
echo "<b>Empty title</b><br />"; // Save this so we can return it to its original value at the end of this method.
} $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false;
# locate the post author if ($this->data['autodiscovery'] == 'false') {
if (preg_match("/AUTHOR:(.*)/", $post, $author)) { $serendipity['noautodiscovery'] = 1;
$author = trim($author[1]); }
echo "<em>" . htmlspecialchars($author[1]) . "</em><br />";
} else { $this->getTransTable();
$author = "";
echo "<em>Unknown author</em><br />"; // Prepare export request
} $req = &new HTTP_Request('http://www.blogger.com/feeds/'. $this->data['bId'] .'/archive');
$req->addHeader('GData-Version', 2);
# locate the post date $req->addHeader('Authorization', 'AuthSub token="'. $this->data['bAuthToken'] .'"');
if (preg_match("/DATE:(.*)/", $post, $date)) {
$date = strtotime(trim($date[1])); // Attempt fetch blog export
echo "Posted on " . htmlspecialchars($date[1]) . ".<br />"; $req->sendRequest();
} else {
$date = time(); // Handle errors
echo "Unknown posting time.<br />"; if ($req->getResponseCode() != '200') {
} echo "Error occured while trying to export the blog.";
return false;
# locate the post body }
if (preg_match("/BODY:(.*)-----/sU", $post, $body)) {
$body = trim($body[1]); // Export success
echo strlen($body) . " Bytes of text.<br />"; echo 'Successfully exported entries from Blogger<br />';
} else {
$body = ""; // Get Serendipity authors list
echo "<strong>Empty Body!</strong><br />"; $authorList = array();
} $s9y_users = serendipity_fetchUsers();
foreach ($s9y_users as $user) {
# find all comments for the post using pattern matching $authorList[$user['authorid']] = $user['username'];
if (preg_match_all( "/COMMENT:(.*)----/sU", $post, $commentlist)) { }
echo count($commentlist[1]) . " comments found.<br />"; unset($s9y_users);
} else {
$commentlist = array(); // Load export
echo "No comments found.<br />"; $bXml = simplexml_load_string($req->getResponseBody());
}
// Process entries
$result = serendipity_db_query("SELECT authorid FROM ". $serendipity['dbPrefix'] ."authors WHERE username = '". serendipity_db_escape_string($author) ."' LIMIT 1", true, 'assoc'); $entryList = $entryFailList = array();
if (!is_array($result)) { foreach ($bXml->entry as $bEntry) {
$data = array('right_publish' => 1,
'realname' => $author, // Check entry type
'username' => $author, switch ($bEntry->category['term']) {
'userlevel' => 0, case 'http://schemas.google.com/blogger/2008/kind#post':
'password' => md5($defaultpass)); // MD5 compatible // Process posts:
serendipity_db_insert('authors', $data);
$authorid = serendipity_db_insert_id('authors', 'authorid'); // Create author if not in serendipity
} else { $author = (string) $bEntry->author->name;
$authorid = $result['authorid']; if (!array_search($author, $authorList)) {
} serendipity_db_insert( 'authors',
array( 'right_publish' => 1,
'realname' => $author,
$entry = array('title' => $title, 'username' => $author,
'isdraft' => 'false', 'userlevel' => 0,
'allow_comments' => 'true', 'password' => md5($defaultpass))
'timestamp' => $date, );
'body' => $body, $authorid = serendipity_db_insert_id('authors', 'authorid');
'extended' => '', $authorList[$authorid] = $author;
'author' => $author, }
'authorid' => $authorid
); $sEntry = array('title' => $this->decode((string) $bEntry->title),
'isdraft' => ($bEntry->children('http://purl.org/atom/app#')->control->draft == 'yes') ? 'true' : 'false',
echo "Entry insert...<br />"; 'allow_comments' => (count($bEntry->xpath("*[@rel='replies']")) > 0) ? 'true' : 'false',
if (!is_int($id = serendipity_updertEntry($entry))) { 'timestamp' => strtotime($bEntry->published),
echo "Inserting entry failed.<br />"; 'body' => $this->strtr((string) $bEntry->content),
return $id; 'extended' => '',
} else { 'categories' => $this->data['bCategory'],
echo "Entry $id inserted.<br />"; 'author' => $author,
} 'authorid' => $authorid
);
# iterate through all comments
$c = 0; // Add entry to s9y
foreach($commentlist[1] as $comment) { echo '..~.. ';
$c++; if (is_int($id = serendipity_updertEntry($sEntry))) {
// Add entry id to processed table for later lookups
# locate the author and author url $entryList[(string) $bEntry->id] = array($id, $sEntry['title'], 0);
$curl = ''; } else {
$cauthor = ''; // Add to fail list
$cdate = time(); $entryFailList[] = $sEntry['title'];
$cbody = ''; }
if (preg_match("/AUTHOR:(.*)/", $comment, $cauthor) && preg_match("/href=\"(.*)\"/", $cauthor[1], $curl)) { break;
$curl = (isset($curl[1]) ? trim($curl[1]) : '');
$cauthor = trim(strip_tags($cauthor[1])); case 'http://schemas.google.com/blogger/2008/kind#comment':
} // Process comments:
# locate the date // Extract entry id for comment
if (preg_match("/DATE:(.*)/", $comment, $cdate)) { $cEntryId = $bEntry->xpath("thr:in-reply-to[@ref]");
$cdate = strtotime($cdate[1]); $cEntryId = (string) $cEntryId[0]['ref'];
}
// Check to make sure the related entry has been added to s9y
# locate the comment body if (array_key_exists($cEntryId, $entryList)) {
if (preg_match("/BODY:(.*)/s", $comment, $cbody)) { // Add to s9y
$cbody = trim($cbody[1]); $sComment = array( 'entry_id ' => $entryList[$cEntryId][0],
} 'parent_id' => 0,
'timestamp' => strtotime($bEntry->published),
$icomment = array('entry_id ' => $id, 'author' => (string) $bEntry->author->name,
'parent_id' => 0, 'email' => (string) $bEntry->author->email,
'timestamp' => $cdate, 'url' => (string) (isset($bEntry->author->uri)) ? $bEntry->author->uri : '',
'author' => $cauthor, 'ip' => '',
'email' => '', 'status' => 'approved',
'url' => $curl, 'body' => $this->strtr((string) $bEntry->content),
'ip' => '', 'subscribed'=> 'false',
'status' => 'approved', 'type' => 'NORMAL'
'body' => $cbody, );
'subscribed'=> 'false', serendipity_db_insert('comments', $sComment);
'type' => 'NORMAL');
// Update entry list with comment count
serendipity_db_insert('comments', $icomment); $entryList[$cEntryId][2]++;
} }
serendipity_db_query("UPDATE ". $serendipity['dbPrefix'] ."entries SET comments = ". $c ." WHERE id = ". $id); break;
echo "Comment count set to: ". $c ."<br />"; }
}
}
echo "Import finished.<br />";
// Report on resultant authors
return true; echo '<br />Current list of authors: <br />'. join(', ', array_values($authorList)) .'<br /><br />';
}
} // Do cleanup and report on entries
echo 'The following entries were successfully imported:<br />';
return 'Serendipity_Import_Blogger'; foreach ($entryList as $eId => $eDetails) {
// Update comment count for entry in s9y
/* vim: set sts=4 ts=4 expandtab : */ serendipity_db_query("UPDATE ". $serendipity['dbPrefix'] ."entries SET comments = ". $eDetails[2] ." WHERE id = ". $eDetails[0]);
echo '- '. $eDetails[1] .' comments('. $eDetails[2] .')<br />';
}
echo '<br />';
// Report fails
echo 'The following entries ran into trouble and was not imported:<br />';
foreach ($entryFailList as $eId => $eDetails) {
echo '- '. $eDetails .'<br />';
}
// Reset autodiscovery
$serendipity['noautodiscovery'] = $noautodiscovery;
// All done!
echo "Import finished.<br />";
return true;
}
}
return 'Serendipity_Import_Blogger';
?> ?>

View File

@@ -0,0 +1,257 @@
<?php # $Id$
# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
# All rights reserved. See LICENSE file for licensing details
class Serendipity_Import_OldBlogger extends Serendipity_Import {
var $info = array('software' => 'Blogger.com [OLD]');
var $data = array();
var $inputFields = array();
function Serendipity_Import_OldBlogger($data) {
global $serendipity;
$this->data = $data;
$this->inputFields = array(array('text' => 'Path to your Blogger export file',
'type' => 'input',
'name' => 'bloggerfile',
'value' => $serendipity['serendipityPath']),
array('text' => 'New author default password (used for non-existing authors on the serendipity backend, as author passwords from Blogger are not migrated)',
'type' => 'input',
'name' => 'defaultpass',
'value' => ''),
array('text' => CHARSET,
'type' => 'list',
'name' => 'charset',
'value' => 'UTF-8',
'default' => $this->getCharsets()),
array('text' => RSS_IMPORT_BODYONLY,
'type' => 'bool',
'name' => 'bodyonly',
'value' => 'false'));
}
function validateData() {
return sizeof($this->data);
}
function getInputFields() {
return $this->inputFields;
}
function getImportNotes() {
$out = '
<style type="text/css">
<!--
.style1 {
font-size: large;
font-weight: bold;
font-family: Arial, Helvetica, sans-serif;
}
.style2 {
font-family: Arial, Helvetica, sans-serif;
font-size: x-small;
}
-->
</style>
<p class="style1">BLOGGER.COM to SERENDIPITY IMPORT</p>
<p class="style2">Version 0.1,( 29/10/2005 )</p>
<p class="style2"> <br />
1. First go to Blogger.com, login.</p>
<p class="style2">2. Go to the templates section. Set the following as your template. You should backup the current template if you want to reset it back after this operation. Click &quot;Save template changes&quot; button to save this new template.</p>
<p class="style2">
<label>
<textarea name="textarea" cols="60" rows="20"><Blogger>
STARTPOST
TITLE: <PostSubject><$BlogItemSubject$></PostSubject>
AUTHOR: <$BlogItemAuthor$>
DATE: <$BlogItemDateTime$>
-----
BODY:
<$BlogItemBody$>
-----
<BlogItemCommentsEnabled>
<BlogItemComments>
COMMENT:
AUTHOR: <$BlogCommentAuthor$>
DATE: <$BlogCommentDateTime$>
BODY: <$BlogCommentBody$>
-----
</BlogItemComments>
</BlogItemCommentsEnabled>
ENDPOST
</Blogger>
</textarea>
</label>
</p>
<p class="style2">3. Go to the &quot;Settings&quot; section of blogger. </p>
<p class="style2">4. Click the &quot;Formatting&quot; link. From the formatting options, find the &quot;Timestamp Format&quot; option and set it to the top most option. i.e the one with the date and time showing. Find the &quot;Show&quot; option, and set it to 999. Save changes</p>
<p class="style2">5. Now click the &quot;Comments&quot; link. Find the &quot;Comments Timestamp Format&quot; option and set it to the 2nd option from the list. i.e the one with the date and time showing. Save changes. </p>
<p class="style2">6. On the server with your Serendipity installation, create a directory called &quot;blogger&quot;. </p>
<p class="style2">7. Next, back on Blogger.com, go to the &quot;Publishing&quot; section. Set it to publish to an FTP server. Enter the details of the server with your Serendipity installation. Set the FTP path as the path to the &quot;blogger&quot; directory you created in the previous step. </p>
<p class="style2">8. Go back to Blogger.com and find &quot;Publish Entire Blog&quot; under &quot;Posting&quot; -&gt; &quot;Status&quot;. Click the Publish entire blog button to let blogger publish the blog to your ftp server.</p>
<p class="style2">9. Now in the box below type in the path to the &quot;index.html&quot; file blogger created under your &quot;blogger&quot; directory. File path should then look something like &quot;/httpdocs/blogger/index.html&quot;.</p>
<p class="style2">10. This script will create the users as from the blogger blog being imported. However if a user already exists, then that user will be used instead of creating a new user with similar name. For the new users that this script will create, you need to provide a default password. Type it in the box below.</p>
<p class="style2">11. Click &quot;Submit&quot;. Your posts and comments should be imported to serendipity!</p>
<p class="style2"> If you have questions or problems, feel free to drop me a mail at jaa at technova dot com dot mv.<br />
<br />
Jaa<br />
http://jaa.technova.com.mv</p>';
return $out;
}
function import() {
global $serendipity;
if (empty($this->data['bloggerfile']) || !file_exists($this->data['bloggerfile'])) {
echo "Path to blogger file empty or path to file wrong! Go back and correct.";
return false;
}
# get default pass from request
$defaultpass = $this->data['defaultpass'];
# get blogger uploaded file path from request and load file
$html = file_get_contents($this->data['bloggerfile']);
# find posts using pattern matching
preg_match_all("/STARTPOST(.*)ENDPOST/sU", $html, $posts);
# iterate through all posts
foreach($posts[1] as $post) {
# locate the post title
if (preg_match("/TITLE:(.*)/", $post, $title)) {
$title = trim($title[1]);
echo "<b>" . htmlspecialchars($title) . "</b><br />";
} else {
$title = "";
echo "<b>Empty title</b><br />";
}
# locate the post author
if (preg_match("/AUTHOR:(.*)/", $post, $author)) {
$author = trim($author[1]);
echo "<em>" . htmlspecialchars($author[1]) . "</em><br />";
} else {
$author = "";
echo "<em>Unknown author</em><br />";
}
# locate the post date
if (preg_match("/DATE:(.*)/", $post, $date)) {
$date = strtotime(trim($date[1]));
echo "Posted on " . htmlspecialchars($date[1]) . ".<br />";
} else {
$date = time();
echo "Unknown posting time.<br />";
}
# locate the post body
if (preg_match("/BODY:(.*)-----/sU", $post, $body)) {
$body = trim($body[1]);
echo strlen($body) . " Bytes of text.<br />";
} else {
$body = "";
echo "<strong>Empty Body!</strong><br />";
}
# find all comments for the post using pattern matching
if (preg_match_all( "/COMMENT:(.*)----/sU", $post, $commentlist)) {
echo count($commentlist[1]) . " comments found.<br />";
} else {
$commentlist = array();
echo "No comments found.<br />";
}
$result = serendipity_db_query("SELECT authorid FROM ". $serendipity['dbPrefix'] ."authors WHERE username = '". serendipity_db_escape_string($author) ."' LIMIT 1", true, 'assoc');
if (!is_array($result)) {
$data = array('right_publish' => 1,
'realname' => $author,
'username' => $author,
'userlevel' => 0,
'password' => md5($defaultpass)); // MD5 compatible
serendipity_db_insert('authors', $data);
$authorid = serendipity_db_insert_id('authors', 'authorid');
} else {
$authorid = $result['authorid'];
}
$entry = array('title' => $title,
'isdraft' => 'false',
'allow_comments' => 'true',
'timestamp' => $date,
'body' => $body,
'extended' => '',
'author' => $author,
'authorid' => $authorid
);
echo "Entry insert...<br />";
if (!is_int($id = serendipity_updertEntry($entry))) {
echo "Inserting entry failed.<br />";
return $id;
} else {
echo "Entry $id inserted.<br />";
}
# iterate through all comments
$c = 0;
foreach($commentlist[1] as $comment) {
$c++;
# locate the author and author url
$curl = '';
$cauthor = '';
$cdate = time();
$cbody = '';
if (preg_match("/AUTHOR:(.*)/", $comment, $cauthor) && preg_match("/href=\"(.*)\"/", $cauthor[1], $curl)) {
$curl = (isset($curl[1]) ? trim($curl[1]) : '');
$cauthor = trim(strip_tags($cauthor[1]));
}
# locate the date
if (preg_match("/DATE:(.*)/", $comment, $cdate)) {
$cdate = strtotime($cdate[1]);
}
# locate the comment body
if (preg_match("/BODY:(.*)/s", $comment, $cbody)) {
$cbody = trim($cbody[1]);
}
$icomment = array('entry_id ' => $id,
'parent_id' => 0,
'timestamp' => $cdate,
'author' => $cauthor,
'email' => '',
'url' => $curl,
'ip' => '',
'status' => 'approved',
'body' => $cbody,
'subscribed'=> 'false',
'type' => 'NORMAL');
serendipity_db_insert('comments', $icomment);
}
serendipity_db_query("UPDATE ". $serendipity['dbPrefix'] ."entries SET comments = ". $c ." WHERE id = ". $id);
echo "Comment count set to: ". $c ."<br />";
}
echo "Import finished.<br />";
return true;
}
}
return 'Serendipity_Import_OldBlogger';
/* vim: set sts=4 ts=4 expandtab : */
?>