nicoscraper 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
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