nicoscraper 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,112 +1,211 @@
1
- #どんなライブラリか
2
-  ニコニコ動画から動画およびマイリスト情報を取得し、その情報に対して各種操作を行えます。タグやマイリスト検索結果からの抽出、および抽出結果に対する反復処理を行うメソッドも備え、ランキングサイト等の制作を支援します。
1
+ NicoScraper
2
+ ====================
3
+
4
+ **My site:** [http://hdemon.net](http://hdemon.net)
5
+ **GitHub:** [http://github.com/hdemon/nicoscraper](http://github.com/hdemon/nicoscraper)
6
+ **Author:** Masami Yonehara
7
+ **Copyright:** 2011
8
+ **License:** MIT License
9
+ **Latest Version:** 0.2.2
10
+ **Release Date:** Sep 23rd 2011
11
+
12
+
13
+ 何をするライブラリ?
14
+ ------
15
+
16
+  ニコニコ動画の動画ページ、検索ページ、あるいはそのAtomフィードから情報を取得し、その情報に対して各種操作を行えます。タグやマイリスト検索結果からの抽出、および抽出結果に対する反復処理を行うメソッドも備え、ランキングサイト等の制作を支援します。
17
+
18
+ インストール
19
+ ------
20
+  Ruby 1.9.2以外には、特に必要とするものはありません。
21
+
22
+ $ gem install nicoscraper
23
+
24
+  とした後、
25
+
26
+ require 'nicoscraper'
27
+
28
+  で使い始めて下さい。
29
+
30
+ 基本的な使い方
31
+ ------
3
32
 
4
- #簡単な概要
5
33
   Movieクラス、Mylistクラス、Searcherモジュールから主要な機能が構成されています。基本的には、動画やマイリストのIDを指定してインスタンスを作り、そこから詳細な情報を取得するためのメソッドを実行したのち、さらに分析や加工を行う別のメソッドを実行する、という手順を踏みます。
6
34
 
7
- ##動画情報の取得
35
+ ###動画情報の取得
8
36
 
9
37
   例えば"sm1097445"という動画IDから、タイトルや動画の長さ、現在の閲覧数等の詳細な情報を知りたいときは、
10
38
 
11
- ~~~~
12
- require 'nicoscraper'
13
-
14
- movie = Nicos::Movie::new("sm1097445")
15
- movie.getInfo
16
-
17
- p movie
18
-
19
- <Nicos::Movie:0x00000002537aa8
20
- @video_id="sm1097445",
21
- @available=false, @title="【初音ミク】みくみくにしてあげる♪【してやんよ】",
22
- @description="おまえら、みっくみくにしてやんよ。歌詞はhttp://ikamo.hp.infoseek.co.jp/mikumiku.txt(9/20 1:55修正)。上げている他のもの→mylist/1450136",
23
- @thumbnail_url="http://tn-skr2.smilevideo.jp/smile?i=1097445",
24
- @first_retrieve=1190218922,
25
- @length=99,
26
- @movie_type="flv",
27
- @size_high=3906547,
28
- @size_low=1688098,
29
- @view_counter=9073614,
30
- @comment_num=2553366,
31
- @mylist_counter=183470,
32
- @last_res_body="★███████████☆ ☆████████████●●●●███ ★█████... ",
33
- @watch_url="http://www.nicovideo.jp/watch/sm1097445", @thumb_type="video",
34
- @embeddable=1,
35
- @no_live_play=0,
36
- @tags_jp=["音楽", "初音ミク", "みくみくにしてあげる♪", "ミクオリジナル曲", "ika", "VOCALOID殿堂入り", "元気が出るミクうた", "VOCALOID", "初音ミク名曲リンク", "深夜みっく"],
37
- @tags_tw=["彈幕強大", "把你MikuMiku掉♪", "週刊vocaloid排行榜第1名獲得曲", "翻譯歌曲", "台灣VOCALOID評論人氣曲", "最強彈幕傳說", "初音未來"],
38
- @user_id=70391 >
39
-
40
- ~~~~
41
-
42
-  このように、Movieクラスのインスタンス(以下「動画インスタンス」)のgetInfoメソッドを利用します。その結果、動画インスタンスにインスタンス変数として各種情報が付加されます。
43
-
44
- ##マイリスト情報の取得
39
+ require 'nicoscraper'
40
+
41
+ movie = Nicos::Movie::new("sm1097445")
42
+ movie.getInfo
43
+
44
+ p movie
45
+
46
+  Movieクラスのインスタンス(以下「動画インスタンス」)を動画IDを与えて生成した後、getInfoメソッドを利用します。その結果、
47
+
48
+ <Nicos::Movie:0x00000002537aa8
49
+ @video_id="sm1097445",
50
+ @available=false,
51
+ @title="【初音ミク】みくみくにしてあげる♪【してやんよ】",
52
+ @description="おまえら、みっくみくにしてやんよ。歌詞は...",
53
+ @thumbnail_url="http://tn-skr2.smile...",
54
+ @first_retrieve=1190218922,
55
+ @length=99,
56
+ @movie_type="flv",
57
+ @size_high=3906547,
58
+ @size_low=1688098,
59
+ @view_counter=9073614,
60
+ @comment_num=2553366,
61
+ @mylist_counter=183470,
62
+ @last_res_body="★███████████☆...",
63
+ @watch_url="http://www.nicovideo.jp/...",
64
+ @thumb_type="video",
65
+ @embeddable=1,
66
+ @no_live_play=0,
67
+ @tags_jp=["音楽", "初音ミク", ...],
68
+ @tags_tw=["彈幕強大", "把你MikuMiku掉♪", ...],
69
+ @user_id=70391 >
70
+  このように、動画インスタンスにインスタンス変数として各種情報が付加されます。
71
+
72
+ ###マイリスト情報の取得
73
+
45
74
   Mylistクラスもほぼ同様ですが、Mylistクラスのインスタンス(以下「マイリストインスタンス」)は、マイリスト情報の他に、そのマイリストが含む動画のインスタンスを自動的に生成します。つまり、
46
75
 
47
- ~~~~
48
- require 'nicoscraper'
49
-
50
- mylist = Nicos::Mylist::new("")
51
- mylist.getInfoLt
52
-
53
- p mylist
54
-
55
- # 結果
56
- #<Nicos::Mylist:0x00000002884670
57
-  @mylist_id=15196568,
58
- @movies=[
59
- #<Nicos::Movie:0x0000000255a968
60
- @video_id="sm8481759",
61
- @available=true, @title="【Oblivion】おっさんの大冒険1(ゆっくり実況)",
62
- ...
63
- #<Nicos::Movie:0x0000000251a6b0
64
- @video_id="sm8506034",
65
- @available=true,
66
- @title="【Oblivion】おっさんの大冒険2(ゆっくり実況)",
67
- ...
68
- ],
69
- @available=true,
70
- @title="【Oblivion】おっさんの大冒険",
71
- ... >
72
- ~~~~
73
-
74
-  というように、動画インスタンスを勝手につくりだして配列として保持します。
75
-
76
- ##検索結果の取得
76
+ require 'nicoscraper'
77
+
78
+ mylist = Nicos::Mylist::new("")
79
+ mylist.getInfoLt
80
+
81
+ p mylist
82
+
83
+ このように実行すると、
84
+
85
+ <Nicos::Mylist:0x00000002884670
86
+ @mylist_id=15196568,
87
+ @movies=[
88
+ #<Nicos::Movie:0x0000000255a968
89
+ @video_id="sm8481759",
90
+ @available=true,
91
+ @title="【Oblivion】おっさんの大冒険1(ゆっくり実況)",
92
+ ...
93
+ #<Nicos::Movie:0x0000000251a6b0
94
+ @video_id="sm8506034",
95
+ @available=true,
96
+ @title="【Oblivion】おっさんの大冒険2(ゆっくり実況)",
97
+ ...
98
+ ],
99
+ @available=true,
100
+ @title="【Oblivion】おっさんの大冒険",
101
+ ... >
102
+
103
+  というように、動画インスタンスを勝手につくりだして配列として保持します。もちろん、これらの動画インスタンスには独立した操作を加えられます。
104
+
105
+ ###検索結果の取得
77
106
 
78
107
   タグやマイリスト検索結果からの情報取得には、Searcherモジュールを使います。情報のソート方法の指定、取得する範囲の制限が可能です。
79
108
 
80
- ~~~~
81
- require 'nicoscraper'
109
+ require 'nicoscraper'
82
110
 
83
- t = Time.now
84
- ytd = Date::new(t.year, t.month, t.day) - 1
85
- yesterday = Time.local(ytd.year, ytd.month, ytd.day, 0, 0, 0).to_i
111
+ t = Time.now
112
+ ytd = Date::new(t.year, t.month, t.day) - 1
113
+ yesterday = Time.local(ytd.year, ytd.month, ytd.day, 0, 0, 0).to_i
86
114
 
87
- Searcher.byTag('ゆっくり実況プレイpart1リンク', 'post_new', nil) {
88
- |result, page|
115
+ searcher = Nicos::Searcher::ByTag.new()
89
116
 
90
- result.each { |e|
91
- movie = Nicos::Movie.new(e['video_id'])
92
- movie.getInfo
117
+ searcher.execute('ゆっくり実況プレイpart1リンク', 'post_new', nil) {
118
+ |result, page|
119
+
120
+ result.each { |movieObj|
121
+ puts movieObj.title +
122
+ " is posted at " +
123
+ Time.at(movieObj.first_retrieve).to_s
124
+
125
+ "continue" if movieObj.first_retrieve >= yesterday
126
+ }
127
+ }
128
+
129
+  この例では、'ゆっくり実況プレイpart1リンク'というタグの付く動画を、post_new=投稿日時が新しい順からさかのぼって取得し、取得した動画の日付が前日の0時0分を超えるまでそれを続けます。
130
+
131
+  ブロック内の第1引数には取得結果に基づく動画インスタンスが与えられるのですが、これは32個分の配列です。なぜ32個のセットなのかと言うと、ご存知のようにニコニコ動画の検索画面はページで区切られており、Searcherモジュールの各メソッドはページ毎に情報を取得し、ページ単位でブロックをコールするからです。Htmlから取得するにしろAtomフィードから取得するにしろ、1ページに32個の動画情報が含まれています。そして、第2引数には現在のページ数が与えられます。
132
+
133
+  そして、ブロック内で"continue"を返すことによりスクレイプが継続します。つまり、"continue"を返し続けるロジックを組み込まないと、1ページ目を読んだ時点で処理が終了します。これは意図せざる過剰アクセスを防ぐための措置です。
134
+
135
+  上の例では、取得した動画の日付を調べ、3日前の0時0分より前の動画に到達すればそこでループを終える設計です。ループを終えるために取得情報を使うかどうかは任意なので、例えば10分間の制限で取得出来るだけ取得するということも可能でしょう。
136
+
137
+ ###取得した情報に対する操作
138
+
139
+  現在のところ、以下のような操作が可能です。詳しい使い方は、各メソッドの説明を参照して下さい。
140
+
141
+ **動画の説明文からタイトルを取得する。**
142
+ {Nicos::Movie#extrMylist Nicos::Movie::extrMylist}
143
+  動画の説明文中に、'mylist/...'という表記で投稿者がマイリストを提示している事があります。extrMylistはこれを全て取得し、配列として返します。
144
+
145
+
146
+ **指定したマイリストに、自分自身が入っているかを調べる。**
147
+ {Nicos::Movie#isBelongsTo Nicos::Movie::isBelongsTo}
148
+
149
+
150
+ **そのマイリスト内に含まれる全ての動画の、タイトルの類似性を調べる。**
151
+ {Nicos::Mylist#getSimilarity Nicos::Mylist::getSimilarity}
152
+  マイリストのシリーズ性を判定するために、マイリスト内の全ての動画の組み合わせで、タイトルの「編集距離」に基づく類似度を計算します。
153
+
154
+
155
+ **その動画が属する、シリーズとみなせるマイリストのIDを返します。**
156
+ {Nicos::Movie#isSeriesOf Nicos::Movie::isSeriesOf}
157
+  isBelongsToとgetSimiralityの組み合わせにより、ある動画の説明文中にマイリストの記載がある場合、そのマイリストがタイトルの類似性によるシリーズとみなせるならば、そのIDを返します。
158
+
159
+
160
+ 注意点、および免責事項
161
+ ------
162
+
163
+  それぞれのメソッドは大半がニコニコ動画へのアクセスを伴い、特にSearcherモジュールは継続的かつ無制限なアクセスを可能にするため、使用には十分注意して下さい。その点を考慮し、Searcherモジュールのデフォルトのウェイトはかなり大きめに設定してあります。
164
+
165
+  使用する際には、ご自分の責任においてウェイトを変更して下さい。**本ライブラリの使用によって発生した損害および法的な責任については、ライブラリのバグに起因するものを含め、一切の責任を負いかねます。**
166
+
167
+  なお、Htmlからスクレイプするメソッドよりも、Atomフィードを使うメソッドの方がニコニコ動画側の負荷が(たぶん)軽く、アクセス制限などは起こりにくくなっています。大半の情報はAtomフィードで取得できるため、そうでない情報を取得したい場合に限り、Htmlを利用するメソッドを使うべきでしょう。
168
+
169
+
170
+ 用語・用法
171
+ ------
172
+
173
+ **動画インスタンス**
174
+ Movieクラスのインスタンス
175
+
176
+ **マイリストインスタンス**
177
+ Mylistクラスのインスタンス
178
+
179
+ **動画ID | video_id**
180
+ ニコニコ動画の各動画に与えられる、sm|nmで始まる一意のID。
181
+
182
+ **アイテムID | item_id**
183
+ 動画に与えられるもう一つの一意なIDであり、投稿日時と同じか非常に近いUNIX時間になっている。例えば、"【初音ミク】みくみくにしてあげる♪【してやんよ】"の動画IDはsm1097445であり、アイテムIDは1190218917である。このアイテムIDを日時に直すと、日本時間における2007年9月20日 1:21:57となるが、動画に投稿日時として表示されるのは、2007年9月20日 1:22:02である。
184
+
185
+
186
+ 今後の予定
187
+ ------
188
+
189
+ **v0.3**
190
+
191
+ + HTMLから取得・解析するメソッドの追加。
192
+
193
+ + キーワード検索の実装
194
+
195
+ **v0.4-**
93
196
 
94
- puts movie.title.toutf8 +
95
- " is posted at " +
96
- Time.at(movie.first_retrieve).to_s.toutf8
197
+ + シリーズ性判定の強化。説明文中にある「次 sm***」等の表記を解析し、マイリストに頼らずにシリーズ性を判定するようにする。
97
198
 
98
- true if movie.first_retrieve <= yesterday
99
- }
100
- }
101
- ~~~~
199
+ + コミュニティ動画、限定公開動画・マイリストへの対応。
102
200
 
103
-  これは'ゆっくり実況プレイpart1リンク'というタグの付く動画を、post_new=投稿日時が新しい順からさかのぼって取得していき、取得した動画の日付が前日の0時0分を超えるまでそれを続けます。
104
201
 
105
-  ブロック内の第1引数には取得結果が与えられるのですが、これは動画1つ毎のコールバックではなく、32個分の配列です。なぜ32個のセットなのかと言うと、ご存知のようにニコニコ動画の検索画面はページで区切られており、Searcherモジュールの各メソッドはページ毎に情報を取得するためです。Htmlから取得するにしろAtomフィードから取得するにしろ、1ページに32個の動画情報が含まれています。そして、第2引数にはそのページ数が与えられます。
202
+ 更新履歴
203
+ ------
106
204
 
107
-  なお、ブロック内でtrueを返すことによりスクレイプは終わります。逆に言えば、trueを返さない限り検索結果全ての情報を取得しようとするため、十分に注意して下さい。上の例では、取得した動画の日付を調べ、3日前の0時0分より前の動画があればそこでループを終える設計です。
205
+ **v0.2.4**
108
206
 
207
+ + ドキュメント作成
109
208
 
110
- #より詳しい情報
209
+ + Searcherループのバグ修正。
111
210
 
112
- は、こちらを御覧下さい。
211
+ + Searcherループの継続判定を、ブロック内で"continue"を返す事を要求する方式に変更。
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.2.4
File without changes
@@ -5,6 +5,8 @@ require 'rubygems'
5
5
  require 'ruby-debug'
6
6
  require 'net/http'
7
7
 
8
+ require 'namespace.rb'
9
+
8
10
  module Nicos::Connector
9
11
  class Connector
10
12
  def initialize
@@ -124,7 +126,6 @@ module Nicos::Connector
124
126
  end
125
127
  end
126
128
 
127
-
128
129
  class Xml < Connector
129
130
  def get (host, entity)
130
131
  response = nil
@@ -226,6 +227,7 @@ module Nicos::Connector
226
227
  end
227
228
  end
228
229
 
230
+ =begin
229
231
  class HtmlConnector < Connector
230
232
  def initialize(mode)
231
233
  @mode = mode
@@ -355,7 +357,8 @@ module Nicos::Connector
355
357
 
356
358
  return @mech.page
357
359
  end
358
-
360
+
359
361
  attr_reader :mech
360
362
  end
363
+ =end
361
364
  end
@@ -1,8 +1,12 @@
1
- require 'rubygems'
1
+ # -*- encoding: utf-8 -*-
2
+ $:.unshift File.dirname(__FILE__)
3
+
4
+ require 'rubygems'
2
5
  require 'xml'
3
6
  require 'time'
7
+ require 'namespace.rb'
4
8
 
5
- module Nicos::Converter
9
+ module Nicos::Converter #:nodoc:
6
10
  def iso8601ToUnix(str)
7
11
  Time.strptime(str, "%Y-%m-%dT%H:%M:%S").to_i
8
12
  end
@@ -30,7 +34,7 @@ module Nicos::Converter
30
34
  module_function :commaRemover
31
35
  end
32
36
 
33
- module Nicos::Extractor
37
+ module Nicos::Extractor #:nodoc:
34
38
  def mylistId(str)
35
39
  /(mylist\/)([0-9]{1,})/ =~ str
36
40
  $2.to_i
@@ -6,45 +6,54 @@ require 'ruby-debug'
6
6
  require 'damerau-levenshtein'
7
7
  require 'kconv'
8
8
 
9
+ require 'namespace.rb'
9
10
  require 'parser.rb'
10
11
  require 'mylist.rb'
11
12
  require 'connector.rb'
12
13
 
13
14
  class Nicos::Movie
15
+ # @param [video_id] video_id 動画ID
16
+ # インスタンス作成直後は、情報を取得しメソッドを実行する準備が整ったことを示す
17
+ # @availableがfalseである。getInfo等で情報を取得するか、あるいはsetメソッドで
18
+ # availableにtrueを代入する必要がある。
14
19
  def initialize(video_id)
15
20
  @video_id = video_id
16
21
  @available = false
17
22
  end
18
23
 
19
- private
20
-
21
24
  public
22
25
 
23
- # 指定されたマイリストに自分が入っていれば、真を返す。
26
+ # 指定されたマイリストに自分が入っていれば、真を返す。
27
+ #
28
+ # 内部的にMylist::getInfoを利用しているため、もし指定したマイリストの他の情報を使いたければ、
29
+ # ブロック中に処理を記述することで、getInfoの取得結果を共用することができる。
30
+ # @param [Fixnum] mylistId マイリストID
31
+ # @return [Boolean]
24
32
  def isBelongsTo (mylistId, &block)
25
33
  isBelongs = false
26
34
  thisMl = Nicos::Mylist.new(mylistId)
27
- thisMl.getInfoLt
35
+ thisMl.getInfo
28
36
 
29
37
  thisMl.movies.each { |movie|
30
38
  isBelongs = true if movie.video_id == @video_id
31
39
  }
32
40
 
33
41
  if isBelongs
34
- puts "\sThis movie is found in mylist/" + mylistId.to_s
42
+ puts "\sThis movie is found in mylist/" +
43
+ mylistId.to_s
35
44
  else
36
- puts "\sThis movie is not found in mylist/" + mylistId.to_s
45
+ puts "\sThis movie is not found in mylist/" +
46
+ mylistId.to_s
37
47
  end
38
-
39
- # 無駄なアクセスを省くため、マイリスト中の動画に関する追加処理があれば、
40
- # ブロックとして実行できる。
41
- block.call(thisMl) if block != nil
42
-
43
- return isBelongs
48
+
49
+ block.call(thisMl) if block != nil
50
+ isBelongs
44
51
  end
45
52
 
46
53
  # 自分が含まれる、投稿者の作ったシリーズとしてまとめているマイリストのIDを返す。
47
- # 情報取得元が異なるため、必ずしもisBelongsの結果とは包含関係にならない。
54
+ #
55
+ # isBelongsは指定されたマイリストとの関係を調べるが、isSeriesOfは動画説明文中のマイリストIDのみを用いる。
56
+ # @return [Fixnum] マイリストID
48
57
  def isSeriesOf
49
58
  if !@available then
50
59
  puts "This movie object is not available."
@@ -80,10 +89,12 @@ class Nicos::Movie
80
89
  }
81
90
 
82
91
  puts "\sDiscern logic terminated."
83
- return mlObjAry
92
+ mlObjAry
84
93
  end
85
94
 
86
- # 動画説明文中から、マイリストIDを示す文字列を抜き出す。
95
+ # 動画説明文中からマイリストIDを示す文字列を抽出し、配列として返す。
96
+ #
97
+ # @return [Array] マイリストIDを含む配列
87
98
  def extrMylist
88
99
  return if !@available
89
100
  puts "Extracting mylistId from the description..."
@@ -100,9 +111,13 @@ class Nicos::Movie
100
111
  puts "\sMylistId is not found."
101
112
  end
102
113
 
103
- return mylistIdAry
114
+ mylistIdAry
104
115
  end
105
116
 
117
+ # 動画の詳細な情報を取得し、インスタンス変数に納める。
118
+ #
119
+ # 内部的にgetThumbInfo APIを利用。
120
+ # @return [Boolean] 成功すればtrueを返す。
106
121
  def getInfo
107
122
  con = Nicos::Connector::GetThumbInfo.new()
108
123
  host = 'ext.nicovideo.jp'
@@ -115,50 +130,60 @@ class Nicos::Movie
115
130
  then
116
131
  parsed = Nicos::Parser::getThumbInfo(result["body"])
117
132
  set(parsed)
118
- p self
119
133
  @available = true
120
134
  else
121
135
  @available = false
122
136
  end
123
137
  end
124
-
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というクラス名のタグで囲んでいる。
125
149
  def set(paramObj)
126
150
  paramObj.each_key { |key|
127
151
  param = paramObj[key]
128
152
  case key
129
153
  when "available"
130
154
  @available = param
131
-
155
+
156
+ # common
132
157
  when "video_id"
133
- @video_id = param
158
+ @video_id = param.to_s
159
+ when "item_id"
160
+ @item_id = param.to_i
161
+ when "title"
162
+ @title = param.to_s
134
163
  when "mylist_id"
135
- @mylist_id = param
136
- when "item_id"
137
- @item_id = param
164
+ @mylist_id = param.to_i
138
165
  when "description"
139
- @description = param
166
+ @description = param.to_s
167
+ when "length"
168
+ @length = param.to_i
169
+ when "first_retrieve"
170
+ @first_retrieve = param
140
171
 
141
- # MylistAPI
142
- when "video_id"
143
- @video_id = param
144
- when "item_id"
145
- @item_id = param.to_i
146
- when "description"
147
- @description = param
172
+ # MylistAPI
148
173
  when "item_data"
149
174
  paramObj['item_data'].each_key { |key|
150
175
  param = paramObj['item_data'][key]
151
176
  case key
152
177
  when "video_id"
153
- @video_id = param
178
+ @video_id = param.to_s
154
179
  when "title"
155
- @title = param
180
+ @title = param.to_s
156
181
  when "thumbnail_url"
157
- @thumbnail_url = param
182
+ @thumbnail_url = param.to_s
158
183
  when "first_retrieve"
159
- @first_retrieve = param
184
+ @first_retrieve = param.to_i
160
185
  when "update_time"
161
- @update_time = param
186
+ @update_time = param.to_i
162
187
  when "view_counter"
163
188
  @view_counter = param.to_i
164
189
  when "mylist_counter"
@@ -166,132 +191,328 @@ class Nicos::Movie
166
191
  when "num_res"
167
192
  @comment_num = param.to_i
168
193
  when "length_seconds"
169
- @length = param
194
+ @length = param.to_i
170
195
  when "deleted"
171
196
  @deleted = param.to_i
172
197
  when "last_res_body"
173
- @last_res_body = param
198
+ @last_res_body = param.to_s
174
199
  end
175
200
  }
176
201
  when "watch"
177
- @watch = param
202
+ @watch = param.to_i
178
203
  when "create_time"
179
- @create_time = param
204
+ @create_time = param.to_i
180
205
  when "update_time"
181
- @update_time = param
206
+ @update_time = param.to_i
182
207
 
183
208
  # MylistAPI-Atom
184
- when "video_id"
185
- @video_id = param
186
- when "item_id"
187
- @item_id = param
188
209
  when "memo"
189
- @memo = param
210
+ @memo = param.to_s
190
211
  when "published"
191
- @published = param
212
+ @create_time = param.to_i
192
213
  when "updated"
193
- @updated = param
194
- when "thumbnail_url"
195
- @thumbnail_url = param
196
- when "length"
197
- @length = param
198
- when "view"
214
+ @update_time = param.to_i
215
+ when "view"
199
216
  @view_counter = param.to_i
200
- when "mylist"
217
+ when "mylist"
201
218
  @mylist_counter = param.to_i
202
- when "res"
203
- @comment_num = param.to_i
204
- when "first_retrieve"
205
- @first_retrieve = param
206
- when "length"
207
- @length = param
219
+ when "res"
220
+ @comment_num = param.to_i
208
221
 
209
222
  # getThumbInfo
210
- when "video_id"
211
- @video_id = param
212
- when "title"
213
- @title = param
214
- when "description"
215
- @description = param
216
223
  when "thumbnail_url"
217
- @thumbnail_url = param
218
- when "first_retrieve"
219
- @first_retrieve = param
220
- when "length"
221
- @length = param
224
+ @thumbnail_url = param.to_s
222
225
  when "movie_type"
223
- @movie_type = param
226
+ @movie_type = param.to_s
224
227
  when "size_high"
225
- @size_high = param
228
+ @size_high = param.to_i
226
229
  when "size_low"
227
- @size_low = param
230
+ @size_low = param.to_i
228
231
  when "view_counter"
229
- @view_counter = param
232
+ @view_counter = param.to_i
230
233
  when "mylist_counter"
231
- @mylist_counter = param
234
+ @mylist_counter = param.to_i
232
235
  when "comment_num"
233
- @comment_num = param
236
+ @comment_num = param.to_i
234
237
  when "last_res_body"
235
- @last_res_body = param
238
+ @last_res_body = param.to_s
236
239
  when "watch_url"
237
- @watch_url = param
240
+ @watch_url = param.to_s
238
241
  when "thumb_type"
239
- @thumb_type = param
242
+ @thumb_type = param.to_s
240
243
  when "embeddable"
241
- @embeddable = param
244
+ @embeddable = param.to_i
242
245
  when "no_live_play"
243
- @no_live_play = param
246
+ @no_live_play = param.to_i
244
247
  when "tags_jp"
245
248
  @tags_jp = param
246
249
  when "tags_tw"
247
250
  @tags_tw = param
248
251
  when "tags_de"
249
252
  @tags_de = param
250
- when "tags_sp"
253
+ when "tags_es"
251
254
  @tags_sp = param
252
255
  when "user_id"
253
- @user_id = param
256
+ @user_id = param.to_i
254
257
  end
255
258
  }
256
259
  end
257
260
 
261
+ # このインスタンスがgetInfo等によって正常に情報を取得できている場合、trueとなる。
262
+ # 各種メソッドの実行には、これがtrueであることが要求される。
263
+ #
264
+ # @return [Boolean]
258
265
  attr_accessor :available
259
266
 
260
- # MylistAPI
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}
261
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}
262
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}
263
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}
264
309
  attr_accessor :description
265
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}
266
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}
267
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}
268
339
  attr_accessor :first_retrieve
