mirror of
https://github.com/wezm/wezm.net.git
synced 2024-11-10 01:42:32 +00:00
Implement post importing
This commit is contained in:
parent
e88a524007
commit
d5f2816204
2 changed files with 63 additions and 5 deletions
|
@ -2,6 +2,11 @@ require 'rubygems'
|
||||||
|
|
||||||
require 'wordpress'
|
require 'wordpress'
|
||||||
|
|
||||||
i = Importer::Wordpress.new('wezm.net.2009-11-17.xml')
|
if ARGV.size < 2
|
||||||
|
puts "Usage importer.rb worpress-export.xml /path/to/nanoc/site"
|
||||||
|
exit 3
|
||||||
|
end
|
||||||
|
|
||||||
|
i = Importer::Wordpress.new(ARGV[0], ARGV[1])
|
||||||
|
|
||||||
i.run
|
i.run
|
||||||
|
|
|
@ -5,9 +5,10 @@ module Importer
|
||||||
|
|
||||||
class Wordpress
|
class Wordpress
|
||||||
|
|
||||||
def initialize(wordpress_export_path)
|
def initialize(wordpress_export_path, nanoc_site_path)
|
||||||
@export_file = File.open(wordpress_export_path)
|
@export_file = File.open(wordpress_export_path)
|
||||||
@export = Nokogiri::XML(@export_file)
|
@export = Nokogiri::XML(@export_file)
|
||||||
|
@site = Nanoc3::Site.new(nanoc_site_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
def run
|
def run
|
||||||
|
@ -29,8 +30,46 @@ module Importer
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
def get(node, xpath)
|
||||||
|
elem = node.xpath(xpath).first
|
||||||
|
elem ? elem.content : nil
|
||||||
|
end
|
||||||
|
|
||||||
def process_post(post)
|
def process_post(post)
|
||||||
puts "Processing post: #{post.css('title').first.text}"
|
puts "Processing post: #{post.css('title').first.text}"
|
||||||
|
content = get(post, 'content:encoded')
|
||||||
|
|
||||||
|
tags = []
|
||||||
|
post.css('category[domain=tag]').each do |tag|
|
||||||
|
if tag['nicename']
|
||||||
|
tags << tag['nicename']
|
||||||
|
else
|
||||||
|
tags << tag.text.downcase
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
categories = []
|
||||||
|
post.css('category[domain=category]').each do |category|
|
||||||
|
categories << category.text
|
||||||
|
end
|
||||||
|
|
||||||
|
attributes = {
|
||||||
|
:tags => tags.uniq,
|
||||||
|
:categories => categories.uniq,
|
||||||
|
:permalink => get(post, 'link'),
|
||||||
|
:status => get(post, 'wp:status'),
|
||||||
|
:slug => get(post, 'wp:post_name'),
|
||||||
|
:post_id => get(post, 'wp:post_id').to_i,
|
||||||
|
:post_date => get(post, 'wp:post_date_gmt'),
|
||||||
|
}
|
||||||
|
|
||||||
|
unless attributes[:slug]
|
||||||
|
puts "Error post #{post_id} has no slug"
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
path = "/articles/#{slug}"
|
||||||
|
add_item(content, attributes, identifier)
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_page(page)
|
def process_page(page)
|
||||||
|
@ -41,6 +80,20 @@ module Importer
|
||||||
puts "Processing attachment"
|
puts "Processing attachment"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def add_item(content, attributes, identifier)
|
||||||
|
# content = row['post_content']
|
||||||
|
# attributes = {
|
||||||
|
# :title => row['post_title'],
|
||||||
|
# :published_on => row['post_date_gmt'],
|
||||||
|
# :modified_on => row['post_modified_gmt'],
|
||||||
|
# :status => row['post_status'],
|
||||||
|
# :excerpt => row['post_excerpt']
|
||||||
|
# }
|
||||||
|
# identifier = '/posts/' + post_date.year.to_s + '/' + post_date.month.to_s + '/' + post_name + '/'
|
||||||
|
@site.data_sources.first.create_item(content, attributes, identifier)
|
||||||
|
puts "Added item at #{identifier}"
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue