Class: Nicos::Movie

Inherits:
Object
  • Object
show all
Includes:
Connector::SetWait
Defined in:
lib/classes/movie.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Connector::SetWait

#setWait

Constructor Details

#initialize(video_id) ⇒ Movie

インスタンス作成直後は、情報を取得しメソッドを実行する準備が整ったことを示す @availableがfalseである。getInfo等で情報を取得するか、あるいはsetメソッドで availableにtrueを代入する必要がある。

Parameters:



17
18
19
20
# File 'lib/classes/movie.rb', line 17

def initialize(video_id)
  @video_id   = video_id
  @available  = false
end

Instance Attribute Details

#availableBoolean

このインスタンスがgetInfo等によって正常に情報を取得できている場合、trueとなる。 各種メソッドの実行には、これがtrueであることが要求される。

Returns:

  • (Boolean)


227
228
229
# File 'lib/classes/movie.rb', line 227

def available
  @available
end

#comment_numFixnum

 取得時のコメント数

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (Fixnum)


331
332
333
# File 'lib/classes/movie.rb', line 331

def comment_num
  @comment_num
end

#create_timeFixnum

動画の投稿日に近いが、若干こちらの方が遅い。詳細不明。

マイリストHTML中JSオブジェクトの“create_time”、マイリストAtomフィードにおける<published>に対応。

取得可能なメソッド

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (Fixnum)


381
382
383
# File 'lib/classes/movie.rb', line 381

def create_time
  @create_time
end

#deletedFixnum

削除されたかどうか。削除済みの場合は1、そうでなければ0。

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (Fixnum)


351
352
353
# File 'lib/classes/movie.rb', line 351

def deleted
  @deleted
end

#descriptionString

投稿者が記述した動画の説明文

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (String)


271
272
273
# File 'lib/classes/movie.rb', line 271

def description
  @description
end

#embeddableFixnum

ブログ等に埋め込み、ログインなしでも閲覧できるかどうか。可能なら1。

取得可能なメソッド

Movie::getInfo

Returns:

  • (Fixnum)


447
448
449
# File 'lib/classes/movie.rb', line 447

def embeddable
  @embeddable
end

#first_retrieveFixnum

動画の投稿日

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (Fixnum)


301
302
303
# File 'lib/classes/movie.rb', line 301

def first_retrieve
  @first_retrieve
end

#item_idFixnum

動画に与えられるもう一つの一意なIDであり、投稿日時と同じか非常に近いUNIX時間になっている。

例えば、“【初音ミク】みくみくにしてあげる♪【してやんよ】”の動画IDはsm1097445であり、アイテムIDは1190218917である。このアイテムIDを日時に直すと、日本時間における2007年9月20日 1:21:57となるが、動画に投稿日時として表示されるのは、2007年9月20日 1:22:02である。

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (Fixnum)


261
262
263
# File 'lib/classes/movie.rb', line 261

def item_id
  @item_id
end

#last_res_bodyString

最新のコメント

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (String)


361
362
363
# File 'lib/classes/movie.rb', line 361

def last_res_body
  @last_res_body
end

#lengthFixnum

動画の長さ(秒)

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (Fixnum)


341
342
343
# File 'lib/classes/movie.rb', line 341

def length
  @length
end

#memoString

マイリストの動画紹介欄に記載される説明文

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (String)


402
403
404
# File 'lib/classes/movie.rb', line 402

def memo
  @memo
end

#movie_typeString

動画ファイルの種類。

取得可能なメソッド

Movie::getInfo

Returns:

  • (String)


412
413
414
# File 'lib/classes/movie.rb', line 412

def movie_type
  @movie_type
end

#mylist_counterFixnum

取得時のマイリスト数

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (Fixnum)


321
322
323
# File 'lib/classes/movie.rb', line 321

def mylist_counter
  @mylist_counter
end

#mylist_idFixnum

この動画が属するマイリストのID

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (Fixnum)


249
250
251
# File 'lib/classes/movie.rb', line 249

def mylist_id
  @mylist_id
end

#no_live_playFixnum

ニコニコ生放送の拒否?

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Returns:

  • (Fixnum)


455
456
457
# File 'lib/classes/movie.rb', line 455

def no_live_play
  @no_live_play
end

#size_highFixnum

高画質時の動画サイズ?

取得可能なメソッド

Movie::getInfo

Returns:

  • (Fixnum)


419
420
421
# File 'lib/classes/movie.rb', line 419

def size_high
  @size_high
end

#size_lowFixnum

低画質時の動画サイズ?

取得可能なメソッド

Movie::getInfo

Returns:

  • (Fixnum)


426
427
428
# File 'lib/classes/movie.rb', line 426

def size_low
  @size_low
end

#tags_jpArray<Hash>

日本語タグ

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Returns:

  • (Array<Hash>)


463
464
465
# File 'lib/classes/movie.rb', line 463

def tags_jp
  @tags_jp
end

#tags_twArray<Hash>

台湾タグ

取得可能なメソッド

Movie::getInfo