269
- attr_accessor :update_time
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}
270
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}
271
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}
272
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}
273
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}
274
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}
275
399
  attr_accessor :last_res_body
276
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}
277
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}
278
419
  attr_accessor :create_time
279
- attr_accessor :update_time
280
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
281
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}
282
440
  attr_accessor :memo
283
- attr_accessor :published
284
- attr_accessor :updated
441
+
285
442
 
286
443
  # getThumbInfo
444
+
445
+ # 動画ファイルの種類。
446
+ #
447
+ # @return [String]
448
+ # <b>取得可能なメソッド</b>
449
+ # {Nicos::Movie#getInfo Movie::getInfo}
287
450
  attr_accessor :movie_type
451
+
452
+ # 高画質時の動画サイズ?
453
+ #
454
+ # @return [Fixnum]
455
+ # <b>取得可能なメソッド</b>
456
+ # {Nicos::Movie#getInfo Movie::getInfo}
288
457
  attr_accessor :size_high
458
+
459
+ # 低画質時の動画サイズ?
460
+ #
461
+ # @return [Fixnum]
462
+ # <b>取得可能なメソッド</b>
463
+ # {Nicos::Movie#getInfo Movie::getInfo}
289
464
  attr_accessor :size_low
465
+
466
+ # 動画の閲覧URL
467
+ #
468
+ # @return [String]
469
+ # <b>取得可能なメソッド</b>
470
+ # {Nicos::Movie#getInfo Movie::getInfo}
290
471
  attr_accessor :watch_url
472
+
473
+ # ?
474
+ #
475
+ # @return [String]
476
+ # <b>取得可能なメソッド</b>
477
+ # {Nicos::Movie#getInfo Movie::getInfo}
291
478
  attr_accessor :thumb_type
292
- attr_accessor :embeddable
293
- attr_accessor :no_live_play
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}
294
501
  attr_accessor :tags_jp
502
+
503
+ # 台湾タグ
504
+ #
505
+ # @return [Array<String>]
506
+ # <b>取得可能なメソッド</b>
507
+ # {Nicos::Movie#getInfo Movie::getInfo}
295
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}
296
516
  attr_accessor :user_id
517
+
297
518
  end