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