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

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