Created
April 13, 2013 15:16
-
-
Save KTamas/5378789 to your computer and use it in GitHub Desktop.
Freeblog -> Wordpress the hackish way
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
ini_set('memory_limit', '256M'); | |
ini_set('display_errors', 'on'); | |
set_time_limit(0); | |
/** | |
* Filmbuzi.hu / pocok | |
*/ | |
/** | |
* Converts a string to a valid docname and returns it | |
* | |
* @param string $string | |
* @return string | |
*/ | |
function convertStringToDocname($string) { | |
$string = strtolower (iconv ('UTF-8', 'ASCII//TRANSLIT', $string)); | |
$string = trim($string); | |
$string = str_replace (' ', '-', $string); | |
$string = preg_replace ('/[^-_a-z0-9]/', '', $string); | |
$string = ($string == 'nyeremenyjatek' ? 'nyeremenyjatek-2' : $string); | |
return $string; | |
} | |
function permalink($titletext) { | |
$permalink = $titletext; | |
$permalink = strtolower (iconv ('UTF-8', 'ASCII//TRANSLIT', $permalink)); | |
$permalink = trim($permalink); | |
$mitmire = array ("á"=>"a","é"=>"e","í"=>"i","ó"=>"o","ö"=>"o","ő"=>"o","ú"=>"u","ü"=>"u","ű"=>"u","Á"=>"A","É"=>"E","Í"=>"I","Ó"=>"O","Ö"=>"O","Ő"=>"O","Ú"=>"U","Ü"=>"U","Ű"=>"U"," "=>"_"); | |
$permalink=strtr($permalink, $mitmire); | |
$allowed = "/[^\w-]/i"; | |
$permalink = preg_replace($allowed,"",$permalink); | |
return $permalink; | |
} | |
function query($query) { | |
global $db; | |
$result = mysqli_query($db, $query) or die(mysqli_error($db) . ' - QUERY: ' . $query); | |
return $result; | |
} | |
function quote($string) { | |
global $db; | |
return "'" . mysqli_real_escape_string($db, $string) . "'"; | |
} | |
function getMappedAuthor($name) { | |
$authorMaps = array('gabe75' => 'sulemia'); | |
return (isset($authorMaps[$name]) ? $authorMaps[$name] : $name); | |
} | |
$db = mysqli_connect('localhost', 'user', 'pass') or die('Unable to connect'); | |
mysqli_select_db($db, 'databasename') or die(mysqli_error($db)); | |
mysqli_query($db, 'SET NAMES \'utf8\''); | |
//mysqli_query($db, 'BEGIN'); | |
date_default_timezone_set('Europe/Budapest'); | |
echo "\n\nReading categories\n\n"; | |
$categoryXml = simplexml_load_file(__DIR__ . '/categories.xml'); | |
gc_enable(); | |
$taxonomies = array(); | |
foreach ($categoryXml->channel->item as $item) { | |
$children = $item->children('http://enyim.com/schemas/rss/core/2006'); | |
$taxonomies['category_' . $item->guid] = array( | |
'name' => (string)$item->title, | |
'slug' => (string)$children->alias, | |
'taxonomy' => 'category', | |
'guid' => (string)$item->guid, | |
); | |
} | |
unset($categoryXml); | |
echo "\nCategory reading finished. " . count($taxonomies) . " categories read\n"; | |
echo "\nReading entries\n"; | |
$entryXml = simplexml_load_file(__DIR__ . '/entries.xml'); | |
$entries = array(); | |
$authors = array(); | |
foreach($entryXml->channel->item as $item) { | |
if (!isset($authors[(string)$item->author])) { | |
$authors[(string)$item->author] = array('name' => (string)$item->author); | |
} | |
$row = array( | |
'timestamp' => strtotime((string)$item->pubDate), | |
'guid' => (int)$item->guid, | |
'title' => (string)$item->title, | |
'author' => (string)$item->author, | |
'content' => preg_replace('#filmbuzi\.hu/files#i', 'static.filmbuzi.hu/files', (string)$item->description), | |
'tags' => array(), | |
'category' => (int)$item->category, | |
'excerpt' => preg_replace('#filmbuzi\.hu/files#i', 'static.filmbuzi.hu/files', $item->children('http://enyim.com/schemas/rss/core/2006')->excerpt), | |
); | |
foreach ($item->children('http://enyim.com/schemas/rss/core/2006')->tag as $tag) { | |
if (!isset($taxonomies['tag_' . $tag])) { | |
$taxonomies['tag_' . $tag] = array( | |
'name' => $tag, | |
'slug' => convertStringToDocname($tag), | |
'taxonomy' => 'post_tag', | |
); | |
} | |
if (strtolower((string)$tag) == 'dune' || strtolower((string)$tag) == 'pokember') { | |
continue; | |
} | |
$row['tags'][] = (string)$tag; | |
} | |
$entries[$row['guid']] = $row; | |
} | |
echo "\nEntry reading finished. " . count($entries) . " entries read\n"; | |
unset($entryXml, $item, $excerpt); | |
foreach ($taxonomies as $key => $taxonomy) { | |
$query = 'SELECT tt.term_taxonomy_id FROM wp_terms t JOIN wp_term_taxonomy tt ON tt.term_id = t.term_id WHERE | |
tt.taxonomy = \'' . mysqli_real_escape_string($db, $taxonomy['taxonomy']) . '\' | |
AND t.name = \'' . mysqli_real_escape_string($db, $taxonomy['name']) . '\''; | |
$res = query($query); | |
$row = mysqli_fetch_assoc($res); | |
if (empty($row['term_taxonomy_id'])) { | |
$slug = $taxonomy['slug']; | |
$slug2 = $slug; | |
$suffix = 1; | |
do { | |
$query = 'SELECT name FROM wp_terms WHERE slug = ' . quote($slug2); | |
$res = query($query); | |
$row = mysqli_fetch_assoc($res); | |
$currentSlug = $slug2; | |
$slug2 = $slug . '-' . ++$suffix; | |
} while(!empty($row)); | |
$query = 'INSERT INTO wp_terms(name, slug, term_group) VALUES( | |
\'' . mysqli_real_escape_string($db, $taxonomy['name']) . '\', | |
\'' . mysqli_real_escape_string($db, $currentSlug) . '\', | |
0 | |
)'; | |
query($query); | |
$id = mysqli_insert_id($db); | |
$query = 'INSERT INTO wp_term_taxonomy(term_id, taxonomy, description, parent, count) VALUES( | |
' . $id . ', | |
\'' . mysqli_real_escape_string($db, $taxonomy['taxonomy']) . '\', | |
\'\', | |
0, | |
0 | |
)'; | |
query($query); | |
$id = mysqli_insert_id($db); | |
} else { | |
$id = $row['term_taxonomy_id']; | |
} | |
$taxonomies[$key]['id'] = $id; | |
} | |
foreach ($authors as $key => $author) { | |
$query = ' | |
SELECT | |
ID | |
FROM | |
wp_users | |
WHERE | |
user_login = \'' . mysqli_real_escape_string($db, getMappedAuthor($author['name'])) . '\' | |
'; | |
$res = query($query); | |
$row = mysqli_fetch_assoc($res); | |
$authors[$key]['id'] = $row['ID']; | |
} | |
foreach ($entries as $key => $entry) { | |
$query = ' | |
INSERT INTO | |
wp_posts | |
( | |
post_author, post_date, post_date_gmt, | |
post_content, post_title, post_excerpt, | |
post_name | |
) | |
VALUES | |
( | |
' . $authors[$entry['author']]['id'] . ', ' . quote(date('Y-m-d H:i:s', $entry['timestamp'])) . ', ' . quote(gmdate('Y-m-d H:i:s', $entry['timestamp'])) . ', | |
' . quote($entry['content']) . ', ' . quote($entry['title']) . ', ' . quote($entry['excerpt']) . ', | |
' . quote(permalink($entry['title'])) . ' | |
) | |
'; | |
query($query); | |
$id = mysqli_insert_id($db); | |
$entries[$key]['id'] = $id; | |
if (!empty($entry['category'])) { | |
$query = ' | |
INSERT INTO | |
wp_term_relationships | |
( | |
object_id, term_taxonomy_id | |
) | |
VALUES | |
( | |
' . $id . ', ' . $taxonomies['category_' . $entry['category']]['id'] . ' | |
) | |
'; | |
query($query); | |
} | |
foreach ($entry['tags'] as $tag) { | |
$query = ' | |
INSERT INTO | |
wp_term_relationships | |
( | |
object_id, term_taxonomy_id | |
) | |
VALUES | |
( | |
' . $id . ', ' . $taxonomies['tag_' . $tag]['id'] . ' | |
) | |
'; | |
query($query); | |
} | |
} | |
echo "\nReading comments\n"; | |
$commentXml = simplexml_load_file(__DIR__ . '/comments.xml'); | |
foreach($commentXml->channel->item as $item) { | |
$exportItem = $item->children('http://enyim.com/schemas/blossom/export/2008'); | |
$comment = array( | |
'author' => (string)$item->author, | |
'timestamp' => strtotime((string)$item->pubDate), | |
'guid' => (int)$item->guid, | |
'content' => (string)$item->description, | |
'ip' => (string)$exportItem->ip, | |
'entryGuid' => (int)$exportItem->entry, | |
'email' => (string)$exportItem->email, | |
); | |
$query = ' | |
INSERT INTO | |
wp_comments | |
( | |
comment_post_ID, comment_author, comment_author_email, | |
comment_author_IP, comment_date, comment_date_gmt, | |
comment_content, comment_approved | |
) | |
VALUES | |
( | |
' . $entries[$comment['entryGuid']]['id'] . ', ' . quote($comment['author']) . ', ' . quote($comment['email']) . ', | |
' . quote($comment['ip']) . ', ' . quote(date('Y-m-d H:i:s', $comment['timestamp'])) . ', ' . quote(gmdate('Y-m-d H:i:s', $comment['timestamp'])) . ', | |
' . quote($comment['content']) . ', 1 | |
) | |
'; | |
query($query); | |
} | |
$query = ' | |
UPDATE wp_term_taxonomy tt SET count = (SELECT count(*) FROM wp_posts p JOIN wp_term_relationships tr ON tr.object_id=p.ID WHERE tr.term_taxonomy_id = tt.term_taxonomy_id) | |
'; | |
query($query); | |
$query = ' | |
UPDATE wp_posts p SET comment_count = (SELECT count(*) FROM wp_comments WHERE comment_post_ID = p.ID) | |
'; | |
query($query); | |
echo "FINISHED\n\n"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# encoding: utf-8 | |
require 'open-uri' | |
out = File.open("comments_out2.xml", 'w') | |
File.open("comments.xml", 'r').each do |line| | |
if line.match(/<description>(\[(.+?)\]\(#\d+\))/) | |
line = line.gsub($1, $2) | |
end | |
out.write(line) | |
end | |
out.close | |
#<description>[Ági](#13446723) | |
`mv comments.xml comments.xml.bak2` | |
`mv comments_out2.xml comments.xml` | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# encoding: utf-8 | |
require 'open-uri' | |
def get_fb_profile_name(profile_number) | |
profile_url = "http://admin.freeblog.hu/profile/" + profile_number + "/"; | |
content = open(profile_url).read | |
if content.match(/freeblog.hu » (.*) profilja/i) | |
return $1 | |
end | |
end | |
out = File.open("comments_out.xml", 'w') | |
File.open("comments.xml", 'r').each do |line| | |
if line.match(/<author isAuthenticated="true">(.+?)<\/author>/) | |
author = get_fb_profile_name($1) | |
puts author | |
line = line.gsub($1, author) | |
end | |
out.write(line) | |
end | |
out.close | |
`mv comments.xml comments.xml.bak1` | |
`mv comments_out.xml comments.xml` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment