1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
require 'nokogiri'
require 'net/http'
require 'uri'
url = "https://mitjafelicijan.fra1.digitaloceanspaces.com/"
def truncate_filename(filename, max_length)
return filename if filename.length <= max_length
file_extension = filename.split('.').last
"#{filename[0...max_length - file_extension.length - 5]}….#{file_extension}"
end
uri = URI(url)
response = Net::HTTP.get_response(uri)
if response.is_a?(Net::HTTPSuccess)
xml_data = response.body
root = Nokogiri::XML(xml_data)
root.remove_namespaces!
tree = {}
root.xpath("//Contents").each do |content|
key = content.xpath("Key").text
parts = key.split("/")
node = tree
parts.each do |part|
next if part.empty?
node[part] ||= {}
node = node[part]
end
end
def tree_to_md(tree, url, indent = 0, path = "")
md = ""
tree.each do |k, v|
if v.empty? # If the node is empty, it's a file
file_url = "#{url}#{path}#{k}"
file_name = truncate_filename(k, 500)
md += "#{" " * indent}- [#{file_name}](#{file_url})\n"
else # If the node has children, it's a directory
md += "#{" " * indent}- #{k}\n"
md += tree_to_md(v, url, indent + 1, "#{path}#{k}/")
end
end
md
end
md = tree_to_md(tree, url)
puts md
File.open("_layouts/vault.md", "r") do |file|
content = file.read
new_content = content.gsub("{CONTENT}", md)
File.open("vault.md", "w") { |f| f.write(new_content) }
end
else
puts "Failed to fetch XML data. Status code: #{response.code}"
end
|