プロジェクト

全般

プロフィール

提案 #1262 » photo_support_ogp.patch

cob odo, 2018-06-27 17:42

差分を表示:

core/plugin/photo_support/photo_support.rb
9 9
  class << self
10 10
    extend Memoist
11 11

  
12
    def via_xpath(display_url, xpath)
13
      connection = HTTPClient.new
14
      page = connection.get_content(display_url)
15
      unless page.empty?
16
        doc = Nokogiri::HTML(page)
17
        doc.xpath(xpath).first
18
      end
19
    end
20

  
12 21
    # Twitter cardsのURLを画像のURLに置き換える。
13 22
    # HTMLを頻繁にリクエストしないように、このメソッドを通すことでメモ化している。
14 23
    # ==== Args
......
16 25
    # ==== Return
17 26
    # String 画像URL(http://d250g2.com/d250g2.jpg)
18 27
    def d250g2(display_url)
19
      connection = HTTPClient.new
20
      page = connection.get_content(display_url)
21
      unless page.empty?
22
        doc = Nokogiri::HTML(page)
23
        doc.css('meta[name="twitter:image:src"]').first.attribute('content') end end
28
      r = via_xpath(display_url, "//meta[@name='twitter:image']/@content")
29
      return r if r
30
      via_xpath(display_url, "//meta[@name='twitter:image:src']/@content")
31
    end
24 32
    memoize :d250g2
33

  
34
    # OpenGraphProtocol対応のURLを画像のURLに置き換える。
35
    # HTMLを頻繁にリクエストしないように、このメソッドを通すことでメモ化している。
36
    # ==== Args
37
    # [display_url] https://www.instagram.com/p/Bj4XIgNHacT/
38
    # ==== Return
39
    # String 画像URL(https://scontent-nrt1-1.cdninstagram.com/vp/867c287aac67e555f873458042d25c70/5BC16C10/t51.2885-15/e35/33958857_788214964721700_3554146954256580608_n.jpg)
40
    def インスタ映え(display_url)
41
      via_xpath(display_url, "//meta[@property='og:image']/@content") end
42
    memoize :"インスタ映え"
25 43
  end
26 44
end
27 45

  
......
138 156
  end
139 157

  
140 158
  # Fotolog
141
  defimageopener('Fotolog', %r<http://(?:www\.)fotolog\.com/\w+/\d+/?>) do |display_url|
142
    connection = HTTPClient.new
143
    page = connection.get_content(display_url)
144
    next nil if page.empty?
145
    doc = Nokogiri::HTML(page)
146
    result = doc.css('meta').lazy.find_all{ |dom|
147
      'og:image' == dom.attribute('property').to_s
148
    }.first
149
    open(result.attribute('content'))
159
  defimageopener('Fotolog', %r<\Ahttps?://(?:www\.)?fotolog\.com/\w+/\d+/?>) do |display_url|
160
    img = Plugin::PhotoSupport.インスタ映え(display_url)
161
    open(img) if img
150 162
  end
151 163

  
152 164
  # フォト蔵
......
160 172

  
161 173
  # instagram
162 174
  defimageopener('instagram', Plugin::PhotoSupport::INSTAGRAM_PATTERN) do |display_url|
163
    notice display_url
164
    connection = HTTPClient.new
165
    page = connection.get_content(display_url)
166
    next nil if page.empty?
167
    doc = Nokogiri::HTML(page)
168
    result = doc.xpath("//meta[@property='og:image']/@content").first
169
    open(result)
175
    img = Plugin::PhotoSupport.インスタ映え(display_url)
176
    open(img) if img
170 177
  end
171 178

  
172 179
  # d250g2
......
237 244
    end
238 245
    open(src)
239 246
  end
247

  
248
  # マシュマロ
249
  defimageopener('marshmallow-qa', %r<\Ahttps?://marshmallow-qa\.com/messages/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}>) do |display_url|
250
    img = Plugin::PhotoSupport.インスタ映え(display_url)
251
    open(img) if img
252
  end
253

  
254
  # peing
255
  defimageopener('peing', %r<\Ahttps?://peing\.net/\w+/(?:qs/\d+|q/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\z>) do |display_url|
256
    img = Plugin::PhotoSupport.d250g2(display_url)
257
    open(img) if img
258
  end
240 259
end
(2-2/2)