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
|