Skip to content

Instantly share code, notes, and snippets.

@clooth
Created April 25, 2013 09:16
Show Gist options
  • Save clooth/5458543 to your computer and use it in GitHub Desktop.
Save clooth/5458543 to your computer and use it in GitHub Desktop.
pttrns.com downloader
require 'nokogiri'
require 'open-uri'
require 'net/http'
# Patterns
patterns = {}
# Load first page
doc = Nokogiri::HTML(open('http://pttrns.com/'))
# Get all page links for later reference
max_pages = doc.css('.pagination a:not(.next_page)').pop.content.to_i
doc.css('.pttrns-list article.grid').each do |pattern|
category = pattern.at_css('.meta .category').content.downcase
target_dir = Dir::pwd + "/" + category + "/"
unless patterns.has_key? category
patterns[category] = []
Dir::mkdir target_dir
end
name = pattern.at_css('.meta a').content
image_url = pattern.at_css('a img')["data-retina-image"]
# Download image
open(image_url) do |f|
File.open(target_dir + File.basename(image_url), "wb") {|file|
file.puts f.read
}
end
end
# Do the same for all the next urls
url_template = "http://pttrns.com/?page=%d"
urls = []
(max_pages-1).times do |n|
index = n+2
urls << {link: url_template % index}
end
puts urls
urls.each do |u|
Thread.new {
doc = Nokogiri::HTML(open(u[:link]))
doc.css('.pttrns-list article.grid').each do |pattern|
category = pattern.at_css('.meta .category').content.downcase
target_dir = Dir::pwd + "/" + category + "/"
unless patterns.has_key? category
patterns[category] = []
Dir::mkdir target_dir
end
image_url = pattern.at_css('a img')["data-retina-image"]
# Download image
open(image_url) do |f|
File.open(target_dir + File.basename(image_url), "wb") {|file|
file.puts f.read
u["content"] = true
puts "got #{image_url}"
if urls.all? {|u| u.has_key?("content") }
puts "Got all"
exit
end
}
end
end
}
end
sleep
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment