87 lines
1.4 KiB
Ruby
Executable File
87 lines
1.4 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require "json"
|
|
require "open-uri"
|
|
|
|
FEED_URL = "https://bookmarks.davideisinger.com/u:dce.json"
|
|
|
|
# Mutable state
|
|
index = (ARGV.pop || 1).to_i
|
|
content = []
|
|
links = []
|
|
refs = []
|
|
|
|
# Helpers
|
|
archive_url = ->(url) { `bin/archive "#{url}"`.sub("references:\n", "") }
|
|
|
|
link_def = ->(i, url) { "[#{i}]: #{url}" }
|
|
|
|
item_content = ->(item, i) do
|
|
title = "[#{item["title"]}][#{i}]"
|
|
title += " ([via][#{i + 1}])" if item["referrer"]
|
|
|
|
desc = (item["description"] || "").to_s.tr("\n", " ").squeeze(" ")
|
|
|
|
<<~OUT
|
|
* #{title}
|
|
|
|
> #{desc}
|
|
OUT
|
|
end
|
|
|
|
add_url = ->(url) do
|
|
links << link_def[index, url]
|
|
refs << archive_url[url]
|
|
index += 1
|
|
end
|
|
|
|
add_item = ->(item) do
|
|
content << item_content[item, index]
|
|
add_url[item["url"]]
|
|
add_url[item["referrer"]] if item["referrer"]
|
|
end
|
|
|
|
result = -> do
|
|
<<~OUT
|
|
---
|
|
#{content.join("\n")}
|
|
#{links.join("\n")}
|
|
---
|
|
references:
|
|
#{refs.join}
|
|
OUT
|
|
end
|
|
|
|
process_item = ->(item) do
|
|
puts <<~OUT
|
|
|
|
#{item_content[item, index]}
|
|
#{link_def[index, item["url"]]}
|
|
|
|
OUT
|
|
|
|
print "Include? (y/n/a): "
|
|
|
|
case gets.chomp
|
|
when "y"
|
|
add_item[item]
|
|
when "n"
|
|
nil
|
|
when "a"
|
|
puts result.call
|
|
abort
|
|
else
|
|
process_item[item]
|
|
end
|
|
end
|
|
|
|
URI.parse(FEED_URL).open do |json|
|
|
feed = JSON.parse(json.read)
|
|
|
|
feed.each do |item|
|
|
process_item[item]
|
|
end
|
|
|
|
puts result.call
|
|
end
|