1
1
require 'nokogiri'
2
2
require 'json'
3
+ require 'open-uri'
3
4
4
5
module Jekyll
5
6
class OpenSearchSuggestions < Liquid ::Tag
@@ -10,16 +11,18 @@ def initialize(tag_name, text, tokens)
10
11
11
12
def render ( context )
12
13
site = context . registers [ :site ]
13
- sitemap_path = File . join ( site . source , 'sitemap.xml' )
14
+
15
+ # Use the site's URL from _config.yml
16
+ site_url = site . config [ 'url' ]
17
+ sitemap_url = "#{ site_url } /sitemap.xml"
14
18
15
19
debug_info = {
16
20
search_term : @search_term ,
17
- sitemap_path : sitemap_path ,
18
- sitemap_exists : File . exist? ( sitemap_path )
21
+ sitemap_url : sitemap_url
19
22
}
20
23
21
- if File . exist? ( sitemap_path )
22
- sitemap = File . read ( sitemap_path )
24
+ begin
25
+ sitemap = URI . open ( sitemap_url ) . read
23
26
doc = Nokogiri ::XML ( sitemap )
24
27
25
28
urls = doc . xpath ( '//xmlns:url/xmlns:loc' ) . map ( &:text )
@@ -35,8 +38,10 @@ def render(context)
35
38
36
39
result = [ @search_term , suggestions . map ( &:first ) , suggestions . map ( &:last ) , debug_info ]
37
40
result . to_json
38
- else
39
- { error : "Sitemap not found" , debug_info : debug_info } . to_json
41
+ rescue OpenURI ::HTTPError => e
42
+ { error : "Failed to fetch sitemap: #{ e . message } " , debug_info : debug_info } . to_json
43
+ rescue StandardError => e
44
+ { error : "An error occurred: #{ e . message } " , debug_info : debug_info } . to_json
40
45
end
41
46
end
42
47
end
0 commit comments