niconico 1.4.2 → 1.5.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.
- checksums.yaml +4 -4
- data/lib/niconico.rb +31 -10
- data/lib/niconico/channel.rb +1 -1
- data/lib/niconico/mylist.rb +1 -1
- data/lib/niconico/ranking.rb +1 -1
- data/lib/niconico/version.rb +1 -1
- data/lib/niconico/video.rb +24 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3206a2fa1c511105d47e732cdfc0a112c324e96
|
4
|
+
data.tar.gz: 393d00222c2354bcd57fca25e24b6f863bfbc100
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df5ee49a049b077e2bc7fe61597d003cdd3dfa12663e4ea118acc1e9f32bc74b0eb4274f226071493d39ba6ae1d9a46abc7789e446ae16780c0b46ad94e1b7fd
|
7
|
+
data.tar.gz: f3ec9f17c59f053471c8cf34ae7874b3216f569824d09259e9ef8849a0af6dd56362aea5d46962eb811974109b1fd8981bddb9d4c3bff5ada07939891adee54d
|
data/lib/niconico.rb
CHANGED
@@ -14,19 +14,26 @@ class Niconico
|
|
14
14
|
|
15
15
|
TEST_VIDEO_ID = "sm9"
|
16
16
|
|
17
|
-
attr_reader :agent
|
17
|
+
attr_reader :agent
|
18
|
+
|
19
|
+
def logged_in?; @logged_in; end
|
20
|
+
alias logined logged_in?
|
18
21
|
|
19
22
|
def initialize(*args)
|
20
23
|
case args.size
|
21
24
|
when 2
|
22
25
|
@mail, @pass = args
|
23
26
|
when 1
|
24
|
-
|
27
|
+
if args.first.kind_of?(Hash)
|
28
|
+
@mail, @pass, @token = args.first.values_at(:mail, :password, :token)
|
29
|
+
else
|
30
|
+
@token = args.first
|
31
|
+
end
|
25
32
|
else
|
26
33
|
raise ArgumentError, "wrong number of arguments (#{args.size} for 1..2)"
|
27
34
|
end
|
28
35
|
|
29
|
-
@
|
36
|
+
@logged_in = false
|
30
37
|
|
31
38
|
@agent = Mechanize.new.tap do |agent|
|
32
39
|
agent.user_agent = "Niconico.gem (#{Niconico::VERSION}, https://github.com/sorah/niconico)"
|
@@ -42,19 +49,32 @@ class Niconico
|
|
42
49
|
end
|
43
50
|
|
44
51
|
def login(force=false)
|
45
|
-
return false if !force && @
|
46
|
-
|
47
|
-
if @token
|
52
|
+
return false if !force && @logged_in
|
53
|
+
|
54
|
+
if @token && @mail && @pass
|
55
|
+
begin
|
56
|
+
login_with_token
|
57
|
+
rescue LoginError
|
58
|
+
login_with_email
|
59
|
+
end
|
60
|
+
elsif @token
|
48
61
|
login_with_token
|
49
62
|
elsif @mail && @pass
|
50
63
|
login_with_email
|
51
64
|
else
|
52
|
-
raise '
|
65
|
+
raise ArgumentError, 'Insufficient options for logging in (token or/and pair of mail and password required)'
|
53
66
|
end
|
54
67
|
end
|
55
68
|
|
56
69
|
def inspect
|
57
|
-
"#<Niconico: #{@mail || '(token)'}, #{@
|
70
|
+
"#<Niconico: #{@mail || '(token)'}, #{@logged_in ? "" : "not "}logged in>"
|
71
|
+
end
|
72
|
+
|
73
|
+
def token
|
74
|
+
return @token if @token
|
75
|
+
login unless logged_in?
|
76
|
+
|
77
|
+
@token = agent.cookie_jar.each('https://www.nicovideo.jp').find{|_| _.name == 'user_session' }.value
|
58
78
|
end
|
59
79
|
|
60
80
|
class LoginError < StandardError; end
|
@@ -65,7 +85,8 @@ class Niconico
|
|
65
85
|
page = @agent.post(URL[:login], 'mail' => @mail, 'password' => @pass)
|
66
86
|
|
67
87
|
raise LoginError, "Failed to login (x-niconico-authflag is 0)" if page.header["x-niconico-authflag"] == '0'
|
68
|
-
@
|
88
|
+
@token = nil
|
89
|
+
@logged_in = true
|
69
90
|
end
|
70
91
|
|
71
92
|
def login_with_token
|
@@ -79,7 +100,7 @@ class Niconico
|
|
79
100
|
page = @agent.get(URL[:top])
|
80
101
|
raise LoginError, "Failed to login (x-niconico-authflag is 0)" if page.header["x-niconico-authflag"] == '0'
|
81
102
|
|
82
|
-
@
|
103
|
+
@logged_in = true
|
83
104
|
end
|
84
105
|
|
85
106
|
end
|
data/lib/niconico/channel.rb
CHANGED
data/lib/niconico/mylist.rb
CHANGED
data/lib/niconico/ranking.rb
CHANGED
data/lib/niconico/version.rb
CHANGED
data/lib/niconico/video.rb
CHANGED
@@ -4,7 +4,7 @@ require 'niconico/deferrable'
|
|
4
4
|
|
5
5
|
class Niconico
|
6
6
|
def video(video_id)
|
7
|
-
login unless
|
7
|
+
login unless logged_in?
|
8
8
|
Video.new(self, video_id)
|
9
9
|
end
|
10
10
|
|
@@ -91,10 +91,33 @@ class Niconico
|
|
91
91
|
|
92
92
|
def get_video_by_other
|
93
93
|
raise VideoUnavailableError unless available?
|
94
|
+
warn "WARN: Niconico::Video#get_video_by_other is deprecated. use Video#video_cookie_jar or video_cookie_jar_file, and video_cookies with video_url instead. (Called by #{caller[0]})"
|
94
95
|
{cookie: @agent.cookie_jar.cookies(URI.parse(@video_url)),
|
95
96
|
url: video_url}
|
96
97
|
end
|
97
98
|
|
99
|
+
def video_cookies
|
100
|
+
return nil unless available?
|
101
|
+
@agent.cookie_jar.cookies(URI.parse(video_url))
|
102
|
+
end
|
103
|
+
|
104
|
+
def video_cookie_jar
|
105
|
+
raise VideoUnavailableError unless available?
|
106
|
+
video_cookies.map { |cookie|
|
107
|
+
[cookie.domain, "TRUE", cookie.path,
|
108
|
+
cookie.secure.inspect.upcase, cookie.expires.to_i,
|
109
|
+
cookie.name, cookie.value].join("\t")
|
110
|
+
}.join("\n")
|
111
|
+
end
|
112
|
+
|
113
|
+
def video_cookie_jar_file
|
114
|
+
raise VideoUnavailableError unless available?
|
115
|
+
Tempfile.new("niconico_cookie_jar_#{self.id}").tap do |io|
|
116
|
+
io.puts(video_cookie_jar)
|
117
|
+
io.flush
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
98
121
|
def inspect
|
99
122
|
"#<Niconico::Video: #{@id}.#{@type} \"#{@title}\"#{@eco ? " low":""}#{(fetched? && !@video_url) ? ' (unavailable)' : ''}#{fetched? ? '' : ' (defered)'}>"
|
100
123
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: niconico
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shota Fukumori (sora_h)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mechanize
|