nicoscraper 0.2.3 → 0.2.4
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 +189 -90
- data/VERSION +1 -1
- data/index.html +0 -0
- data/lib/connector.rb +5 -2
- data/lib/converter.rb +7 -3
- data/lib/movie.rb +312 -91
- data/lib/mylist.rb +110 -16
- data/lib/namespace.rb +3 -0
- data/lib/parser.rb +14 -4
- data/lib/searcher.rb +108 -22
- data/nicoscraper.gemspec +4 -6
- data/test/movie_spec.rb +50 -9
- metadata +4 -6
- data/README.rdoc +0 -19
- data/lib/nicos.rb +0 -9
- data/lib/nicoscraper.rb +0 -6
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
|
-
|
13
|
-
|
14
|
-
movie
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
-
|
49
|
-
|
50
|
-
mylist
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
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.
|
88
|
-
|result, page|
|
115
|
+
searcher = Nicos::Searcher::ByTag.new()
|
89
116
|
|
90
|
-
|
91
|
-
|
92
|
-
|
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
|
-
|
95
|
-
" is posted at " +
|
96
|
-
Time.at(movie.first_retrieve).to_s.toutf8
|
197
|
+
+ シリーズ性判定の強化。説明文中にある「次 sm***」等の表記を解析し、マイリストに頼らずにシリーズ性を判定するようにする。
|
97
198
|
|
98
|
-
|
99
|
-
}
|
100
|
-
}
|
101
|
-
~~~~
|
199
|
+
+ コミュニティ動画、限定公開動画・マイリストへの対応。
|
102
200
|
|
103
|
-
これは'ゆっくり実況プレイpart1リンク'というタグの付く動画を、post_new=投稿日時が新しい順からさかのぼって取得していき、取得した動画の日付が前日の0時0分を超えるまでそれを続けます。
|
104
201
|
|
105
|
-
|
202
|
+
更新履歴
|
203
|
+
------
|
106
204
|
|
107
|
-
|
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.
|
1
|
+
0.2.4
|
data/index.html
ADDED
File without changes
|
data/lib/connector.rb
CHANGED
@@ -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
|
data/lib/converter.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
-
|
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
|
data/lib/movie.rb
CHANGED
@@ -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.
|
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/" +
|
42
|
+
puts "\sThis movie is found in mylist/" +
|
43
|
+
mylistId.to_s
|
35
44
|
else
|
36
|
-
puts "\sThis movie is not found in mylist/" +
|
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
|
-
#
|
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
|
-
|
92
|
+
mlObjAry
|
84
93
|
end
|
85
94
|
|
86
|
-
#
|
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
|
-
|
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
|
-
@
|
212
|
+
@create_time = param.to_i
|
192
213
|
when "updated"
|
193
|
-
@
|
194
|
-
|
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
|
-
|
217
|
+
when "mylist"
|
201
218
|
@mylist_counter = param.to_i
|
202
|
-
|
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 "
|
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
|
-
|
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
|
-
|
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
|
-
|
293
|
-
|
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
|