davideisinger.com

My personal website
Log | Files | Refs | README

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     "![image](#{img_filename})"
     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