cpsn 0.7.0 → 0.8.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/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:
|