@@ -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