nicovideo 0.0.6 → 0.1.0
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/ChangeLog +6 -1
- data/lib/nicovideo.rb +3 -1
- data/lib/nicovideo/base.rb +17 -6
- data/lib/nicovideo/openlist.rb +3 -3
- data/lib/nicovideo/page.rb +1 -1
- data/lib/nicovideo/ranking.rb +37 -0
- data/lib/nicovideo/search.rb +86 -0
- data/lib/nicovideo/tagsearch.rb +13 -0
- data/lib/nicovideo/version.rb +2 -2
- data/lib/nicovideo/videopage.rb +6 -0
- data/test/test_openlist.rb +7 -0
- data/test/test_ranking.rb +30 -0
- data/test/test_search.rb +66 -0
- data/test/test_tagsearch.rb +65 -0
- data/test/test_videopage.rb +2 -1
- metadata +11 -2
data/ChangeLog
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
2008-02-24 version 0.1.0
|
2
|
+
|
3
|
+
* added functions to search, tagsearch, ranking
|
4
|
+
* added low?() method(ref: http://d.hatena.ne.jp/hayori/20080218/1203312604)
|
5
|
+
|
1
6
|
2008-02-16 version 0.0.6
|
2
7
|
|
3
8
|
* fixed bug of downloading video via mylist
|
@@ -10,6 +15,6 @@
|
|
10
15
|
2008-02-02 version 0.0.4
|
11
16
|
|
12
17
|
* added functions to get mylist and openlist
|
13
|
-
* auto login (ref: http://d.hatena.ne.jp/zorio/20080122/1201018583)
|
18
|
+
* added auto login (ref: http://d.hatena.ne.jp/zorio/20080122/1201018583)
|
14
19
|
* added published_at method to VideoPage
|
15
20
|
* did unit tests
|
data/lib/nicovideo.rb
CHANGED
@@ -8,8 +8,10 @@ require 'nicovideo/videopage'
|
|
8
8
|
require 'nicovideo/comments'
|
9
9
|
require 'nicovideo/mylist'
|
10
10
|
require 'nicovideo/openlist'
|
11
|
+
require 'nicovideo/search'
|
12
|
+
require 'nicovideo/tagsearch'
|
13
|
+
require 'nicovideo/ranking'
|
11
14
|
#require 'nicovideo/tags'
|
12
15
|
#require 'nicovideo/ichiba'
|
13
|
-
#require 'nicovideo/rank'
|
14
16
|
#require 'nicovideo/feed'
|
15
17
|
|
data/lib/nicovideo/base.rb
CHANGED
@@ -105,14 +105,25 @@ module Nicovideo
|
|
105
105
|
OpenList.new(@agent, video_id)
|
106
106
|
end
|
107
107
|
|
108
|
-
#
|
109
|
-
|
110
|
-
|
108
|
+
# type : 'mylist', 'view' or 'res'
|
109
|
+
# span : 'daily', 'newarrival', 'weekly', 'monthly', 'total'
|
110
|
+
# category : 'all', 'music' ... and more
|
111
|
+
def ranking(type='mylist', span='daily', category='all', pagenum=nil)
|
112
|
+
Ranking.new(@agent, type, span, category, pagenum).to_a
|
111
113
|
end
|
112
114
|
|
113
|
-
#
|
114
|
-
|
115
|
-
|
115
|
+
# keyword : search keyword
|
116
|
+
# sort : nil -> published date
|
117
|
+
# 'v' -> playback times
|
118
|
+
# 'n' -> commented date
|
119
|
+
# 'r' -> comment number
|
120
|
+
# 'm' -> mylist number
|
121
|
+
def search(keyword, sort=nil, order=nil, pagenum=1)
|
122
|
+
Search.new(@agent, keyword, sort, order, pagenum)
|
123
|
+
end
|
124
|
+
|
125
|
+
def tagsearch(keyword, sort=nil, order=nil, pagenum=1)
|
126
|
+
TagSearch.new(@agent, keyword, sort, order, pagenum)
|
116
127
|
end
|
117
128
|
|
118
129
|
private
|
data/lib/nicovideo/openlist.rb
CHANGED
@@ -29,12 +29,12 @@ module Nicovideo
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def each
|
32
|
-
|
32
|
+
self.mylists.each {|ml|
|
33
33
|
yield ml
|
34
34
|
}
|
35
35
|
end
|
36
36
|
|
37
|
-
def to_a() mylists end
|
37
|
+
def to_a() self.mylists end
|
38
38
|
|
39
39
|
def pagenum=(pagenum)
|
40
40
|
if @pagenum != pagenum
|
@@ -56,7 +56,7 @@ module Nicovideo
|
|
56
56
|
self.pagenum = @pagenum - 1
|
57
57
|
end
|
58
58
|
|
59
|
-
|
59
|
+
protected
|
60
60
|
def parse(page)
|
61
61
|
if page.body =~ /<strong>#{@video_id}<\/strong> を含む公開マイリストはありません。/
|
62
62
|
@not_found = true
|
data/lib/nicovideo/page.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Nicovideo
|
2
|
+
class Ranking < Page
|
3
|
+
def initialize agent, type='mylist', span='daily', category='all', pagenum=nil
|
4
|
+
super(agent)
|
5
|
+
@type = type
|
6
|
+
@category = category
|
7
|
+
@pagenum = pagenum
|
8
|
+
@url = url()
|
9
|
+
self.register_getter ["videos"]
|
10
|
+
end
|
11
|
+
|
12
|
+
# call whenever pagenum changed
|
13
|
+
def url
|
14
|
+
url = "#{BASE_URL}/ranking/#{@type}/#{@span}/#{@category}"
|
15
|
+
if @pagenum
|
16
|
+
url += '?page=' + pagenum.to_s
|
17
|
+
end
|
18
|
+
url
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_a
|
22
|
+
videos()
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
def parse(page)
|
27
|
+
ranking = page/'h3/a[@class=video]'
|
28
|
+
@videos = ranking.inject([]) {|arr,v| #
|
29
|
+
#puts v.attributes['href']
|
30
|
+
vp = VideoPage.new(@agent, v.attributes['href'].sub(/#{BASE_URL}\/watch\/(\w+)$/,'\1'))
|
31
|
+
vp.title = v.inner_html
|
32
|
+
arr << vp
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
module Nicovideo
|
4
|
+
class Search < Page
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def initialize agent, keyword, sort=nil, order=nil, pagenum=1
|
8
|
+
super(agent)
|
9
|
+
@search_type = 'search'
|
10
|
+
@keyword = CGI.escape(CGI.escape(keyword)) # なぜか2回エスケープが必要?
|
11
|
+
@order = order
|
12
|
+
|
13
|
+
params = ["videos", "total_size", "has_next?", "has_prev?"]
|
14
|
+
self.register_getter params
|
15
|
+
|
16
|
+
@url = url()
|
17
|
+
end
|
18
|
+
|
19
|
+
def url
|
20
|
+
url = "#{BASE_URL}/#{@search_type}?ref=top&s=#{@keyword}"
|
21
|
+
url += '&sort=' + @sort if @sort
|
22
|
+
url += '&order=' + @order if @order
|
23
|
+
url
|
24
|
+
end
|
25
|
+
|
26
|
+
def each
|
27
|
+
self.videos.each {|v|
|
28
|
+
yield v
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_a() self.videos end
|
33
|
+
|
34
|
+
def pagenum=(pagenum)
|
35
|
+
if @pagenum != pagenum
|
36
|
+
@pagenum = pagenum
|
37
|
+
get_page(self.url, true)
|
38
|
+
end
|
39
|
+
@pagenum
|
40
|
+
end
|
41
|
+
|
42
|
+
def page=(pagenum)
|
43
|
+
self.pagenum = pagenum
|
44
|
+
end
|
45
|
+
|
46
|
+
def next
|
47
|
+
self.pagenum = @pagenum + 1
|
48
|
+
end
|
49
|
+
|
50
|
+
def prev
|
51
|
+
self.pagenum = @pagenum - 1
|
52
|
+
end
|
53
|
+
|
54
|
+
protected
|
55
|
+
def parse(page)
|
56
|
+
if page.body =~ /<\/strong> を含む動画はありません。/
|
57
|
+
@not_found = true
|
58
|
+
raise NotFound
|
59
|
+
end
|
60
|
+
|
61
|
+
@total_size = page.search('form[@name="sort"]//td[@class="TXT12"]//strong').first.inner_html.to_i
|
62
|
+
|
63
|
+
if (page/'a//img[@src="http://res.nicovideo.jp/img/common/pager_next_on.gif"]').size > 0
|
64
|
+
@has_next = true
|
65
|
+
else
|
66
|
+
@has_next = false
|
67
|
+
end
|
68
|
+
|
69
|
+
if (page/'a//img[@src="http://res.nicovideo.jp/img/common/pager_back_on.gif"]').size > 0
|
70
|
+
@has_prev = true
|
71
|
+
else
|
72
|
+
@has_prev = false
|
73
|
+
end
|
74
|
+
|
75
|
+
result_xpath = page/'div[@class="thumb_R"]/p[@class="TXT12"]/a[@class="video"]'
|
76
|
+
puts result_xpath.size.to_s
|
77
|
+
@videos = result_xpath.inject([]) {|arr, v|
|
78
|
+
vp = VideoPage.new(@agent, v.attributes['href'].sub(/watch\/(\w+)$/,'\1'))
|
79
|
+
vp.title = v.inner_html
|
80
|
+
arr << vp
|
81
|
+
}
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
data/lib/nicovideo/version.rb
CHANGED
data/lib/nicovideo/videopage.rb
CHANGED
data/test/test_openlist.rb
CHANGED
@@ -13,6 +13,13 @@ class TestNicovideoOpenList < Test::Unit::TestCase
|
|
13
13
|
@vid_notfound = 'sm500875' # 公開マイリストが存在しない
|
14
14
|
end
|
15
15
|
|
16
|
+
def test_openlist_testing
|
17
|
+
result = @nv.openlist("sm500873")
|
18
|
+
result.each {|v|
|
19
|
+
puts v.title
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
16
23
|
def test_openlist_valid
|
17
24
|
ol = nil
|
18
25
|
assert_nothing_raised {
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestNicovideoRanking < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
account = YAML.load_file(ENV['HOME'] + '/.nicovideo/account.yml')
|
7
|
+
@nv = Nicovideo.new(account['mail'], account['password'])
|
8
|
+
@nv.login
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_ranking_valid
|
12
|
+
rv = nil
|
13
|
+
assert_nothing_raised {
|
14
|
+
rv = @nv.ranking
|
15
|
+
}
|
16
|
+
|
17
|
+
rv.each {|v|
|
18
|
+
puts v.id + ':' + v.published_at.to_s + ':' + v.title
|
19
|
+
sleep 1
|
20
|
+
}
|
21
|
+
|
22
|
+
sleep 1
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_ranking_invalid
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_ranking_notopened
|
29
|
+
end
|
30
|
+
end
|
data/test/test_search.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestNicovideoSearch < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
account = YAML.load_file(ENV['HOME'] + '/.nicovideo/account.yml')
|
7
|
+
@nv = Nicovideo.new(account['mail'], account['password'])
|
8
|
+
@nv.login
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_search_testing0
|
12
|
+
result = @nv.search("aaa")
|
13
|
+
puts result.total_size
|
14
|
+
result.each {|v|
|
15
|
+
puts v.title
|
16
|
+
}
|
17
|
+
sleep 1
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_search_testing1
|
21
|
+
result = @nv.search("ミク")
|
22
|
+
result.each {|v|
|
23
|
+
puts v.title
|
24
|
+
}
|
25
|
+
sleep 1
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_search_testing2
|
29
|
+
result = @nv.search("ミク", 'n')
|
30
|
+
result.each {|v|
|
31
|
+
puts v.title
|
32
|
+
}
|
33
|
+
sleep 1
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_search_testing3
|
37
|
+
result = @nv.search("ミク", 'n', 'd')
|
38
|
+
result.each {|v|
|
39
|
+
puts v.title
|
40
|
+
}
|
41
|
+
sleep 1
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
=begin
|
46
|
+
def test_search_valid
|
47
|
+
rv = nil
|
48
|
+
assert_nothing_raised {
|
49
|
+
rv = @nv.ranking
|
50
|
+
}
|
51
|
+
|
52
|
+
rv.each {|v|
|
53
|
+
puts v.id + ':' + v.published_at.to_s + ':' + v.title
|
54
|
+
sleep 1
|
55
|
+
}
|
56
|
+
|
57
|
+
sleep 1
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_search_invalid
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_search_notopened
|
64
|
+
end
|
65
|
+
=end
|
66
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestNicovideoTagSearch < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
account = YAML.load_file(ENV['HOME'] + '/.nicovideo/account.yml')
|
7
|
+
@nv = Nicovideo.new(account['mail'], account['password'])
|
8
|
+
@nv.login
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_tagsearch_testing0
|
12
|
+
result = @nv.tagsearch("aaa")
|
13
|
+
puts result.total_size
|
14
|
+
result.each {|v|
|
15
|
+
puts v.title
|
16
|
+
}
|
17
|
+
sleep 1
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_tagsearch_testing1
|
21
|
+
result = @nv.tagsearch("ミク")
|
22
|
+
result.each {|v|
|
23
|
+
puts v.title
|
24
|
+
}
|
25
|
+
sleep 1
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_tagsearch_testing1
|
29
|
+
result = @nv.tagsearch("ミク", 'v', 'a')
|
30
|
+
result.each {|v|
|
31
|
+
puts v.title
|
32
|
+
}
|
33
|
+
sleep 1
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_search_testing2
|
37
|
+
result = @nv.tagsearch("ミク", 'n')
|
38
|
+
result.each {|v|
|
39
|
+
puts v.title
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
=begin
|
45
|
+
def test_search_valid
|
46
|
+
rv = nil
|
47
|
+
assert_nothing_raised {
|
48
|
+
rv = @nv.ranking
|
49
|
+
}
|
50
|
+
|
51
|
+
rv.each {|v|
|
52
|
+
puts v.id + ':' + v.published_at.to_s + ':' + v.title
|
53
|
+
sleep 1
|
54
|
+
}
|
55
|
+
|
56
|
+
sleep 1
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_search_invalid
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_search_notopened
|
63
|
+
end
|
64
|
+
=end
|
65
|
+
end
|
data/test/test_videopage.rb
CHANGED
@@ -8,7 +8,7 @@ class TestNicovideoVideoPage < Test::Unit::TestCase
|
|
8
8
|
@nv.login
|
9
9
|
|
10
10
|
# @vid_valid = 'sm500873' # 閲覧可能(組曲)
|
11
|
-
@vid_valid = '
|
11
|
+
@vid_valid = 'sm2407057' # 閲覧可能(短い動画)
|
12
12
|
@vid_invalid = 'smfdsafd' # IDが間違っている
|
13
13
|
@vid_notfound = 'sm500875' # 削除済み
|
14
14
|
end
|
@@ -20,6 +20,7 @@ class TestNicovideoVideoPage < Test::Unit::TestCase
|
|
20
20
|
vp = @nv.watch(@vid_valid)
|
21
21
|
}
|
22
22
|
assert_nothing_raised { vp.flv }
|
23
|
+
sleep 5
|
23
24
|
end
|
24
25
|
=begin
|
25
26
|
def test_watch_valid
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: nicovideo
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0
|
7
|
-
date: 2008-02-
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2008-02-24 00:00:00 +09:00
|
8
8
|
summary: utils for nicovideo
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -43,6 +43,9 @@ files:
|
|
43
43
|
- lib/nicovideo/comments.rb
|
44
44
|
- lib/nicovideo/mylist.rb
|
45
45
|
- lib/nicovideo/openlist.rb
|
46
|
+
- lib/nicovideo/ranking.rb
|
47
|
+
- lib/nicovideo/search.rb
|
48
|
+
- lib/nicovideo/tagsearch.rb
|
46
49
|
- test/test_helper.rb
|
47
50
|
- test/runner.rb
|
48
51
|
- test/test_nicovideo.rb
|
@@ -50,6 +53,9 @@ files:
|
|
50
53
|
- test/test_videopage.rb
|
51
54
|
- test/test_mylist.rb
|
52
55
|
- test/test_openlist.rb
|
56
|
+
- test/test_ranking.rb
|
57
|
+
- test/test_search.rb
|
58
|
+
- test/test_tagsearch.rb
|
53
59
|
- sample/nv_download.rb
|
54
60
|
- sample/nv_download2.rb
|
55
61
|
- sample/nv_mylist.rb
|
@@ -58,9 +64,12 @@ test_files:
|
|
58
64
|
- test/test_openlist.rb
|
59
65
|
- test/test_nicovideo.rb
|
60
66
|
- test/test_mylist.rb
|
67
|
+
- test/test_ranking.rb
|
68
|
+
- test/test_tagsearch.rb
|
61
69
|
- test/test_videopage.rb
|
62
70
|
- test/test_helper.rb
|
63
71
|
- test/test_login.rb
|
72
|
+
- test/test_search.rb
|
64
73
|
rdoc_options:
|
65
74
|
- --main
|
66
75
|
- README.txt
|