Module: PinterestDL::Extractors::Image
- Defined in:
- lib/pinterest_dl/extractors/image.rb
Constant Summary collapse
- QUALITY_PATH =
{ originals: 'originals', '736x': '736x', '474x': '474x', '236x': '236x' }.freeze
Class Method Summary collapse
- .apply_quality(url, quality) ⇒ Object
- .extract(html, quality: :originals) ⇒ Object
- .from_json_ld(html) ⇒ Object
- .from_open_graph(html) ⇒ Object
- .from_raw_pattern(html) ⇒ Object
Class Method Details
.apply_quality(url, quality) ⇒ Object
39 40 41 42 43 44 45 46 |
# File 'lib/pinterest_dl/extractors/image.rb', line 39 def apply_quality(url, quality) return url unless url.include?('i.pinimg.com') target = QUALITY_PATH[quality.to_sym] return url unless target url.sub(%r{/(?:originals|736x|474x|236x)/}, "/#{target}/") end |
.extract(html, quality: :originals) ⇒ Object
16 17 18 19 20 21 |
# File 'lib/pinterest_dl/extractors/image.rb', line 16 def extract(html, quality: :originals) url = from_json_ld(html) || from_open_graph(html) || from_raw_pattern(html) return nil unless url apply_quality(url, quality) end |
.from_json_ld(html) ⇒ Object
23 24 25 |
# File 'lib/pinterest_dl/extractors/image.rb', line 23 def from_json_ld(html) PinterestDL::Extractors::JsonLd.content_url(html, 'ImageObject') end |
.from_open_graph(html) ⇒ Object
27 28 29 30 |
# File 'lib/pinterest_dl/extractors/image.rb', line 27 def from_open_graph(html) match = html.match(/<meta[^>]*property=["']og:image["'][^>]*content=["']([^"']+)["']/) match && match[1] end |
.from_raw_pattern(html) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/pinterest_dl/extractors/image.rb', line 32 def from_raw_pattern(html) match = html.match( %r{https://i\.pinimg\.com/(?:originals|736x|474x|236x)/[A-Za-z0-9_\-/]+\.(?:jpg|jpeg|png|gif|webp)}i ) match && match[0] end |