Returns:

  • (Array<Hash>)


470
471
472
# File 'lib/classes/movie.rb', line 470

def tags_tw
  @tags_tw
end

#thumb_typeString

取得可能なメソッド

Movie::getInfo

Returns:

  • (String)


440
441
442
# File 'lib/classes/movie.rb', line 440

def thumb_type
  @thumb_type
end

#thumbnail_urlString

サムネイルのURL

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (String)


291
292
293
# File 'lib/classes/movie.rb', line 291

def thumbnail_url
  @thumbnail_url
end

#titleString

動画のタイトル

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (String)


281
282
283
# File 'lib/classes/movie.rb', line 281

def title
  @title
end

#update_timeFixnum

動画の更新日?

マイリストHTML中JSオブジェクトの“update_time”、マイリストAtomフィードにおける<updated>に対応。

取得可能なメソッド

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (Fixnum)


391
392
393
# File 'lib/classes/movie.rb', line 391

def update_time
  @update_time
end

#user_idFixnum

ユーザID

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Returns:

  • (Fixnum)


478
479
480
# File 'lib/classes/movie.rb', line 478

def user_id
  @user_id
end

#video_idString

動画に付与される、sm|nmで始まる一意のID

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (String)


239
240
241
# File 'lib/classes/movie.rb', line 239

def video_id
  @video_id
end

#view_counterFixnum

取得時の再生数

取得可能なメソッド

Movie::getInfo

Movie::getHtmlInfo

Mylist::getInfo

Mylist::getHtmlInfo

Returns:

  • (Fixnum)


311
312
313
# File 'lib/classes/movie.rb', line 311

def view_counter
  @view_counter
end

#watchString

Returns:

  • (String)


371
372
373
# File 'lib/classes/movie.rb', line 371

def watch
  @watch
end

#watch_urlString

動画の閲覧URL

取得可能なメソッド

Movie::getInfo

Returns:

  • (String)


433
434
435
# File 'lib/classes/movie.rb', line 433

def watch_url
  @watch_url
end

Instance Method Details

#extrMylistArray

動画説明文中からマイリストIDを示す文字列を抽出し、配列として返す。

Returns:

  • (Array)

    マイリストIDを含む配列



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/classes/movie.rb', line 96

def extrMylist
  return if !@available
  puts "Extracting mylistId from the description..."
  
  mylistIdAry = []
  extracted = @description.scan(/mylist\/[0-9]{1,8}/)
  if extracted[0] != nil
    extracted.each { |e|
      id = e.scan(/[0-9]{1,8}/)[0]
      mylistIdAry.push(id)
      puts "\sID:\t#{id} is extracted."
    }
  else
    puts "\sMylistId is not found."
  end  
  
  mylistIdAry
end

#getInfoBoolean

動画の詳細な情報を取得し、インスタンス変数に納める。

内部的にgetThumbInfo APIを利用。

Returns:

  • (Boolean)

    成功すればtrueを返す。



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/classes/movie.rb', line 119

def getInfo
  parsed = nil
  @available = false

  con = Nicos::Connector::GetThumbInfo.new()
  host = 'ext.nicovideo.jp'
  entity = "/api/getthumbinfo/#{@video_id}"

  result = con.get(host, entity, '')
  status = con.getStatus

  if result[:order] == :afterTheSuccess
    parsed = Nicos::Parser::Xml::getThumbInfo(result[:body])
    set(parsed)
    @available = true
  end

  {
    :parsed  => parsed,
    :status  => status[:status],
    :retry   => status[:retry]
  }
end

#isBelongsTo(mylistId, &block) ⇒ Boolean

指定されたマイリストに自分が入っていれば、真を返す。

内部的にMylist::getHtmlInfoを利用しているため、もし指定したマイリストの他の情報を使いたければ、 ブロック中に処理を記述することで、getInfoの取得結果を共用することができる。

Parameters:

  • mylistId (Fixnum)

    マイリストID

Returns:

  • (Boolean)


30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/classes/movie.rb', line 30

def isBelongsTo (mylistId, &block)
  isBelongs = false
  thisMl = Nicos::Mylist.new(mylistId)
  thisMl.getHtmlInfo

  thisMl.movies.each do |movie|
    isBelongs = true if movie.video_id == @video_id
  end if thisMl.movies != nil   

  if isBelongs
    puts "\sThis movie is found in mylist/" + 
      mylistId.to_s
  else
    puts "\sThis movie is not found in mylist/" + 
      mylistId.to_s
  end

  block.call(thisMl) if block != nil    
  isBelongs
end

#searchSeriesMl(threshold) ⇒ Fixnum

自分が含まれる、投稿者の作ったシリーズとしてまとめているマイリストのIDを返す。

isBelongsは指定されたマイリストとの関係を調べるが、isSeriesOfは動画説明文中のマイリストIDのみを用いる。

Returns:

  • (Fixnum)

    マイリストID



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/classes/movie.rb', line 55

