提案 #1262 » photo_support_ogp.patch
| core/plugin/photo_support/photo_support.rb | ||
|---|---|---|
| 
       class << self 
   | 
||
| 
         extend Memoist 
   | 
||
| 
         def via_xpath(display_url, xpath) 
   | 
||
| 
           connection = HTTPClient.new 
   | 
||
| 
           page = connection.get_content(display_url) 
   | 
||
| 
           unless page.empty? 
   | 
||
| 
             doc = Nokogiri::HTML(page) 
   | 
||
| 
             doc.xpath(xpath).first 
   | 
||
| 
           end 
   | 
||
| 
         end 
   | 
||
| 
         # Twitter cardsのURLを画像のURLに置き換える。 
   | 
||
| 
         # HTMLを頻繁にリクエストしないように、このメソッドを通すことでメモ化している。 
   | 
||
| 
         # ==== Args 
   | 
||
| ... | ... | |
| 
         # ==== Return 
   | 
||
| 
         # String 画像URL(http://d250g2.com/d250g2.jpg) 
   | 
||
| 
         def d250g2(display_url) 
   | 
||
| 
           connection = HTTPClient.new 
   | 
||
| 
           page = connection.get_content(display_url) 
   | 
||
| 
           unless page.empty? 
   | 
||
| 
             doc = Nokogiri::HTML(page) 
   | 
||
| 
             doc.css('meta[name="twitter:image:src"]').first.attribute('content') end end 
   | 
||
| 
           via_xpath(display_url, "//meta[@name='twitter:image:src']/@content") end 
   | 
||
| 
         memoize :d250g2 
   | 
||
| 
         # OpenGraphProtocol対応のURLを画像のURLに置き換える。 
   | 
||
| 
         # HTMLを頻繁にリクエストしないように、このメソッドを通すことでメモ化している。 
   | 
||
| 
         # ==== Args 
   | 
||
| 
         # [display_url] https://www.instagram.com/p/Bj4XIgNHacT/ 
   | 
||
| 
         # ==== Return 
   | 
||
| 
         # String 画像URL(https://scontent-nrt1-1.cdninstagram.com/vp/867c287aac67e555f873458042d25c70/5BC16C10/t51.2885-15/e35/33958857_788214964721700_3554146954256580608_n.jpg) 
   | 
||
| 
         def インスタ映え(display_url) 
   | 
||
| 
           via_xpath(display_url, "//meta[@property='og:image']/@content") end 
   | 
||
| 
         memoize :"インスタ映え" 
   | 
||
| 
       end 
   | 
||
| 
     end 
   | 
||
| ... | ... | |
| 
       end 
   | 
||
| 
       # Fotolog 
   | 
||
| 
       defimageopener('Fotolog', %r<http://(?:www\.)fotolog\.com/\w+/\d+/?>) do |display_url| 
   | 
||
| 
         connection = HTTPClient.new 
   | 
||
| 
         page = connection.get_content(display_url) 
   | 
||
| 
         next nil if page.empty? 
   | 
||
| 
         doc = Nokogiri::HTML(page) 
   | 
||
| 
         result = doc.css('meta').lazy.find_all{ |dom| 
   | 
||
| 
           'og:image' == dom.attribute('property').to_s 
   | 
||
| 
         }.first 
   | 
||
| 
         open(result.attribute('content')) 
   | 
||
| 
       defimageopener('Fotolog', %r<\Ahttps?://(?:www\.)?fotolog\.com/\w+/\d+/?>) do |display_url| 
   | 
||
| 
         img = Plugin::PhotoSupport.インスタ映え(display_url) 
   | 
||
| 
         open(img) if img 
   | 
||
| 
       end 
   | 
||
| 
       # フォト蔵 
   | 
||
| ... | ... | |
| 
       # instagram 
   | 
||
| 
       defimageopener('instagram', Plugin::PhotoSupport::INSTAGRAM_PATTERN) do |display_url| 
   | 
||
| 
         notice display_url 
   | 
||
| 
         connection = HTTPClient.new 
   | 
||
| 
         page = connection.get_content(display_url) 
   | 
||
| 
         next nil if page.empty? 
   | 
||
| 
         doc = Nokogiri::HTML(page) 
   | 
||
| 
         result = doc.xpath("//meta[@property='og:image']/@content").first 
   | 
||
| 
         open(result) 
   | 
||
| 
         img = Plugin::PhotoSupport.インスタ映え(display_url) 
   | 
||
| 
         open(img) if img 
   | 
||
| 
       end 
   | 
||
| 
       # d250g2 
   | 
||
| ... | ... | |
| 
         end 
   | 
||
| 
         open(src) 
   | 
||
| 
       end 
   | 
||
| 
       # マシュマロ 
   | 
||
| 
       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| 
   | 
||
| 
         img = Plugin::PhotoSupport.インスタ映え(display_url) 
   | 
||
| 
         open(img) if img 
   | 
||
| 
       end 
   | 
||
| 
     end 
   | 
||