Skip to content

Commit 524cd95

Browse files
authored
Merge pull request #129 from castacks/fix-medium-posts-nil-guard
Fix Medium posts plugin crashing the Pages deploy on empty/failed feed
2 parents ced0d25 + 0f61988 commit 524cd95

1 file changed

Lines changed: 21 additions & 8 deletions

File tree

_plugins/jekyll-display-medium-posts-json.rb

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,29 @@ module Jekyll
66
class JekyllDisplayMediumPosts < Generator
77
safe true
88
priority :high
9-
def generate(site)
9+
def generate(site)
1010
jekyll_coll = Jekyll::Collection.new(site, 'medium_posts_json')
1111
site.collections['medium_posts_json'] = jekyll_coll
1212
uri = URI("https://api.rss2json.com/v1/api.json?rss_url=https://medium.com/feed/airlabcmu")
13-
http = Net::HTTP.new(uri.host, uri.port)
14-
http.use_ssl = true
15-
request = Net::HTTP::Get.new(uri)
16-
response = http.request(request)
17-
data = JSON.parse(response.read_body)
18-
data['items'].each do |item|
13+
begin
14+
http = Net::HTTP.new(uri.host, uri.port)
15+
http.use_ssl = true
16+
http.open_timeout = 10
17+
http.read_timeout = 15
18+
request = Net::HTTP::Get.new(uri)
19+
response = http.request(request)
20+
data = JSON.parse(response.read_body)
21+
rescue StandardError => e
22+
Jekyll.logger.warn 'MediumPosts:', "fetch/parse failed (#{e.class}: #{e.message}); skipping Medium posts"
23+
return
24+
end
25+
items = data.is_a?(Hash) ? data['items'] : nil
26+
unless items.is_a?(Array)
27+
status = data.is_a?(Hash) ? data['status'] : 'n/a'
28+
Jekyll.logger.warn 'MediumPosts:', "rss2json returned no items (status=#{status}); skipping Medium posts"
29+
return
30+
end
31+
items.each do |item|
1932
title = item['title']
2033
path = "./medium_posts/" + title + ".md"
2134
path = site.in_source_dir(path)
@@ -28,7 +41,7 @@ def generate(site)
2841
doc.data['categories'] = item['categories'];
2942
html_document = Nokogiri::HTML.fragment(item['description']);
3043
doc.data['description'] = html_document.search('p').to_html;
31-
img_srcs = html_document.css('img').map{ |i| i['src'] }
44+
img_srcs = html_document.css('img').map{ |i| i['src'] }
3245
doc.data['image'] = img_srcs[0];#item['thumbnail'];
3346
jekyll_coll.docs << doc
3447
end

0 commit comments

Comments
 (0)