cpsn 0.6.2 → 0.7.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/VERSION +1 -1
- data/bin/cpsn +55 -32
- metadata +39 -18
- data/.gitignore +0 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.7.0
|
data/bin/cpsn
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# cpsn - Query Friend status on the Playstation Network (tm)
|
4
4
|
#
|
5
5
|
# Author:: James Bowes <jbowes@repl.ca>
|
6
|
-
# Copyright:: Copyright (C) 2009 James Bowes
|
6
|
+
# Copyright:: Copyright (C) 2009 - 2011 James Bowes
|
7
7
|
|
8
8
|
require 'rubygems'
|
9
9
|
require 'mechanize'
|
@@ -13,9 +13,8 @@ require 'optparse'
|
|
13
13
|
require 'logger'
|
14
14
|
require 'set'
|
15
15
|
|
16
|
-
$login_url = "https://store.playstation.com/external/index.vm?returnURL=
|
17
|
-
$friend_url = "http://
|
18
|
-
$json_url = "http://profiles.us.playstation.com/playstation/psn/profile/get_gamer_summary_data?id="
|
16
|
+
$login_url = "https://store.playstation.com/external/index.vm?returnURL=http://us.playstation.com/uwps/PSNTicketRetrievalGenericServlet"
|
17
|
+
$friend_url = "http://us.playstation.com/playstation/psn/profile/friends?id="
|
19
18
|
|
20
19
|
|
21
20
|
class Cpsn
|
@@ -76,28 +75,51 @@ class Cpsn
|
|
76
75
|
return groups
|
77
76
|
end
|
78
77
|
|
78
|
+
|
79
|
+
def login_failed
|
80
|
+
puts "Error logging in. Did you give the right username and password?"
|
81
|
+
exit
|
82
|
+
end
|
83
|
+
|
84
|
+
|
79
85
|
def get_cookie(username, password)
|
80
86
|
@log.debug("Signing in for new cookie")
|
87
|
+
|
88
|
+
@agent.redirect_ok = false
|
81
89
|
page = @agent.get($login_url)
|
82
90
|
login_form = page.forms.first
|
83
|
-
login_form.
|
84
|
-
login_form.
|
91
|
+
login_form.j_username = username
|
92
|
+
login_form.j_password = password
|
85
93
|
page = @agent.submit(login_form)
|
86
|
-
|
94
|
+
|
95
|
+
if page.code != "302"
|
96
|
+
login_failed
|
97
|
+
end
|
87
98
|
|
88
|
-
|
89
|
-
|
90
|
-
|
99
|
+
page = @agent.get(page.response['Location'])
|
100
|
+
|
101
|
+
if page.code != "302"
|
102
|
+
login_failed
|
91
103
|
end
|
92
104
|
|
93
|
-
|
94
|
-
|
105
|
+
# we don't need to follow this last redirect, just to get the sesison
|
106
|
+
# id
|
107
|
+
location = page.response['Location']
|
108
|
+
parts = location.split("sessionId=")
|
109
|
+
sessionId = parts[1]
|
110
|
+
|
111
|
+
# this sets the sessionid cookie and others, which we need.
|
112
|
+
@agent.get("http://us.playstation.com/uwps/HandleIFrameRequests?sessionId=" + sessionId)
|
113
|
+
|
95
114
|
@agent.cookie_jar.save_as File.expand_path("~/.cpsn/cookies.yml")
|
115
|
+
|
116
|
+
|
117
|
+
@agent.redirect_ok = true
|
96
118
|
end
|
97
119
|
|
98
120
|
def get_agent(username, password, force_cookie)
|
99
121
|
@log.debug("Creating new user agent")
|
100
|
-
@agent =
|
122
|
+
@agent = Mechanize.new
|
101
123
|
@agent.user_agent_alias = 'Mac FireFox'
|
102
124
|
@agent.redirect_ok = true
|
103
125
|
|
@@ -111,7 +133,7 @@ class Cpsn
|
|
111
133
|
def get_friends()
|
112
134
|
begin
|
113
135
|
return _get_friends()
|
114
|
-
rescue
|
136
|
+
rescue Mechanize::ResponseCodeError => response
|
115
137
|
if response.response_code == '403'
|
116
138
|
get_cookie(@settings[:username].value,
|
117
139
|
@settings[:password].value)
|
@@ -125,7 +147,7 @@ class Cpsn
|
|
125
147
|
def get_friend_status(friend)
|
126
148
|
begin
|
127
149
|
return _get_friend_status(friend)
|
128
|
-
rescue
|
150
|
+
rescue Mechanize::ResponseCodeError => response
|
129
151
|
if response.response_code == '403'
|
130
152
|
get_cookie(@settings[:username].value,
|
131
153
|
@settings[:password].value)
|
@@ -140,7 +162,12 @@ class Cpsn
|
|
140
162
|
|
141
163
|
def _get_friends()
|
142
164
|
@log.debug("Getting friends list")
|
143
|
-
|
165
|
+
@agent.get( "http://us.playstation.com/myfriends/")
|
166
|
+
url = $friend_url + rand().to_s
|
167
|
+
page = @agent.get("http://us.playstation.com/uwps/decryptText?id=0.1234554")
|
168
|
+
@log.debug("friend url: " + url)
|
169
|
+
page = @agent.get(url, nil, "http://us.playstation.com/myfriends/")
|
170
|
+
|
144
171
|
divs = page.search("div.slotcontent")
|
145
172
|
|
146
173
|
friends = []
|
@@ -155,25 +182,21 @@ class Cpsn
|
|
155
182
|
|
156
183
|
def _get_friend_status(friend)
|
157
184
|
@log.debug("Loading friend status for #{friend}")
|
158
|
-
page = @agent.get(
|
159
|
-
data = JSON.parse(page.body)
|
185
|
+
page = @agent.get("http://us.playstation.com/playstation/psn/profile/" + friend + "?id=0.12343", nil, "http://us.playstation.com/myfriends")
|
160
186
|
|
161
|
-
|
187
|
+
friend = {:name => friend,
|
188
|
+
:status => 'offline',
|
189
|
+
:playing => '',
|
190
|
+
}
|
162
191
|
|
163
|
-
|
192
|
+
status = page.search("div.oStatus")[0]
|
164
193
|
|
165
|
-
if
|
166
|
-
|
167
|
-
|
194
|
+
if status.search("div")[0].attributes['class'].to_s == "onlineStatus online"
|
195
|
+
friend[:status] = "online"
|
196
|
+
|
197
|
+
playing = page.search("span._iamplaying_")
|
198
|
+
friend[:playing] = playing[0].text.strip
|
168
199
|
|
169
|
-
if data["onlineStatus"]["extensionStatus"] != nil
|
170
|
-
friend[:status] = 'online'
|
171
|
-
friend[:playing] = data["onlineStatus"]["extensionStatus"]["title"]
|
172
|
-
friend[:game_status] = data["onlineStatus"]["extensionStatus"]["status"]
|
173
|
-
else
|
174
|
-
friend[:status] = 'offline'
|
175
|
-
friend[:playing] = ""
|
176
|
-
friend[:game_status] = ""
|
177
200
|
end
|
178
201
|
|
179
202
|
return friend
|
@@ -237,7 +260,7 @@ for friend_name in friend_names
|
|
237
260
|
|
238
261
|
if friend
|
239
262
|
if friend[:status] != "offline" or options[:offline]
|
240
|
-
puts friend[:status] + "\t" + friend[:name] + "\t" + friend[:playing]
|
263
|
+
puts friend[:status] + "\t" + friend[:name] + "\t" + friend[:playing]
|
241
264
|
end
|
242
265
|
else
|
243
266
|
puts "Error: no access to " + friend_name
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cpsn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 3
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 7
|
9
|
+
- 0
|
10
|
+
version: 0.7.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- James Bowes
|
@@ -9,29 +15,40 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
13
|
-
default_executable: cpsn
|
18
|
+
date: 2011-11-21 00:00:00 Z
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: mechanize
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
20
25
|
requirements:
|
21
26
|
- - ">="
|
22
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 61
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 9
|
32
|
+
- 3
|
23
33
|
version: 0.9.3
|
24
|
-
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: json
|
27
|
-
|
28
|
-
|
29
|
-
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
30
41
|
requirements:
|
31
42
|
- - ">="
|
32
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 29
|
45
|
+
segments:
|
46
|
+
- 1
|
47
|
+
- 1
|
48
|
+
- 7
|
33
49
|
version: 1.1.7
|
34
|
-
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
35
52
|
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 "
|
36
53
|
email: jbowes@repl.ca
|
37
54
|
executables:
|
@@ -41,37 +58,41 @@ extensions: []
|
|
41
58
|
extra_rdoc_files: []
|
42
59
|
|
43
60
|
files:
|
44
|
-
- .gitignore
|
45
61
|
- README.mkd
|
46
62
|
- Rakefile
|
47
63
|
- TODO
|
48
64
|
- VERSION
|
49
65
|
- bin/cpsn
|
50
|
-
has_rdoc: true
|
51
66
|
homepage: http://github.com/jbowes/cpsn
|
52
67
|
licenses: []
|
53
68
|
|
54
69
|
post_install_message:
|
55
|
-
rdoc_options:
|
56
|
-
|
70
|
+
rdoc_options: []
|
71
|
+
|
57
72
|
require_paths:
|
58
73
|
- bin
|
59
74
|
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
60
76
|
requirements:
|
61
77
|
- - ">="
|
62
78
|
- !ruby/object:Gem::Version
|
79
|
+
hash: 3
|
80
|
+
segments:
|
81
|
+
- 0
|
63
82
|
version: "0"
|
64
|
-
version:
|
65
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
66
85
|
requirements:
|
67
86
|
- - ">="
|
68
87
|
- !ruby/object:Gem::Version
|
88
|
+
hash: 3
|
89
|
+
segments:
|
90
|
+
- 0
|
69
91
|
version: "0"
|
70
|
-
version:
|
71
92
|
requirements: []
|
72
93
|
|
73
94
|
rubyforge_project:
|
74
|
-
rubygems_version: 1.
|
95
|
+
rubygems_version: 1.8.10
|
75
96
|
signing_key:
|
76
97
|
specification_version: 3
|
77
98
|
summary: Query PSN friend status from the CLI
|
data/.gitignore
DELETED