-
Notifications
You must be signed in to change notification settings - Fork 0
/
generator.rb
53 lines (45 loc) · 1.61 KB
/
generator.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# vim: fileencoding=utf-8
require 'uri'
require 'mechanize'
require 'rgrb/plugin/configurable_generator'
module RGRB
module Plugin
# ウェブページタイトル自動取得プラグイン
module UrlFetchTitle
# UrlFetchTitle の出力テキスト生成器
class Generator
include ConfigurableGenerator
def initialize(*args)
super
@agent = Mechanize.new
@agent.user_agent = "RGRB/#{RGRB::VERSION} (Creator's Network IRC bot)"
end
def configure(config_data)
@no_ssl_verify = config_data['NoSSLVerify']
@agent.open_timeout = config_data['OpenTimeout']
@agent.read_timeout = config_data['ReadTimeout']
@reply_prefix = config_data['ReplyPrefix']
@reply_suffix = config_data['ReplySuffix']
end
# 誰かが発言した URL にアクセスし、ページの title タグを取得する
# @param [String] タイトルを取得するページのURL
# @return [String] 取得したタイトル
def fetch_title(url)
if no_ssl_verify?(url)
@agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
page = @agent.get(url)
@reply_prefix + page.title + @reply_suffix
end
# 与えられた URL が、自己署名証明書を許可するドメインか調べる
# @param [String] 調べる URL
# @return [Boolean]
def no_ssl_verify?(url)
hostname = URI.parse(url).hostname
hostname.end_with?(*@no_ssl_verify)
end
private :no_ssl_verify?
end
end
end
end