cpsn 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/bin/cpsn +47 -10
- metadata +18 -4
data/Rakefile
CHANGED
@@ -16,6 +16,7 @@ begin
|
|
16
16
|
gem.authors = ["James Bowes"]
|
17
17
|
gem.add_dependency "mechanize", ">= 0.9.3"
|
18
18
|
gem.add_dependency "json", ">= 1.1.7"
|
19
|
+
gem.add_dependency "highline"
|
19
20
|
# there's nothing in lib, so ignore it to quelch warnings during install
|
20
21
|
gem.require_paths = ["bin"]
|
21
22
|
gem.extra_rdoc_files = ""
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.8.0
|
data/bin/cpsn
CHANGED
@@ -12,11 +12,15 @@ require 'yaml'
|
|
12
12
|
require 'optparse'
|
13
13
|
require 'logger'
|
14
14
|
require 'set'
|
15
|
+
require 'highline/import'
|
15
16
|
|
16
17
|
$login_url = "https://store.playstation.com/external/index.vm?returnURL=http://us.playstation.com/uwps/PSNTicketRetrievalGenericServlet"
|
17
18
|
$friend_url = "http://us.playstation.com/playstation/psn/profile/friends?id="
|
18
19
|
|
19
20
|
|
21
|
+
class NotLoggedInError < Exception
|
22
|
+
end
|
23
|
+
|
20
24
|
class Cpsn
|
21
25
|
|
22
26
|
attr_accessor :settings, :groups, :default_group
|
@@ -34,13 +38,16 @@ class Cpsn
|
|
34
38
|
@settings = load_settings()
|
35
39
|
@groups = load_groups(@settings)
|
36
40
|
|
37
|
-
get_agent(
|
38
|
-
options[:cookie])
|
41
|
+
get_agent(options[:cookie])
|
39
42
|
end
|
40
43
|
|
41
44
|
def load_settings()
|
42
45
|
@log.debug("Loading settings")
|
43
|
-
|
46
|
+
begin
|
47
|
+
settings = YAML::parse_file(File.expand_path("~/.cpsn/settings.yml"))
|
48
|
+
rescue
|
49
|
+
settings = {}.to_yaml
|
50
|
+
end
|
44
51
|
return settings
|
45
52
|
end
|
46
53
|
|
@@ -82,9 +89,29 @@ class Cpsn
|
|
82
89
|
end
|
83
90
|
|
84
91
|
|
85
|
-
def
|
92
|
+
def get_username
|
93
|
+
ask("username: ")
|
94
|
+
end
|
95
|
+
|
96
|
+
def get_password
|
97
|
+
ask("password: ") {|q| q.echo = false}
|
98
|
+
end
|
99
|
+
|
100
|
+
def get_cookie
|
86
101
|
@log.debug("Signing in for new cookie")
|
87
102
|
|
103
|
+
if @settings[:username].nil?
|
104
|
+
username = get_username
|
105
|
+
else
|
106
|
+
username = @settings[:username].value
|
107
|
+
end
|
108
|
+
|
109
|
+
if @settings[:password].nil?
|
110
|
+
password = get_password
|
111
|
+
else
|
112
|
+
password = @settings[:password].value
|
113
|
+
end
|
114
|
+
|
88
115
|
@agent.redirect_ok = false
|
89
116
|
page = @agent.get($login_url)
|
90
117
|
login_form = page.forms.first
|
@@ -111,13 +138,17 @@ class Cpsn
|
|
111
138
|
# this sets the sessionid cookie and others, which we need.
|
112
139
|
@agent.get("http://us.playstation.com/uwps/HandleIFrameRequests?sessionId=" + sessionId)
|
113
140
|
|
141
|
+
if not File.directory? File.expand_path("~/.cpsn")
|
142
|
+
Dir::mkdir File.expand_path("~/.cpsn")
|
143
|
+
end
|
144
|
+
|
114
145
|
@agent.cookie_jar.save_as File.expand_path("~/.cpsn/cookies.yml")
|
115
146
|
|
116
147
|
|
117
148
|
@agent.redirect_ok = true
|
118
149
|
end
|
119
150
|
|
120
|
-
def get_agent(
|
151
|
+
def get_agent(force_cookie)
|
121
152
|
@log.debug("Creating new user agent")
|
122
153
|
@agent = Mechanize.new
|
123
154
|
@agent.user_agent_alias = 'Mac FireFox'
|
@@ -126,7 +157,7 @@ class Cpsn
|
|
126
157
|
if File.exist? File.expand_path("~/.cpsn/cookies.yml") and not force_cookie
|
127
158
|
@agent.cookie_jar.load File.expand_path("~/.cpsn/cookies.yml")
|
128
159
|
else
|
129
|
-
get_cookie
|
160
|
+
get_cookie
|
130
161
|
end
|
131
162
|
end
|
132
163
|
|
@@ -135,13 +166,16 @@ class Cpsn
|
|
135
166
|
return _get_friends()
|
136
167
|
rescue Mechanize::ResponseCodeError => response
|
137
168
|
if response.response_code == '403'
|
138
|
-
get_cookie
|
139
|
-
@settings[:password].value)
|
169
|
+
get_cookie
|
140
170
|
retry
|
141
171
|
else
|
142
172
|
raise response
|
143
173
|
end
|
174
|
+
rescue NotLoggedInError
|
175
|
+
get_cookie
|
176
|
+
retry
|
144
177
|
end
|
178
|
+
|
145
179
|
end
|
146
180
|
|
147
181
|
def get_friend_status(friend)
|
@@ -149,8 +183,7 @@ class Cpsn
|
|
149
183
|
return _get_friend_status(friend)
|
150
184
|
rescue Mechanize::ResponseCodeError => response
|
151
185
|
if response.response_code == '403'
|
152
|
-
get_cookie
|
153
|
-
@settings[:password].value)
|
186
|
+
get_cookie
|
154
187
|
retry
|
155
188
|
else
|
156
189
|
raise response
|
@@ -170,6 +203,10 @@ class Cpsn
|
|
170
203
|
|
171
204
|
divs = page.search("div.slotcontent")
|
172
205
|
|
206
|
+
if divs.length == 0
|
207
|
+
raise NotLoggedInError
|
208
|
+
end
|
209
|
+
|
173
210
|
friends = []
|
174
211
|
for div in divs
|
175
212
|
friend = div.attributes["id"]
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cpsn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 8
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.8.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- James Bowes
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-11-
|
18
|
+
date: 2011-11-26 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: mechanize
|
@@ -49,6 +49,20 @@ dependencies:
|
|
49
49
|
version: 1.1.7
|
50
50
|
type: :runtime
|
51
51
|
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: highline
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
type: :runtime
|
65
|
+
version_requirements: *id003
|
52
66
|
description: "\n Query PSN friend status from the CLI. Shows useful information like the\n game being played, and what mode or map your friend is playing\n (if available).\n "
|
53
67
|
email: jbowes@repl.ca
|
54
68
|
executables:
|