nicoscraper 0.2.4 → 0.2.5

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/lib/movie.rb DELETED
@@ -1,518 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.unshift File.dirname(__FILE__)
3
-
4
- require 'rubygems'
5
- require 'ruby-debug'
6
- require 'damerau-levenshtein'
7
- require 'kconv'
8
-
9
- require 'namespace.rb'
10
- require 'parser.rb'
11
- require 'mylist.rb'
12
- require 'connector.rb'
13
-
14
- class Nicos::Movie
15
- # @param [video_id] video_id 動画ID
16
- # インスタンス作成直後は、情報を取得しメソッドを実行する準備が整ったことを示す
17
- # @availableがfalseである。getInfo等で情報を取得するか、あるいはsetメソッドで
18
- # availableにtrueを代入する必要がある。
19
- def initialize(video_id)
20
- @video_id = video_id
21
- @available = false
22
- end
23
-
24
- public
25
-
26
- # 指定されたマイリストに自分が入っていれば、真を返す。
27
- #
28
- # 内部的にMylist::getInfoを利用しているため、もし指定したマイリストの他の情報を使いたければ、
29
- # ブロック中に処理を記述することで、getInfoの取得結果を共用することができる。
30
- # @param [Fixnum] mylistId マイリストID
31
- # @return [Boolean]
32
- def isBelongsTo (mylistId, &block)
33
- isBelongs = false
34
- thisMl = Nicos::Mylist.new(mylistId)
35
- thisMl.getInfo
36
-
37
- thisMl.movies.each { |movie|
38
- isBelongs = true if movie.video_id == @video_id
39
- }
40
-
41
- if isBelongs
42
- puts "\sThis movie is found in mylist/" +
43
- mylistId.to_s
44
- else
45
- puts "\sThis movie is not found in mylist/" +
46
- mylistId.to_s
47
- end
48
-
49
- block.call(thisMl) if block != nil
50
- isBelongs
51
- end
52
-
53
- # 自分が含まれる、投稿者の作ったシリーズとしてまとめているマイリストのIDを返す。
54
- #
55
- # isBelongsは指定されたマイリストとの関係を調べるが、isSeriesOfは動画説明文中のマイリストIDのみを用いる。
56
- # @return [Fixnum] マイリストID
57
- def isSeriesOf
58
- if !@available then
59
- puts "This movie object is not available."
60
- return "failed"
61
- end
62
-
63
- puts
64
- puts "Start to discern the seriality of..."
65
- puts "\svideo_id:\s\s" + @video_id
66
- puts "\stitle:\s\s\s\s\s" + @title
67
- # extrMylist呼び出し
68
- mylistIdAry = extrMylist
69
- sMylistIdAry = []
70
- mlObjAry = []
71
- mylistId = nil
72
- mylist = nil
73
- similarity = 0.0
74
-
75
- mylistIdAry.each { |_mylistId|
76
- belongsTo = isBelongsTo(_mylistId) { |mylistObj|
77
- similarity = mylistObj.getSimilarity
78
- puts "\sSimilarity:\t" + similarity.to_s
79
- }
80
- puts belongsTo
81
- if belongsTo && similarity > 0.7
82
- puts "\s" + _mylistId.to_s + "\tis perecieved as series mylist."
83
- sMylistIdAry.push(_mylistId)
84
- end
85
- }
86
-
87
- sMylistIdAry.each { |mylistId|
88
- mlObjAry.push( Nicos::Mylist.new(mylistId) )
89
- }
90
-
91
- puts "\sDiscern logic terminated."
92
- mlObjAry
93
- end
94
-
95
- # 動画説明文中からマイリストIDを示す文字列を抽出し、配列として返す。
96
- #
97
- # @return [Array] マイリストIDを含む配列
98
- def extrMylist
99
- return if !@available
100
- puts "Extracting mylistId from the description..."
101
-
102
- mylistIdAry = []
103
- extracted = @description.scan(/mylist\/[0-9]{1,8}/)
104
- if extracted[0] != nil
105
- extracted.each { |e|
106
- id = e.scan(/[0-9]{1,8}/)[0]
107
- mylistIdAry.push(id)
108
- puts "\sID:\t" + id + " is extracted."
109
- }
110
- else
111
- puts "\sMylistId is not found."
112
- end
113
-
114
- mylistIdAry
115
- end
116
-
117
- # 動画の詳細な情報を取得し、インスタンス変数に納める。
118
- #
119
- # 内部的にgetThumbInfo APIを利用。
120
- # @return [Boolean] 成功すればtrueを返す。
121
- def getInfo
122
- con = Nicos::Connector::GetThumbInfo.new()
123
- host = 'ext.nicovideo.jp'
124
- entity = '/api/getthumbinfo/' + @video_id
125
- con.setWait(nil)
126
- result = con.get(host, entity)
127
-
128
- if
129
- result["order"] == "success"
130
- then
131
- parsed = Nicos::Parser::getThumbInfo(result["body"])
132
- set(parsed)
133
- @available = true
134
- else
135
- @available = false
136
- end
137
- end
138
-
139
- # インスタンスに対し、任意の情報を入れる。
140
- #
141
- # @param [HashObj] paramObj getThumbInfo等から手に入れたハッシュ
142
- # getInfo等を利用せずインスタンス変数に直接情報を入れる場合、もしgetThumbInfoやMylist APIからXMLやJSONで取得し、
143
- # 特にキー名を変更していないハッシュオブジェクトがあるのであれば、setメソッドで一括代入することができる。
144
- #
145
- # なお、getThumbInfoや、マイリストAtomフィードなどの情報は、取得元になるXML等のタグ名が少しずつ異なるため、
146
- # setメソッドに渡すべきハッシュオブジェクトのキー名は、必ずしもインスタンス変数の名前とは一致しない。
147
- # 例えば、getThumbInfoは現在のコメント数をcomment_numというタグで示すが、
148
- # マイリストのAtomフィードはnico-numbers-resというクラス名のタグで囲んでいる。
149
- def set(paramObj)
150
- paramObj.each_key { |key|
151
- param = paramObj[key]
152
- case key
153
- when "available"
154
- @available = param
155
-
156
- # common
157
- when "video_id"
158
- @video_id = param.to_s
159
- when "item_id"
160
- @item_id = param.to_i
161
- when "title"
162
- @title = param.to_s
163
- when "mylist_id"
164
- @mylist_id = param.to_i
165
- when "description"
166
- @description = param.to_s
167
- when "length"
168
- @length = param.to_i
169
- when "first_retrieve"
170
- @first_retrieve = param
171
-
172
- # MylistAPI
173
- when "item_data"
174
- paramObj['item_data'].each_key { |key|
175
- param = paramObj['item_data'][key]
176
- case key
177
- when "video_id"
178
- @video_id = param.to_s
179
- when "title"
180
- @title = param.to_s
181
- when "thumbnail_url"
182
- @thumbnail_url = param.to_s
183
- when "first_retrieve"
184
- @first_retrieve = param.to_i
185
- when "update_time"
186
- @update_time = param.to_i
187
- when "view_counter"
188
- @view_counter = param.to_i
189
- when "mylist_counter"
190
- @mylist_counter = param.to_i
191
- when "num_res"
192
- @comment_num = param.to_i
193
- when "length_seconds"
194
- @length = param.to_i
195
- when "deleted"
196
- @deleted = param.to_i
197
- when "last_res_body"
198
- @last_res_body = param.to_s
199
- end
200
- }
201
- when "watch"
202
- @watch = param.to_i
203
- when "create_time"
204
- @create_time = param.to_i
205
- when "update_time"
206
- @update_time = param.to_i
207
-
208
- # MylistAPI-Atom
209
- when "memo"
210
- @memo = param.to_s
211
- when "published"
212
- @create_time = param.to_i
213
- when "updated"
214
- @update_time = param.to_i
215
- when "view"
216
- @view_counter = param.to_i
217
- when "mylist"
218
- @mylist_counter = param.to_i
219
- when "res"
220
- @comment_num = param.to_i
221
-
222
- # getThumbInfo
223
- when "thumbnail_url"
224
- @thumbnail_url = param.to_s
225
- when "movie_type"
226
- @movie_type = param.to_s
227
- when "size_high"
228
- @size_high = param.to_i
229
- when "size_low"
230
- @size_low = param.to_i
231
- when "view_counter"
232
- @view_counter = param.to_i
233
- when "mylist_counter"
234
- @mylist_counter = param.to_i
235
- when "comment_num"
236
- @comment_num = param.to_i
237
- when "last_res_body"
238
- @last_res_body = param.to_s
239
- when "watch_url"
240
- @watch_url = param.to_s
241
- when "thumb_type"
242
- @thumb_type = param.to_s
243
- when "embeddable"
244
- @embeddable = param.to_i
245
- when "no_live_play"
246
- @no_live_play = param.to_i
247
- when "tags_jp"
248
- @tags_jp = param
249
- when "tags_tw"
250
- @tags_tw = param
251
- when "tags_de"
252
- @tags_de = param
253
- when "tags_es"
254
- @tags_sp = param
255
- when "user_id"
256
- @user_id = param.to_i
257
- end
258
- }
259
- end
260
-
261
- # このインスタンスがgetInfo等によって正常に情報を取得できている場合、trueとなる。
262
- # 各種メソッドの実行には、これがtrueであることが要求される。
263
- #
264
- # @return [Boolean]
265
- attr_accessor :available
266
-
267
- # MylistAPI
268
-
269
- # 動画に付与される、sm|nmで始まる一意のID
270
- #
271
- # @return [String]
272
- # <b>取得可能なメソッド</b>
273
- # {Nicos::Movie#getInfo Movie::getInfo}
274
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
275
- # {Nicos::Movie#getInfo Mylist::getInfo}
276
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
277
- attr_accessor :video_id
278
-
279
- # この動画が属するマイリストのID
280
- #
281
- # @return [Fixnum]
282
- # <b>取得可能なメソッド</b>
283
- # {Nicos::Movie#getInfo Movie::getInfo}
284
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
285
- # {Nicos::Movie#getInfo Mylist::getInfo}
286
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
287
- attr_accessor :mylist_id
288
-
289
- # 動画に与えられるもう一つの一意なIDであり、投稿日時と同じか非常に近いUNIX時間になっている。
290
- #
291
- # 例えば、"【初音ミク】みくみくにしてあげる♪【してやんよ】"の動画IDはsm1097445であり、アイテムIDは1190218917である。このアイテムIDを日時に直すと、日本時間における2007年9月20日 1:21:57となるが、動画に投稿日時として表示されるのは、2007年9月20日 1:22:02である。
292
- #
293
- # @return [Fixnum]
294
- # <b>取得可能なメソッド</b>
295
- # {Nicos::Movie#getInfo Movie::getInfo}
296
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
297
- # {Nicos::Movie#getInfo Mylist::getInfo}
298
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
299
- attr_accessor :item_id
300
-
301
- # 投稿者が記述した動画の説明文
302
- #
303
- # @return [String]
304
- # <b>取得可能なメソッド</b>
305
- # {Nicos::Movie#getInfo Movie::getInfo}
306
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
307
- # {Nicos::Movie#getInfo Mylist::getInfo}
308
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
309
- attr_accessor :description
310
-
311
- # 動画のタイトル
312
- #
313
- # @return [String]
314
- # <b>取得可能なメソッド</b>
315
- # {Nicos::Movie#getInfo Movie::getInfo}
316
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
317
- # {Nicos::Movie#getInfo Mylist::getInfo}
318
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
319
- attr_accessor :title
320
-
321
- # サムネイルのURL
322
- #
323
- # @return [String]
324
- # <b>取得可能なメソッド</b>
325
- # {Nicos::Movie#getInfo Movie::getInfo}
326
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
327
- # {Nicos::Movie#getInfo Mylist::getInfo}
328
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
329
- attr_accessor :thumbnail_url
330
-
331
- # 動画の投稿日
332
- #
333
- # @return [Fixnum]
334
- # <b>取得可能なメソッド</b>
335
- # {Nicos::Movie#getInfo Movie::getInfo}
336
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
337
- # {Nicos::Movie#getInfo Mylist::getInfo}
338
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
339
- attr_accessor :first_retrieve
340
-
341
- # 取得時の再生数
342
- #
343
- # @return [Fixnum]
344
- # <b>取得可能なメソッド</b>
345
- # {Nicos::Movie#getInfo Movie::getInfo}
346
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
347
- # {Nicos::Movie#getInfo Mylist::getInfo}
348
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
349
- attr_accessor :view_counter
350
-
351
- # 取得時のマイリスト数
352
- #
353
- # @return [Fixnum]
354
- # <b>取得可能なメソッド</b>
355
- # {Nicos::Movie#getInfo Movie::getInfo}
356
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
357
- # {Nicos::Movie#getInfo Mylist::getInfo}
358
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
359
- attr_accessor :mylist_counter
360
-
361
- # 取得時のコメント数
362
- #
363
- # @return [Fixnum]
364
- # <b>取得可能なメソッド</b>
365
- # {Nicos::Movie#getInfo Movie::getInfo}
366
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
367
- # {Nicos::Movie#getInfo Mylist::getInfo}
368
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
369
- attr_accessor :comment_num
370
-
371
- # 動画の長さ(秒)
372
- #
373
- # @return [Fixnum]
374
- # <b>取得可能なメソッド</b>
375
- # {Nicos::Movie#getInfo Movie::getInfo}
376
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
377
- # {Nicos::Movie#getInfo Mylist::getInfo}
378
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
379
- attr_accessor :length
380
-
381
- # 削除されたかどうか。削除済みの場合は1、そうでなければ0。
382
- #
383
- # @return [Fixnum]
384
- # <b>取得可能なメソッド</b>
385
- # {Nicos::Movie#getInfo Movie::getInfo}
386
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
387
- # {Nicos::Movie#getInfo Mylist::getInfo}
388
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
389
- attr_accessor :deleted
390
-
391
- # 最新のコメント
392
- #
393
- # @return [String]
394
- # <b>取得可能なメソッド</b>
395
- # {Nicos::Movie#getInfo Movie::getInfo}
396
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
397
- # {Nicos::Movie#getInfo Mylist::getInfo}
398
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
399
- attr_accessor :last_res_body
400
-
401
- # ?
402
- #
403
- # @return [String]
404
- # <b>取得可能なメソッド</b>
405
- # {Nicos::Movie#getInfo Movie::getInfo}
406
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
407
- # {Nicos::Movie#getInfo Mylist::getInfo}
408
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
409
- attr_accessor :watch
410
-
411
- # 動画の投稿日に近いが、若干こちらの方が遅い。詳細不明。
412
- #
413
- # マイリストHTML中JSオブジェクトの"create_time"、マイリストAtomフィードにおける<published>に対応。
414
- #
415
- # @return [Fixnum]
416
- # <b>取得可能なメソッド</b>
417
- # {Nicos::Movie#getInfo Mylist::getInfo}
418
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
419
- attr_accessor :create_time
420
-
421
- # 動画の更新日?
422
- #
423
- # マイリストHTML中JSオブジェクトの"update_time"、マイリストAtomフィードにおける<updated>に対応。
424
- #
425
- # @return [Fixnum]
426
- # <b>取得可能なメソッド</b>
427
- # {Nicos::Movie#getInfo Mylist::getInfo}
428
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
429
- attr_accessor :update_time
430
- # MylistAPI-Atom
431
-
432
- # マイリストの動画紹介欄に記載される説明文
433
- #
434
- # @return [String]
435
- # <b>取得可能なメソッド</b>
436
- # {Nicos::Movie#getInfo Movie::getInfo}
437
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
438
- # {Nicos::Movie#getInfo Mylist::getInfo}
439
- # {Nicos::Movie#getInfo Mylist::getHtmlInfo}
440
- attr_accessor :memo
441
-
442
-
443
- # getThumbInfo
444
-
445
- # 動画ファイルの種類。
446
- #
447
- # @return [String]
448
- # <b>取得可能なメソッド</b>
449
- # {Nicos::Movie#getInfo Movie::getInfo}
450
- attr_accessor :movie_type
451
-
452
- # 高画質時の動画サイズ?
453
- #
454
- # @return [Fixnum]
455
- # <b>取得可能なメソッド</b>
456
- # {Nicos::Movie#getInfo Movie::getInfo}
457
- attr_accessor :size_high
458
-
459
- # 低画質時の動画サイズ?
460
- #
461
- # @return [Fixnum]
462
- # <b>取得可能なメソッド</b>
463
- # {Nicos::Movie#getInfo Movie::getInfo}
464
- attr_accessor :size_low
465
-
466
- # 動画の閲覧URL
467
- #
468
- # @return [String]
469
- # <b>取得可能なメソッド</b>
470
- # {Nicos::Movie#getInfo Movie::getInfo}
471
- attr_accessor :watch_url
472
-
473
- # ?
474
- #
475
- # @return [String]
476
- # <b>取得可能なメソッド</b>
477
- # {Nicos::Movie#getInfo Movie::getInfo}
478
- attr_accessor :thumb_type
479
-
480
- # ブログ等に埋め込み、ログインなしでも閲覧できるかどうか。可能なら1。
481
- #
482
- # @return [Fixnum]
483
- # <b>取得可能なメソッド</b>
484
- # {Nicos::Movie#getInfo Movie::getInfo}
485
- attr_accessor :embeddable
486
-
487
- # ニコニコ生放送の拒否?
488
- #
489
- # @return [Fixnum]
490
- # <b>取得可能なメソッド</b>
491
- # {Nicos::Movie#getInfo Movie::getInfo}
492
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
493
- attr_accessor :no_live_play
494
-
495
- # 日本語タグ
496
- #
497
- # @return [Array<String>]
498
- # <b>取得可能なメソッド</b>
499
- # {Nicos::Movie#getInfo Movie::getInfo}
500
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
501
- attr_accessor :tags_jp
502
-
503
- # 台湾タグ
504
- #
505
- # @return [Array<String>]
506
- # <b>取得可能なメソッド</b>
507
- # {Nicos::Movie#getInfo Movie::getInfo}
508
- attr_accessor :tags_tw
509
-
510
- # ユーザID
511
- #
512
- # @return [Fixnum]
513
- # <b>取得可能なメソッド</b>
514
- # {Nicos::Movie#getInfo Movie::getInfo}
515
- # {Nicos::Movie#getInfo Movie::getHtmlInfo}
516
- attr_accessor :user_id
517
-
518
- end