davideisinger.com

My personal website
Log | Files | Refs | README

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