elsewhere (1612B)
1 #!/usr/bin/env ruby 2 3 require "bundler/setup" 4 require "date" 5 require "net/http" 6 require "nokogiri" 7 require "pandoc-ruby" 8 require "fileutils" 9 require "uri" 10 11 BASEDIR = "content/elsewhere" 12 13 def download(uri, filename) 14 if File.exist?(filename) 15 puts "#{filename} already exists" 16 else 17 puts "Downloading #{uri}..." 18 `curl -s "#{uri}" > #{filename}` 19 end 20 end 21 22 *urls = ARGV 23 24 unless urls.any? 25 warn "Please supply one or more URLs" 26 exit 1 27 end 28 29 FileUtils.mkdir_p "tmp" 30 31 urls.each do |url| 32 uri = URI.parse(url) 33 name = File.basename(uri.path) 34 filename = "tmp/#{name}.html" 35 36 download(uri, filename) 37 38 article = Nokogiri::HTML(File.open(filename)) 39 content = article.css("div.page-blocks").first 40 41 FileUtils.mkdir_p "#{BASEDIR}/#{name}" 42 43 md = PandocRuby.convert(content.to_html, from: :html, to: :markdown) 44 45 # strip weird ::: directives 46 md.gsub!(/^:{3}.*\n/, "") 47 48 # strip trailing "\" 49 md.gsub!(/\\$/, "") 50 51 md.gsub!(/^!\[image\]\((.*?)\)\{.*?\}/m) do 52 img_uri = URI.parse($1) 53 img_filename = File.basename(img_uri.path) 54 55 download(img_uri, "#{BASEDIR}/#{name}/#{img_filename}") 56 57 "" 58 end 59 60 title = article.css("title").text.gsub(" | Viget", "").gsub('"', '\"') 61 date = Date.parse(article.css("time").attr("datetime").value).to_datetime.to_s 62 63 File.open("#{BASEDIR}/#{name}/index.md", "w") do |f| 64 f.write "---\n" 65 f.write "title: \"#{title}\"\n" 66 f.write "date: #{date}\n" 67 f.write "draft: false\n" 68 f.write "needs_review: true\n" 69 f.write "canonical_url: #{uri}\n" 70 f.write "---\n" 71 f.write "\n" 72 f.write md 73 end 74 end