def searchSeriesMl(threshold)
  if !@available then
    puts "This movie object is not available."
    "failed"
  else      
    puts
    puts "Start to discern the seriality of..."
    puts "\svideo_id:\s\s#{@video_id}"
    puts "\stitle:\s\s\s\s\s#{@title}"   

    mylistIdAry = extrMylist
    resultAry = []
    mlobj = nil
    similarity = 0.0
    belongsTo = nil

    mylistIdAry.each { |_mylistId|
      belongsTo = isBelongsTo(_mylistId) { |mylistObj|        
        similarity = mylistObj.getSimilarity 
        puts "\sSimilarity:\t#{similarity}"
        mlobj = mylistObj
      }
    
      if belongsTo
        puts "\s#{_mylistId.to_s}\tis perecieved as series mylist."
        resultAry.push({
          :mylistObj  => mlobj,
          :similarity => similarity
        })
      end  
    }

    puts "\sDiscern logic terminated."
  
    resultAry   
  end
end

#set(paramObj) ⇒ Object

インスタンスに対し、任意の情報を入れる。

getInfo等を利用せずインスタンス変数に直接情報を入れる場合、もしgetThumbInfoやMylist APIからXMLやJSONで取得し、 特にキー名を変更していないハッシュオブジェクトがあるのであれば、setメソッドで一括代入することができる。

なお、getThumbInfoや、マイリストAtomフィードなどの情報は、取得元になるXML等のタグ名が少しずつ異なるため、 setメソッドに渡すべきハッシュオブジェクトのキー名は、必ずしもインスタンス変数の名前とは一致しない。 例えば、getThumbInfoは現在のコメント数をcomment_numというタグで示すが、 マイリストのAtomフィードはnico-numbers-resというクラス名のタグで囲んでいる。

Parameters:

  • paramObj (HashObj)

    getThumbInfo等から手に入れたハッシュ



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/classes/movie.rb', line 153

def set(paramObj)
  paramObj.each_key { |key|
    param = paramObj[key]
    case key
    when "available", :available      then @available = param
     
    # common  
    when "video_id",  :video_id       then @video_id = param.to_s
    when "item_id",   :item_id        then @item_id = param.to_i
    when "title",     :title          then @title = param.to_s
    when "mylist_id", :mylist_id      then @mylist_id = param.to_i
    when "description",:description   then @description = param.to_s   
    when "length",    :length         then @length = param.to_i   
    when "first_retrieve", :first_retrieve then @first_retrieve = param       
    when "group_type",:group_type     then @group_type

    # MylistAPI 現在未実装    
    when "item_data"
      paramObj['item_data'].each_key do |key|
        param = paramObj['item_data'][key]
        case key
        when "video_id"         then @video_id = param.to_s  
        when "title"            then @title = param.to_s
        when "thumbnail_url"    then @thumbnail_url = param.to_s
        when "first_retrieve"   then @first_retrieve = param.to_i
        when "update_time"      then @update_time = param.to_i
        when "view_counter"     then @view_counter = param.to_i
        when "mylist_counter"   then @mylist_counter = param.to_i
        when "num_res"          then @comment_num = param.to_i
        when "length_seconds"   then @length = param.to_i
        when "deleted"          then @deleted = param.to_i       
        when "last_res_body"    then @last_res_body = param.to_s
        end
      end 
    when "watch",      :watch       then @watch = param.to_i
    when "create_time",:create_time then @create_time = param.to_i
    when "update_time",:update_time then @update_time = param.to_i
    
    # Mylist-Atom
    when "memo",      :memo       then @memo = param.to_s       
    when "published", :published  then @create_time = param.to_i     
    when "updated",   :updated    then @update_time = param.to_i 
    when "view",      :view       then @view_counter = param.to_i
    when "mylist",    :mylist     then @mylist_counter = param.to_i
    when "res",       :res        then @comment_num = param.to_i       
    
    # getThumbInfo  
    when "thumbnail_url", :thumbnail_url  then @thumbnail_url = param.to_s
    when "movie_type", :movie_type        then @movie_type = param.to_s
    when "size_high", :size_high          then @size_high = param.to_i
    when "size_low", :size_low            then @size_low = param.to_i
    when "view_counter", :view_counter    then @view_counter = param.to_i
    when "mylist_counter", :mylist_counter then @mylist_counter = param.to_i
    when "comment_num", :comment_num      then @comment_num = param.to_i
    when "last_res_body", :last_res_body  then @last_res_body = param.to_s
    when "watch_url", :watch_url          then @watch_url = param.to_s
    when "thumb_type", :thumb_type        then @thumb_type = param.to_s
    when "embeddable", :embeddable        then @embeddable = param.to_i
    when "no_live_play", :no_live_play    then @no_live_play = param.to_i
    when "tags_jp", :tags_jp              then @tags_jp = param
    when "tags_tw", :tags_tw              then @tags_tw = param
    when "tags_de", :tags_de              then @tags_de = param
    when "tags_es", :tags_es              then @tags_sp = param
    when "user_id", :user_id              then @user_id = param.to_i
    end
  }   
end