x2ch 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/x2ch.rb +48 -7
- metadata +3 -3
data/lib/x2ch.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'open-uri'
|
4
4
|
require 'kconv'
|
5
|
+
require 'zlib'
|
5
6
|
|
6
7
|
module X2CH
|
7
8
|
class Bbs
|
@@ -78,14 +79,15 @@ module X2CH
|
|
78
79
|
end
|
79
80
|
|
80
81
|
class Thread
|
81
|
-
attr_accessor :url, :name, :num
|
82
|
+
attr_accessor :url, :dat, :name, :num
|
82
83
|
|
83
84
|
def initialize(url, dat, name, num)
|
84
85
|
@url, @dat, @name, @num = url, dat, name, num
|
85
86
|
end
|
86
87
|
|
87
|
-
def posts
|
88
|
-
Dat.
|
88
|
+
def posts(if_modified_since = nil, range = nil)
|
89
|
+
res = Dat.download(@url + "dat/" + @dat, if_modified_since, range)
|
90
|
+
ArrayResponse.new(Dat.parse(res), res.status, res.last_modified, res.content_encoding, res.body_size)
|
89
91
|
end
|
90
92
|
|
91
93
|
def each(&blk)
|
@@ -104,11 +106,50 @@ module X2CH
|
|
104
106
|
end
|
105
107
|
|
106
108
|
class Agent
|
107
|
-
def self.download(url)
|
108
|
-
|
109
|
+
def self.download(url, if_modified_since = nil, range = nil)
|
110
|
+
header = {"User-Agent" => "Monazilla/1.00 (x2ch/0.9.1)", "Accept-Encoding" => 'gzip'}
|
111
|
+
if if_modified_since
|
112
|
+
header["If-Modified-Since"] = if_modified_since
|
113
|
+
end
|
114
|
+
if range
|
115
|
+
header["Range"] = range
|
116
|
+
end
|
117
|
+
begin
|
118
|
+
res = open(url, header){|f|
|
119
|
+
body = nil
|
120
|
+
if f.content_encoding.index('gzip')
|
121
|
+
body = Zlib::GzipReader.new(f).read.toutf8
|
122
|
+
else
|
123
|
+
body = f.read.toutf8
|
124
|
+
end
|
125
|
+
[body, f.status, f.last_modified, f.content_encoding, body.size]
|
126
|
+
}
|
127
|
+
rescue OpenURI::HTTPError => e
|
128
|
+
raise DownloadError.new(e.message)
|
129
|
+
end
|
130
|
+
StringResponse.new(res[0], res[1], res[2], res[3], res[4])
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
class DownloadError < StandardError ; end
|
135
|
+
|
136
|
+
module Response
|
137
|
+
attr_accessor :status, :last_modified, :content_encoding, :body_size
|
138
|
+
|
139
|
+
def initialize(obj, status, last_modified, content_encoding, body_size)
|
140
|
+
@status, @last_modified, @content_encoding, @body_size = status, last_modified, content_encoding, body_size
|
141
|
+
super(obj)
|
109
142
|
end
|
110
143
|
end
|
111
144
|
|
145
|
+
class StringResponse < String
|
146
|
+
include Response
|
147
|
+
end
|
148
|
+
|
149
|
+
class ArrayResponse < Array
|
150
|
+
include Response
|
151
|
+
end
|
152
|
+
|
112
153
|
class BbsMenu
|
113
154
|
IGNORE_CATEGORIES = ['特別企画', 'チャット', 'ツール類']
|
114
155
|
IGNORE_BOARDS = ['2chプロジェクト', 'いろいろランク']
|
@@ -165,8 +206,8 @@ module X2CH
|
|
165
206
|
end
|
166
207
|
|
167
208
|
class Dat
|
168
|
-
def self.download(url)
|
169
|
-
Agent.download(url)
|
209
|
+
def self.download(url, if_modified_since = nil, range = nil)
|
210
|
+
Agent.download(url, if_modified_since, range)
|
170
211
|
end
|
171
212
|
|
172
213
|
def self.parse(dat)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: x2ch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-14 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: 2ch downloader and parser library
|
15
15
|
email: mail@xmisao.com
|
@@ -18,7 +18,7 @@ extensions: []
|
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
20
|
- lib/x2ch.rb
|
21
|
-
homepage:
|
21
|
+
homepage: https://github.com/xmisao/x2ch
|
22
22
|
licenses: []
|
23
23
|
post_install_message:
|
24
24
|
rdoc_options: []
|