nicoscraper 0.2.14 → 0.2.15
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.
- data/README.md +75 -23
- data/VERSION +1 -1
- data/lib/classes/movie.rb +4 -4
- data/lib/classes/mylist.rb +5 -7
- data/lib/classes/parser.rb +41 -28
- data/lib/classes/searcher.rb +17 -5
- data/nicoscraper.gemspec +4 -4
- data/test/{movie_spec.rb → movie_getinfo_spec.rb} +6 -4
- data/test/{mylist_getmoreinfo_spec.rb → mylist_gethtmlinfo_spec.rb} +6 -6
- metadata +5 -5
data/README.md
CHANGED
|
@@ -9,11 +9,11 @@ NicoScraper
|
|
|
9
9
|
**Author:** Masami Yonehara
|
|
10
10
|
**Copyright:** 2011
|
|
11
11
|
**License:** MIT License
|
|
12
|
-
**Latest Version:** 0.2.
|
|
12
|
+
**Latest Version:** 0.2.15
|
|
13
13
|
**Release Date:** Oct 18th 2011
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
何をするライブラリなの?
|
|
17
17
|
------
|
|
18
18
|
|
|
19
19
|
ニコニコ動画の動画ページ、検索ページ、あるいはそのAtomフィードから情報を取得し、その情報に対して各種操作を行えます。タグやマイリスト検索結果からの抽出、および抽出結果に対する反復処理を行うメソッドも備え、ランキングサイト等の制作を支援します。
|
|
@@ -59,29 +59,47 @@ NicoScraper
|
|
|
59
59
|
上の例のように、Movieクラスのインスタンス(以下「動画インスタンス」)を動画IDを与えて生成した後、`getInfo`メソッドを利用します。その結果、
|
|
60
60
|
|
|
61
61
|
p movie
|
|
62
|
-
|
|
63
|
-
<Nicos::Movie:0x00000002537aa8
|
|
62
|
+
<Nicos::Movie:0x00000003590a80
|
|
64
63
|
@video_id="sm1097445",
|
|
65
|
-
@available=true,
|
|
64
|
+
@available=true,
|
|
66
65
|
@title="【初音ミク】みくみくにしてあげる♪【してやんよ】",
|
|
67
|
-
@description="
|
|
68
|
-
@thumbnail_url="http://tn-skr2.smile
|
|
66
|
+
@description="おまえら、みっくみくにしてやんよ。歌詞はhttp://ikamo.hp.infoseek.co.jp/mikumiku.txt(9/20 1:55修正)。上げている他のもの→mylist/1450136",
|
|
67
|
+
@thumbnail_url="http://tn-skr2.smilevideo.jp/smile?i=1097445",
|
|
69
68
|
@first_retrieve=1190218922,
|
|
70
|
-
@length=99,
|
|
71
|
-
@
|
|
72
|
-
@size_high=3906547,
|
|
69
|
+
@length=99, @movie_type="flv",
|
|
70
|
+
@size_high=3906547,
|
|
73
71
|
@size_low=1688098,
|
|
74
|
-
@view_counter=
|
|
75
|
-
@comment_num=
|
|
76
|
-
@mylist_counter=
|
|
77
|
-
@last_res_body="
|
|
78
|
-
@watch_url="http://www.nicovideo.jp
|
|
72
|
+
@view_counter=9151941,
|
|
73
|
+
@comment_num=2568537,
|
|
74
|
+
@mylist_counter=184674,
|
|
75
|
+
@last_res_body="...",
|
|
76
|
+
@watch_url="http://www.nicovideo.jp/watch/sm1097445",
|
|
79
77
|
@thumb_type="video",
|
|
80
78
|
@embeddable=1,
|
|
81
79
|
@no_live_play=0,
|
|
82
|
-
@tags_jp=[
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
@tags_jp=[
|
|
81
|
+
{"value"=>"音楽", :locked=>true, :category=>true},
|
|
82
|
+
{"value"=>"初音ミク", :locked=>true},
|
|
83
|
+
{"value"=>"みくみくにしてあげる♪", :locked=>true},
|
|
84
|
+
{"value"=>"ミクオリジナル曲"},
|
|
85
|
+
{"value"=>"ika"},
|
|
86
|
+
{"value"=>"VOCALOID殿堂入り"},
|
|
87
|
+
{"value"=>"元気が出るミクうた"},
|
|
88
|
+
{"value"=>"VOCALOID"},
|
|
89
|
+
{"value"=>"初音ミク名曲リンク"},
|
|
90
|
+
{"value"=>"夜みっく"}],
|
|
91
|
+
@tags_tw=[
|
|
92
|
+
{"value"=>"彈幕強大"},
|
|
93
|
+
{"value"=>"把你MikuMiku掉♪"},
|
|
94
|
+
{"value"=>"週刊vocaloid排行榜第1名獲得曲"},
|
|
95
|
+
{"value"=>"翻譯歌曲"},
|
|
96
|
+
{"value"=>"台灣VOCALOID評論人氣曲"},
|
|
97
|
+
{"value"=>"最強彈幕傳說"},
|
|
98
|
+
{"value"=>"3次第一的傳說"},
|
|
99
|
+
{"value"=>"已翻譯歌曲"}],
|
|
100
|
+
@user_id=70391
|
|
101
|
+
>
|
|
102
|
+
|
|
85
103
|
このように、動画インスタンスにインスタンス変数として各種情報が付加されます。
|
|
86
104
|
|
|
87
105
|
###マイリスト情報の取得
|
|
@@ -115,7 +133,7 @@ NicoScraper
|
|
|
115
133
|
],
|
|
116
134
|
... >
|
|
117
135
|
|
|
118
|
-
|
|
136
|
+
というように、動画インスタンスを勝手につくりだして配列として保持します。もちろん、これらの動画インスタンスには独立した操作を加えられます。ただし、取得ソースが異なるため、MovieクラスのgetInfoメソッドおよびgetHtmlInfoメソッドと、全く同じ内容が取得できるわけではありません。
|
|
119
137
|
|
|
120
138
|
###検索結果の取得
|
|
121
139
|
|
|
@@ -143,15 +161,15 @@ NicoScraper
|
|
|
143
161
|
Time.at(movie.first_retrieve).to_s
|
|
144
162
|
}
|
|
145
163
|
|
|
146
|
-
#
|
|
147
|
-
|
|
164
|
+
# :continueをブロック内で返すと検索を継続
|
|
165
|
+
:continue unless terminate
|
|
148
166
|
}
|
|
149
167
|
|
|
150
168
|
この例では、`VOCALOID`というタグの付く動画を、`:post_new`=投稿日時が新しい順からさかのぼって取得し、取得した動画の日付が3日前の0時0分を超えるまでそれを続けます。
|
|
151
169
|
|
|
152
170
|
ブロック内の第1引数には取得結果に基づく動画インスタンスが与えられるのですが、これは32個分の配列です。なぜ32個のセットなのかと言うと、ご存知のようにニコニコ動画の検索画面はページで区切られており、Searcherモジュールの各メソッドはページ毎に情報を取得し、ページ単位でブロックをコールするからです。HTMLから取得するにしろAtomフィードから取得するにしろ、1ページに32個の動画情報が含まれています。第2引数にはそれまでのアクセス成否情報等が渡されます。
|
|
153
171
|
|
|
154
|
-
|
|
172
|
+
そして、**ブロック内でシンボル`:continue`を返すことによりスクレイプが継続します。**つまり、`"continue"`文字列を返し続けるロジックを組み込まないと、1ページ目を読んだ時点で処理が終了します。これは意図せざる過剰アクセスを防ぐための措置です。
|
|
155
173
|
|
|
156
174
|
上の例では、取得した動画の日付を調べ、3日前の0時0分より前の動画に到達すればそこでループを終える設計です。ループを継続するために取得情報を使うかどうかは任意なので、例えば10分間の制限で取得出来るだけ取得するということも可能でしょう。
|
|
157
175
|
|
|
@@ -230,34 +248,57 @@ NicoScraper
|
|
|
230
248
|
ニコニコ動画のサーバのレスポンスには、正常にデータを返す以外にいくつかの反応があります。この反応に応じて再試行するか、それともそのリクエストをパスするかが決定されます。以下はレスポンスの内容と、それに対応するウェイト設定用ハッシュのキー、およびメソッドが返すステータスです。ステータスについては各メソッドの説明を参照して下さい。
|
|
231
249
|
|
|
232
250
|
**削除済み** `:deleted`
|
|
251
|
+
|
|
233
252
|
**404** `:notFound`
|
|
234
253
|
|
|
235
254
|
再試行をせず、次の処理に移行します。
|
|
255
|
+
|
|
256
|
+
<br>
|
|
257
|
+
|
|
236
258
|
|
|
237
259
|
**非公開** `:notPublic`
|
|
260
|
+
|
|
238
261
|
**コミュニティ限定** `:limInCommunity`
|
|
239
262
|
|
|
240
263
|
動画がマイリストが非公開設定されている場合、あるいはコミュニティ未加入者には非公開になっている動画があります。後者については(前者も自分のものであれば)ログイン処理を事前に行うことで技術的には取得可能ですが、v0.2では未実装です。これらの動画の場合、処理は404に準じます。なお、この場合は内部的には403が返ってきています。
|
|
241
264
|
|
|
265
|
+
<br>
|
|
266
|
+
|
|
242
267
|
**連続アクセスの拒絶** `:deniedSeqReq`
|
|
243
268
|
|
|
244
269
|
"短時間での連続アクセスはご遠慮ください" と表示される場合です。設定に従って**再試行します。**
|
|
245
270
|
|
|
271
|
+
<br>
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
|
|
246
275
|
**サーバ混雑時** `:serverIsBusy`
|
|
247
276
|
|
|
248
277
|
"大変ご迷惑をおかけいたしますが、しばらく時間をあけてから再度検索いただくようご協力をお願いいたします。" と表示される場合です。**再試行します。**
|
|
249
278
|
|
|
279
|
+
<br>
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
|
|
250
283
|
**503** `:serviceUnavailable`
|
|
251
284
|
|
|
252
285
|
メンテナンス時に限らず、稼働時にも稀に発生します。処理全体を中断することはなく、**再試行します。**
|
|
253
286
|
|
|
287
|
+
<br>
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
|
|
254
291
|
**タイムアウト** `:timedOut`
|
|
292
|
+
|
|
255
293
|
**再試行します。**
|
|
256
294
|
|
|
257
295
|
再試行するメソッドの場合、ウェイトの`increment`の秒数、次回以降の1リクエスト毎のウェイトを増加させます。
|
|
258
296
|
|
|
259
297
|
上記のどれにも該当しない場合、つまり取得とパースに成功した場合には`:succeed`を返します。なお、マイリストは有効に存在し取得もできるが、動画は存在しないという場合も`:succeed`であり、@movies配列が空になるだけです。
|
|
260
298
|
|
|
299
|
+
<br>
|
|
300
|
+
|
|
301
|
+
|
|
261
302
|
###設定方法
|
|
262
303
|
|
|
263
304
|
ウェイトは、全メソッドが共有する設定と、各インスタンスのみに有効な設定の2つを定義できます。
|
|
@@ -327,7 +368,9 @@ GitHubを経由して下さってもいいのですが、まだ慣れていな
|
|
|
327
368
|
|
|
328
369
|
+ HTMLから取得・解析するメソッドの追加。
|
|
329
370
|
|
|
330
|
-
+
|
|
371
|
+
+ キーワード検索メソッドの実装。
|
|
372
|
+
|
|
373
|
+
+ コメント取得メソッドの実装。
|
|
331
374
|
|
|
332
375
|
**v 0.4-**
|
|
333
376
|
|
|
@@ -338,6 +381,15 @@ GitHubを経由して下さってもいいのですが、まだ慣れていな
|
|
|
338
381
|
|
|
339
382
|
###更新履歴
|
|
340
383
|
|
|
384
|
+
**v 0.2.15 **
|
|
385
|
+
|
|
386
|
+
+ getMoreInfoメソッドを、getHtmlInfoメソッドへ改名。
|
|
387
|
+
|
|
388
|
+
+ タグ情報が適切に取得できないバグを解消。
|
|
389
|
+
|
|
390
|
+
+ タグ情報の構造を変更。個々のタグ情報を、ロックされているか、カテゴリタグであるかの識別プロパティを持ちうるハッシュにし、それを配列として保持する方式へ。
|
|
391
|
+
|
|
392
|
+
|
|
341
393
|
**v 0.2.13 0.2.14**
|
|
342
394
|
|
|
343
395
|
+ タイトル類似性判定ロジックを、編集距離う使う手法からn-gram法(n=3)に変更。
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.2.
|
|
1
|
+
0.2.15
|
data/lib/classes/movie.rb
CHANGED
|
@@ -23,14 +23,14 @@ module Nicos
|
|
|
23
23
|
|
|
24
24
|
# 指定されたマイリストに自分が入っていれば、真を返す。
|
|
25
25
|
#
|
|
26
|
-
# 内部的にMylist::
|
|
26
|
+
# 内部的にMylist::getHtmlInfoを利用しているため、もし指定したマイリストの他の情報を使いたければ、
|
|
27
27
|
# ブロック中に処理を記述することで、getInfoの取得結果を共用することができる。
|
|
28
28
|
# @param [Fixnum] mylistId マイリストID
|
|
29
29
|
# @return [Boolean]
|
|
30
30
|
def isBelongsTo (mylistId, &block)
|
|
31
31
|
isBelongs = false
|
|
32
32
|
thisMl = Nicos::Mylist.new(mylistId)
|
|
33
|
-
thisMl.
|
|
33
|
+
thisMl.getHtmlInfo
|
|
34
34
|
|
|
35
35
|
thisMl.movies.each do |movie|
|
|
36
36
|
isBelongs = true if movie.video_id == @video_id
|
|
@@ -456,7 +456,7 @@ module Nicos
|
|
|
456
456
|
|
|
457
457
|
# 日本語タグ
|
|
458
458
|
#
|
|
459
|
-
# @return [Array<
|
|
459
|
+
# @return [Array<Hash>]
|
|
460
460
|
# <b>取得可能なメソッド</b>
|
|
461
461
|
# {Nicos::Movie#getInfo Movie::getInfo}
|
|
462
462
|
# {Nicos::Movie#getInfo Movie::getHtmlInfo}
|
|
@@ -464,7 +464,7 @@ module Nicos
|
|
|
464
464
|
|
|
465
465
|
# 台湾タグ
|
|
466
466
|
#
|
|
467
|
-
# @return [Array<
|
|
467
|
+
# @return [Array<Hash>]
|
|
468
468
|
# <b>取得可能なメソッド</b>
|
|
469
469
|
# {Nicos::Movie#getInfo Movie::getInfo}
|
|
470
470
|
attr_accessor :tags_tw
|
data/lib/classes/mylist.rb
CHANGED
|
@@ -115,36 +115,34 @@ module Nicos
|
|
|
115
115
|
#
|
|
116
116
|
# @return [Fixnum] Trigram法による、
|
|
117
117
|
def getInfo
|
|
118
|
-
parsed = nil
|
|
119
118
|
@available = false
|
|
120
119
|
|
|
121
120
|
res = connect(
|
|
122
121
|
Nicos::Connector::MylistAtom.new(),
|
|
123
122
|
:atom )
|
|
124
|
-
|
|
123
|
+
parsed = parse(res[:result]) do |result|
|
|
125
124
|
Nicos::Parser::Xml::mylistAtom(result[:body])
|
|
126
125
|
end
|
|
127
126
|
|
|
128
127
|
{
|
|
129
|
-
:parsed =>
|
|
128
|
+
:parsed => parsed,
|
|
130
129
|
:status => res[:status][:status],
|
|
131
130
|
:retry => res[:status][:retry]
|
|
132
131
|
}
|
|
133
132
|
end
|
|
134
133
|
|
|
135
|
-
def
|
|
136
|
-
parsed = nil
|
|
134
|
+
def getHtmlInfo
|
|
137
135
|
@available = false
|
|
138
136
|
|
|
139
137
|
res = connect(
|
|
140
138
|
Nicos::Connector::MylistHtml.new(),
|
|
141
139
|
:html )
|
|
142
|
-
|
|
140
|
+
parsed = parse(res[:result]) do |result|
|
|
143
141
|
Nicos::Parser::Html::mylist(result[:body])
|
|
144
142
|
end
|
|
145
143
|
|
|
146
144
|
{
|
|
147
|
-
:parsed =>
|
|
145
|
+
:parsed => parsed,
|
|
148
146
|
:status => res[:status][:status],
|
|
149
147
|
:retry => res[:status][:retry]
|
|
150
148
|
}
|
data/lib/classes/parser.rb
CHANGED
|
@@ -55,43 +55,56 @@ module Nicos
|
|
|
55
55
|
|
|
56
56
|
tags = []
|
|
57
57
|
lockedTags = []
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
category = nil
|
|
59
|
+
locked = false
|
|
60
|
+
prev = nil
|
|
61
|
+
now = nil
|
|
60
62
|
|
|
61
63
|
while doc.read
|
|
62
64
|
unless doc.node_type == XML::Reader::TYPE_END_ENTITY
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
category = doc.value
|
|
70
|
-
doc.read
|
|
71
|
-
end
|
|
65
|
+
# 終了を判別。もっと環境に依存しない上手いやり方があるはず。
|
|
66
|
+
break if doc.name == "tags"
|
|
67
|
+
|
|
68
|
+
if prev == :end
|
|
69
|
+
category = false
|
|
70
|
+
locked = false
|
|
72
71
|
end
|
|
73
72
|
|
|
73
|
+
doc.move_to_attribute("category")
|
|
74
|
+
category = true if doc.name == "category"
|
|
75
|
+
|
|
74
76
|
doc.move_to_attribute("lock")
|
|
75
|
-
if doc.name
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
locked = true if doc.name == "lock"
|
|
78
|
+
|
|
79
|
+
# ノードの開始、値、終了を判別する。
|
|
80
|
+
# 例えば<tag>と<tag lock="1"/>が、どちらも'2'と解釈され、開始と終了が区別しづらい。
|
|
81
|
+
#http://dotgnu.org/pnetlib-doc/System/Xml/XmlNodeType.html
|
|
82
|
+
nt = doc.node_type
|
|
83
|
+
now = if (nt == 2 || nt == 1) && prev != :val then :start
|
|
84
|
+
elsif (nt == 2 || nt == 15) && prev == :val then :end
|
|
85
|
+
elsif nt == 3 then :val
|
|
80
86
|
end
|
|
81
87
|
|
|
82
|
-
doc.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
88
|
+
val = doc.read_outer_xml
|
|
89
|
+
|
|
90
|
+
#puts
|
|
91
|
+
#puts now
|
|
92
|
+
#puts val
|
|
93
|
+
#puts "cat:#{category} locked:#{locked}"
|
|
94
|
+
|
|
95
|
+
if now == :val
|
|
96
|
+
obj = { "value" => val }
|
|
97
|
+
obj.merge!({ :locked => true }) if locked == true
|
|
98
|
+
obj.merge!({ :category => true }) if category == true
|
|
99
|
+
|
|
100
|
+
tags.push(obj)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
prev = now
|
|
87
104
|
end
|
|
88
105
|
end
|
|
89
106
|
|
|
90
|
-
|
|
91
|
-
:category => category,
|
|
92
|
-
:tags => tags,
|
|
93
|
-
:lockedTags => lockedTags
|
|
94
|
-
}
|
|
107
|
+
tags
|
|
95
108
|
end
|
|
96
109
|
|
|
97
110
|
hash[symbol] = value
|
|
@@ -335,7 +348,7 @@ module Nicos
|
|
|
335
348
|
|
|
336
349
|
/(description:\s\")([^"]{1,})/ =~ s
|
|
337
350
|
description = $2
|
|
338
|
-
|
|
351
|
+
|
|
339
352
|
/(id:\s)([0-9]{1,})/ =~ s
|
|
340
353
|
mylist_id = $2
|
|
341
354
|
|
|
@@ -385,4 +398,4 @@ module Nicos
|
|
|
385
398
|
module_function :mylist
|
|
386
399
|
end
|
|
387
400
|
end
|
|
388
|
-
end
|
|
401
|
+
end
|
data/lib/classes/searcher.rb
CHANGED
|
@@ -82,7 +82,7 @@ module Nicos
|
|
|
82
82
|
status = { :page => @page, :results => @connector.result}
|
|
83
83
|
order = block.call(movieObjAry, status)
|
|
84
84
|
@page += 1
|
|
85
|
-
end until order != "continue"
|
|
85
|
+
end until order != "continue" || order != :continue
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
public
|
|
@@ -171,13 +171,19 @@ module Nicos
|
|
|
171
171
|
#==基本的な使い方
|
|
172
172
|
# require 'nicoscraper'
|
|
173
173
|
#
|
|
174
|
+
# count = 0
|
|
175
|
+
#
|
|
174
176
|
# searcher = Nicos::Searcher::ByTag.new()
|
|
175
177
|
# searcher.execute('VOCALOID', :view_many) {
|
|
176
178
|
# |result, status|
|
|
177
|
-
#
|
|
179
|
+
#
|
|
180
|
+
# count += 1
|
|
181
|
+
#
|
|
178
182
|
# result.each { |movieObj|
|
|
179
183
|
# puts movieObj.title
|
|
180
184
|
# }
|
|
185
|
+
#
|
|
186
|
+
# :continue unless count >= 3
|
|
181
187
|
# }
|
|
182
188
|
#
|
|
183
189
|
# result ----
|
|
@@ -193,12 +199,18 @@ module Nicos
|
|
|
193
199
|
# ...
|
|
194
200
|
#
|
|
195
201
|
# Nicos::Searcher::ByTagのインスタンスを作り、executeメソッドに引数を与えて実行します。
|
|
196
|
-
# 結果がブロックの第1
|
|
197
|
-
#
|
|
202
|
+
# 結果がブロックの第1仮引数に渡されます。渡される結果はMovieクラスのインスタンスを含む配列ですが、
|
|
203
|
+
# MovieクラスのgetInfo、getHtmlInfoメソッドと全く同じではありません。これは、検索ページ/RSSから
|
|
204
|
+
# 動画情報を取得しており、先の2メソッドとは異なる取得元だからです。
|
|
198
205
|
#
|
|
199
206
|
#==スクレイプの継続について
|
|
200
207
|
#
|
|
201
|
-
#
|
|
208
|
+
# スクレイプは、ブロック内で明示的に ':continue' あるいは '"continue"' を返さない限り、1リクエストで
|
|
209
|
+
# 終了します。これは、意図せざる過剰アクセスを防ぐための措置です。上の例では、3回アクセスすると終了します。
|
|
210
|
+
# 帰ってきた動画インスタンスの情報を利用することで、一定の投稿日までさかのぼって取得するなどの処理も可能です
|
|
211
|
+
# (トップの例を参照)。
|
|
212
|
+
#
|
|
213
|
+
# また、ニコニコ動画の検索結果は、指定した数を一度に取得できる訳ではありません。
|
|
202
214
|
# なぜなら、現状では検索結果はHTML1ページ、もしくは1つのRSS/Atomフィードに32個を限度に渡される方式であり、
|
|
203
215
|
# ByTagクラスがその結果を利用する以上、32個=1単位という制約のもとに置かれるからです。
|
|
204
216
|
# 従って、例えば最新の投稿100個の情報が欲しいとしても、1回のリクエストでは手に入らず、
|
data/nicoscraper.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{nicoscraper}
|
|
8
|
-
s.version = "0.2.
|
|
8
|
+
s.version = "0.2.15"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = [%q{Masami Yonehara}]
|
|
12
|
-
s.date = %q{2011-
|
|
12
|
+
s.date = %q{2011-11-09}
|
|
13
13
|
s.description = %q{It scrape movies and mylists of Niconico douga.
|
|
14
14
|
}
|
|
15
15
|
s.email = %q{zeitdiebe@gmail.com}
|
|
@@ -38,8 +38,8 @@ Gem::Specification.new do |s|
|
|
|
38
38
|
"lib/config/wait.rb",
|
|
39
39
|
"lib/nicoscraper.rb",
|
|
40
40
|
"nicoscraper.gemspec",
|
|
41
|
-
"test/
|
|
42
|
-
"test/
|
|
41
|
+
"test/movie_getinfo_spec.rb",
|
|
42
|
+
"test/mylist_gethtmlinfo_spec.rb",
|
|
43
43
|
"test/mylist_spec.rb",
|
|
44
44
|
"test/searcher_spec.rb"
|
|
45
45
|
]
|
|
@@ -9,6 +9,7 @@ describe Nicos::Movie, "After executiton of 'getInfo' method." +
|
|
|
9
9
|
before(:all) do
|
|
10
10
|
@movie = Nicos::Movie.new("sm1097445")
|
|
11
11
|
@result = @movie.getInfo
|
|
12
|
+
p @movie
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
it "should have the following structure and values." do
|
|
@@ -33,16 +34,17 @@ describe Nicos::Movie, "After executiton of 'getInfo' method." +
|
|
|
33
34
|
@movie.thumb_type .should == "video"
|
|
34
35
|
@movie.embeddable .should == 1
|
|
35
36
|
@movie.no_live_play .should == 0
|
|
36
|
-
@movie.tags_jp .
|
|
37
|
+
@movie.tags_jp .should have_at_least(1).items
|
|
38
|
+
@movie.tags_jp .should have_at_most(12).items
|
|
37
39
|
@movie.tags_tw .should_not be_nil
|
|
38
40
|
@movie.user_id .should == 70391
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
it "should return true when execute 'isBelongsTo' method." +
|
|
42
44
|
"with passing arguments (1450136)" do
|
|
43
|
-
result = @movie.isBelongsTo(1450136)
|
|
44
|
-
result .should_not be_nil
|
|
45
|
-
result .should be_true
|
|
45
|
+
@result = @movie.isBelongsTo(1450136)
|
|
46
|
+
@result .should_not be_nil
|
|
47
|
+
@result .should be_true
|
|
46
48
|
end
|
|
47
49
|
|
|
48
50
|
it "should return the following values." do
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
require '../lib/nicoscraper.rb'
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
describe Nicos::Mylist, "After executiton of '
|
|
7
|
+
describe Nicos::Mylist, "After executiton of 'getHtmlInfo' method" +
|
|
8
8
|
"And for example, with passing argument (15196568)" do
|
|
9
9
|
before(:all) do
|
|
10
10
|
@mylist = Nicos::Mylist.new(15196568)
|
|
11
|
-
@mylist.
|
|
11
|
+
@mylist.getHtmlInfo
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
it "should have the following values" do
|
|
@@ -65,7 +65,7 @@ describe Nicos::Mylist, "After executiton of 'getInfo' method" +
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
it "should " do
|
|
68
|
-
r = @mylist.
|
|
68
|
+
r = @mylist.getHtmlInfo
|
|
69
69
|
r[:status] .should === :notFound
|
|
70
70
|
r[:result] .should be_nil
|
|
71
71
|
|
|
@@ -81,7 +81,7 @@ describe Nicos::Mylist, "After executiton of 'getInfo' method" +
|
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
it "should " do
|
|
84
|
-
r = @mylist.
|
|
84
|
+
r = @mylist.getHtmlInfo
|
|
85
85
|
r[:status] .should === :notPublic
|
|
86
86
|
r[:result] .should be_nil
|
|
87
87
|
|
|
@@ -97,7 +97,7 @@ describe Nicos::Mylist, "After executiton of 'getInfo' method" +
|
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
it "should " do
|
|
100
|
-
r = @mylist.
|
|
100
|
+
r = @mylist.getHtmlInfo
|
|
101
101
|
# r["status] .should === :deleted
|
|
102
102
|
r[:status] .should === :notFound
|
|
103
103
|
r[:result] .should be_nil
|
|
@@ -110,7 +110,7 @@ end
|
|
|
110
110
|
describe Nicos::Mylist, "After executiton of 'getInfo' method" do
|
|
111
111
|
before(:all) do
|
|
112
112
|
@mylist = Nicos::Mylist.new(15196568)
|
|
113
|
-
@mylist.
|
|
113
|
+
@mylist.getHtmlInfo
|
|
114
114
|
end
|
|
115
115
|
|
|
116
116
|
it "should return over 0.9 when execute 'getSimilarity' method." +
|
metadata
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: nicoscraper
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease:
|
|
5
|
-
version: 0.2.
|
|
5
|
+
version: 0.2.15
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Masami Yonehara
|
|
@@ -10,7 +10,7 @@ autorequire:
|
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
12
|
|
|
13
|
-
date: 2011-
|
|
13
|
+
date: 2011-11-09 00:00:00 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: libxml-ruby
|
|
@@ -108,8 +108,8 @@ files:
|
|
|
108
108
|
- lib/config/wait.rb
|
|
109
109
|
- lib/nicoscraper.rb
|
|
110
110
|
- nicoscraper.gemspec
|
|
111
|
-
- test/
|
|
112
|
-
- test/
|
|
111
|
+
- test/movie_getinfo_spec.rb
|
|
112
|
+
- test/mylist_gethtmlinfo_spec.rb
|
|
113
113
|
- test/mylist_spec.rb
|
|
114
114
|
- test/searcher_spec.rb
|
|
115
115
|
homepage: http://github.com/hdemon/nicoscraper
|
|
@@ -125,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
125
125
|
requirements:
|
|
126
126
|
- - ">="
|
|
127
127
|
- !ruby/object:Gem::Version
|
|
128
|
-
hash:
|
|
128
|
+
hash: 1016263776231104904
|
|
129
129
|
segments:
|
|
130
130
|
- 0
|
|
131
131
|
version: "0"
|