プロジェクト

全般

プロフィール

提案 #1262 » photo_support_ogp.patch

cob odo, 2018-06-11 23:43

差分を表示:

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
      via_xpath(display_url, "//meta[@name='twitter:image:src']/@content") end
24 29
    memoize :d250g2
30

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

  
......
138 153
  end
139 154

  
140 155
  # 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'))
156
  defimageopener('Fotolog', %r<\Ahttps?://(?:www\.)?fotolog\.com/\w+/\d+/?>) do |display_url|
157
    img = Plugin::PhotoSupport.インスタ映え(display_url)
158
    open(img) if img
150 159
  end
151 160

  
152 161
  # フォト蔵
......
160 169

  
161 170
  # instagram
162 171
  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)
172
    img = Plugin::PhotoSupport.インスタ映え(display_url)
173
    open(img) if img
170 174
  end
171 175

  
172 176
  # d250g2
......
237 241
    end
238 242
    open(src)
239 243
  end
244

  
245
  # マシュマロ
246
  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|
247
    img = Plugin::PhotoSupport.インスタ映え(display_url)
248
    open(img) if img
249
  end
240 250
end
(1-1/2)