Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Added image importing to posterous migrator #509

Closed
wants to merge 1 commit into from

2 participants

@markhepburn

I've added image importing to the posterous migrator; the other media types could be added similarly but I thought I'd push this out there first. (I'm not actually expecting this to go in as-is -- I'm new to both ruby and jekyll for a start! It also includes a few arbitrary decisions however)

It does the following:

  • downloads the "full" image from the media section of each post;
  • saves it in a directory imgs/;
  • removes the [[posterous-content:...]] block at the end of the content, and replaces it with an ordered list of images, including the base_path

(I figured a list should be easy to turn into a gallery, etc if people wanted to add their own js)

Is this useful?

@parkr parkr referenced this pull request in jekyll/jekyll-import
Closed

Download and include images in posterous migrator. #4

@parkr
Owner

This would be way better with a switch. Moved this to jekyll/jekyll-import#4 though.

@parkr parkr closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Feb 13, 2012
  1. @markhepburn
This page is out of date. Refresh to see the latest.
Showing with 46 additions and 2 deletions.
  1. +46 −2 lib/jekyll/migrators/posterous.rb
View
48 lib/jekyll/migrators/posterous.rb
@@ -27,7 +27,35 @@ def self.fetch(uri_str, limit = 10)
end
end
- def self.process(email, pass, api_token, blog = 'primary')
+ def self.fetch_images(directory, imgs)
+ def self.fetch_one(url, limit = 10)
+ raise ArgumentError, 'HTTP redirect too deep' if limit == 0
+ response = Net::HTTP.get_response(URI.parse(url))
+ case response
+ when Net::HTTPSuccess then response.body
+ when Net::HTTPRedirection then self.fetch_one(response['location'], limit - 1)
+ else
+ response.error!
+ end
+ end
+
+ FileUtils.mkdir_p directory
+ urls = Array.new
+ imgs.each do |img|
+ fullurl = img["full"]["url"]
+ uri = URI.parse(fullurl)
+ imgname = uri.path.split("/")[-1]
+ imgdata = self.fetch_one(fullurl)
+ open(directory + "/" + imgname, "wb") do |file|
+ file.write imgdata
+ end
+ urls.push(directory + "/" + imgname)
+ end
+
+ return urls
+ end
+
+ def self.process(email, pass, api_token, blog = 'primary', base_path = '/')
@email, @pass, @api_token = email, pass, api_token
FileUtils.mkdir_p "_posts"
@@ -41,7 +69,23 @@ def self.process(email, pass, api_token, blog = 'primary')
date = Date.parse(post["display_date"])
content = post["body_html"]
published = !post["is_private"]
- name = "%02d-%02d-%02d-%s.html" % [date.year, date.month, date.day, slug]
+ basename = "%02d-%02d-%02d-%s" % [date.year, date.month, date.day, slug]
+ name = basename + '.html'
+
+ # Images:
+ post_imgs = post["media"]["images"]
+ if post_imgs.any?
+ img_dir = "imgs/%s" % basename
+ img_urls = self.fetch_images(img_dir, post_imgs)
+
+ img_urls.map! do |url|
+ '<li><img src="' + base_path + url + '"></li>'
+ end
+ imgcontent = "<ol>\n" + img_urls.join("\n") + "</ol>\n"
+
+ # filter out "posterous-content", replacing with imgs:
+ content = content.sub(/\<p\>\[\[posterous-content:[^\]]+\]\]\<\/\p\>/, imgcontent)
+ end
# Get the relevant fields as a hash, delete empty fields and convert
# to YAML for the header
Something went wrong with that request. Please try again.