simple2ch 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -7
- data/lib/simple2ch.rb +19 -24
- data/lib/simple2ch/dat.rb +6 -0
- data/lib/simple2ch/thre.rb +24 -3
- data/lib/simple2ch/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acd8e7b89961a88b05475aed31e51d4406704f6d
|
4
|
+
data.tar.gz: a73c6c26db2fd2998b8d837e803d59a27c8122d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 215c6e5ab3951dc9f5094c45555639e7050b451408236ca72a1596809cf0aa69e5a090bfb8a191af470b434289e4cee8688e7464049443ca6b362740934f1604
|
7
|
+
data.tar.gz: 38ada2533a803b733f6538d6f62e6c7f4de8ceec6e654189c9c68b954249c0a7285989254189e470455eb5f8fb8d2e2565b00e922aa40809ca380e2315704dac
|
data/README.md
CHANGED
@@ -8,17 +8,15 @@ Ruby用の2chの簡易リーダーです。
|
|
8
8
|
|
9
9
|
## 更新内容
|
10
10
|
|
11
|
+
* [v0.1.7]
|
12
|
+
* 機能追加
|
13
|
+
* Thre#url, Thre#dat_urlの追加
|
14
|
+
* バグ修正
|
15
|
+
* エンコーディング関連
|
11
16
|
* [v0.1.6]
|
12
17
|
* 機能追加
|
13
18
|
* 板一覧の取得に対応
|
14
19
|
* URLからスレの取得に対応
|
15
|
-
* [v0.1.5]
|
16
|
-
* デバッグ
|
17
|
-
* StandardErrorで例外を捕縛できない問題を修正
|
18
|
-
* DatParseException, NotA2chUrlException発生時に与えられたURLを表示するよう変更
|
19
|
-
* 機能追加
|
20
|
-
* おーぷん2ちゃんねる対応
|
21
|
-
|
22
20
|
|
23
21
|
## Installation
|
24
22
|
|
data/lib/simple2ch.rb
CHANGED
@@ -22,18 +22,14 @@ module Simple2ch
|
|
22
22
|
|
23
23
|
# HTTPでGETする
|
24
24
|
# @param [URI] url URL
|
25
|
-
# @param [Symbol] site :net, :sc, :openのいずれか.(2ch.net or 2ch.sc or open2ch.net)
|
26
25
|
# @return [String] 取得本文
|
27
|
-
def self.fetch(url
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
else
|
35
|
-
raise RuntimeError, "Invalid type of 2ch was given: #{site}"
|
36
|
-
end
|
26
|
+
def self.fetch(url)
|
27
|
+
encode = if url.to_s.index('subject.txt') || url.to_s.index('.dat') || url.to_s.index('bbsmenu')
|
28
|
+
'SHIFT_JIS'
|
29
|
+
else
|
30
|
+
'UTF-8'
|
31
|
+
end
|
32
|
+
OpenURI.open_uri(url, 'r:binary').read.force_encoding(encode).encode('utf-8', undef: :replace, invalid: :replace, replace: '〓')
|
37
33
|
end
|
38
34
|
|
39
35
|
# bbsmenuのURLが渡されればセットして,板リストを返す
|
@@ -43,7 +39,7 @@ module Simple2ch
|
|
43
39
|
def self.boards(bbsmenu_url=nil, force_refresh:nil)
|
44
40
|
if bbsmenu_url
|
45
41
|
bbsmenu_urls = {
|
46
|
-
net: 'http://menu.2ch.net/bbsmenu.html', sc: 'http://2ch.sc/bbsmenu.html', open: 'http://open2ch.net/
|
42
|
+
net: 'http://menu.2ch.net/bbsmenu.html', sc: 'http://2ch.sc/bbsmenu.html', open: 'http://open2ch.net/bbsmenu.html'
|
47
43
|
}
|
48
44
|
# http://www.rubular.com/r/u1TJbQAULD
|
49
45
|
board_extract_regex = /<A HREF=http:\/\/(?<subdomain>\w+).(?<openflag>open|)2ch.(?<tld>sc|net)\/(?<board_name>\w+)\/>(?<board_name_ja>.+)<\/A>/
|
@@ -55,22 +51,22 @@ module Simple2ch
|
|
55
51
|
data = nil
|
56
52
|
boards_array = []
|
57
53
|
|
58
|
-
raise RuntimeError, "Failed to fetch #{url}" if (data = fetch(URI.parse(prepared_bbsmenu_url)
|
54
|
+
raise RuntimeError, "Failed to fetch #{url}" if (data = fetch(URI.parse(prepared_bbsmenu_url))).empty?
|
59
55
|
raise RuntimeError, "Failed to parse #{url}" if (boards_array=data.scan(board_extract_regex).uniq).empty?
|
60
56
|
|
61
57
|
boards_array.each do |b|
|
62
58
|
boards << Simple2ch::Board.new(b[4],"http://#{b[0]}.#{b[1]}2ch.#{b[2]}/#{b[3]}/")
|
63
59
|
end
|
64
60
|
@@boards[type_of_2ch] = boards
|
65
|
-
else
|
66
|
-
@@boards[type_of_2ch]
|
67
61
|
end
|
68
62
|
end
|
63
|
+
@@boards[type_of_2ch]
|
69
64
|
end
|
70
65
|
|
71
66
|
# 2chのタイプを返す
|
72
67
|
# @param [String] url URL
|
73
68
|
# @return [Symbol] :open or :net or :sc
|
69
|
+
# @raise [NotA2chUrlException] 2chのURLでないURLが与えられた際に発生
|
74
70
|
def self.type_of_2ch(url)
|
75
71
|
parsed_url = self.parse_url(url)
|
76
72
|
openflag = parsed_url[:openflag]
|
@@ -82,7 +78,7 @@ module Simple2ch
|
|
82
78
|
elsif !openflag && tld=='sc'
|
83
79
|
:sc
|
84
80
|
else
|
85
|
-
|
81
|
+
raise NotA2chUrlException, "Given URL: #{url}"
|
86
82
|
end
|
87
83
|
end
|
88
84
|
|
@@ -92,19 +88,18 @@ module Simple2ch
|
|
92
88
|
# @raise [NotA2chUrlException] 2chのURLでないURLが与えられた際に発生
|
93
89
|
def self.parse_url(url)
|
94
90
|
# http://www.rubular.com/r/h63xdfmQIH
|
95
|
-
case url
|
91
|
+
case url.to_s
|
96
92
|
when /http:\/\/(?<server_name>.+)\.(?<openflag>open)?2ch.(?<tld>net|sc)\/test\/read.cgi\/(?<board_name>.+)\/(?<thread_key>[0-9]+)/,
|
97
93
|
/http:\/\/(?<server_name>.+)\.(?<openflag>open)?2ch.(?<tld>net|sc)\/(?<board_name>.+)\/subject\.txt/,
|
98
94
|
/http:\/\/(?<server_name>.+)\.(?<openflag>open)?2ch\.(?<tld>net|sc)\/(?<board_name>.+)\//,
|
99
95
|
/http:\/\/(?<server_name>.+)\.(?<openflag>open)?2ch\.(?<tld>net|sc)\/(?<board_name>\w+)/,
|
100
96
|
/http:\/\/(?<server_name>.+)\.(?<openflag>open)?2ch.(?<tld>net|sc)\/(.+)\/dat\/(?<thread_key>[0-9]+)\.dat/,
|
101
|
-
/http:\/\/(?:(?<server_name
|
102
|
-
{
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
}
|
97
|
+
/http:\/\/(?:(?<server_name>.*)\.)?(?:(?<openflag>open)?)2ch\.(?<tld>sc|net)/
|
98
|
+
{server_name: ($~[:server_name] rescue nil),
|
99
|
+
board_name: ($~[:board_name] rescue nil),
|
100
|
+
openflag: ($~[:openflag] rescue nil),
|
101
|
+
tld: $~[:tld],
|
102
|
+
thread_key: ($~[:thread_key] rescue nil) }
|
108
103
|
else
|
109
104
|
raise NotA2chUrlException, "Given URL: #{url}"
|
110
105
|
end
|
data/lib/simple2ch/dat.rb
CHANGED
@@ -2,6 +2,8 @@ module Simple2ch
|
|
2
2
|
class Dat
|
3
3
|
# @return [String] スレッドキー
|
4
4
|
attr_reader :thread_key
|
5
|
+
# @return [String] タイトル
|
6
|
+
attr_reader :title
|
5
7
|
|
6
8
|
# @param [Thre] thre スレッド
|
7
9
|
def initialize(thre)
|
@@ -47,6 +49,10 @@ module Simple2ch
|
|
47
49
|
fetch_dat.each_line do |l|
|
48
50
|
res_num += 1
|
49
51
|
begin
|
52
|
+
if res_num==1
|
53
|
+
title = l.split('<>').pop
|
54
|
+
@title = title unless @title
|
55
|
+
end
|
50
56
|
@reses << Res.parse(res_num, l, @thre)
|
51
57
|
rescue KakoLogException
|
52
58
|
@f_kako_log = true
|
data/lib/simple2ch/thre.rb
CHANGED
@@ -42,7 +42,12 @@ module Simple2ch
|
|
42
42
|
def self.create_from_url(url)
|
43
43
|
board = Simple2ch::Board.new('', url, fetch_title: true)
|
44
44
|
thread_key = Simple2ch.parse_url(url)[:thread_key]
|
45
|
-
board.thres.find{|t| t.thread_key == thread_key}
|
45
|
+
thre = board.thres.find{|t| t.thread_key == thread_key}
|
46
|
+
unless thre
|
47
|
+
thre = Thre.new board, thread_key
|
48
|
+
thre.reses
|
49
|
+
end
|
50
|
+
thre
|
46
51
|
end
|
47
52
|
|
48
53
|
# Datを解析して、レスを返す
|
@@ -86,6 +91,20 @@ module Simple2ch
|
|
86
91
|
@board ? @board.type_of_2ch : nil
|
87
92
|
end
|
88
93
|
|
94
|
+
# スレのURLを返す
|
95
|
+
# @return [String] スレのURL
|
96
|
+
def url
|
97
|
+
tld = type_of_2ch == :sc ? :sc : :net
|
98
|
+
"http://#{@board.server_name}.#{type_of_2ch==:open ? 'open' : ''}2ch.#{tld}/test/read.cgi/#{@board.board_name}/#{@thread_key}/"
|
99
|
+
end
|
100
|
+
|
101
|
+
# スレのdatURLを返す
|
102
|
+
# @return [String] スレのdatURL
|
103
|
+
def dat_url
|
104
|
+
tld = type_of_2ch == :sc ? :sc : :net
|
105
|
+
"http://#{@board.server_name}.#{type_of_2ch==:open ? 'open' : ''}2ch.#{tld}/#{@board.board_name}/dat/#{@thread_key}.dat"
|
106
|
+
end
|
107
|
+
|
89
108
|
private
|
90
109
|
# 全てのレスに対し、あるレスへのアンカーが書き込まれているレス番号のハッシュを返す
|
91
110
|
# @return [Hash]{ res_num<Fixnum> => res_nums<Array<Fixnum>> } レス番号のハッシュ
|
@@ -99,12 +118,14 @@ module Simple2ch
|
|
99
118
|
ret
|
100
119
|
end
|
101
120
|
|
102
|
-
|
103
121
|
# Datを取ってきてレスと過去ログかどうかを返す
|
104
122
|
# @return [Boolean] f_kako_log 過去ログか否か
|
105
123
|
def fetch_dat
|
106
124
|
dat = Dat.new(self)
|
107
|
-
@reses
|
125
|
+
@reses = dat.reses
|
126
|
+
@num_of_response = @reses.size
|
127
|
+
@f_kako_log = dat.kako_log?
|
128
|
+
@title = dat.title if !@title || @title.empty?
|
108
129
|
dat = nil
|
109
130
|
@f_kako_log
|
110
131
|
end
|
data/lib/simple2ch/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple2ch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dogwood008
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|