psn_trophies 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +12 -2
- data/README.md +2 -1
- data/Rakefile +12 -0
- data/lib/psn_trophies.rb +18 -4
- data/lib/psn_trophies/version.rb +1 -1
- data/psn_trophies.gemspec +4 -0
- data/test/fixtures/profile_leitebr.html +402 -0
- data/test/fixtures/profile_leitebr_trophies.html +2225 -0
- data/test/fixtures/profile_nonexistinvaliduser.html +163 -0
- data/test/test_psn_trophies.rb +60 -0
- metadata +56 -9
data/Gemfile.lock
CHANGED
@@ -1,17 +1,27 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
psn_trophies (0.0.
|
4
|
+
psn_trophies (0.0.2)
|
5
5
|
nokogiri (~> 1.5.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
+
ansi (1.3.0)
|
11
|
+
fakeweb (1.3.0)
|
12
|
+
minitest (2.6.1)
|
13
|
+
minitest-reporters (0.4.0)
|
14
|
+
ansi
|
15
|
+
minitest (~> 2.0)
|
16
|
+
ruby-progressbar
|
10
17
|
nokogiri (1.5.0)
|
18
|
+
ruby-progressbar (0.0.10)
|
11
19
|
|
12
20
|
PLATFORMS
|
13
21
|
ruby
|
14
22
|
|
15
23
|
DEPENDENCIES
|
16
|
-
|
24
|
+
fakeweb
|
25
|
+
minitest
|
26
|
+
minitest-reporters
|
17
27
|
psn_trophies!
|
data/README.md
CHANGED
@@ -16,6 +16,7 @@ Usage
|
|
16
16
|
require "psn_trophies"
|
17
17
|
|
18
18
|
client = PsnTrophies::Client.new
|
19
|
-
played_games = client.trophies("
|
19
|
+
played_games = client.trophies("valid_psn_id") # ex. LeiteBR
|
20
20
|
played_games.map(&:title) #=> ["Dragon Age II", "GTA IV", ... etc.]
|
21
21
|
|
22
|
+
client.trophies("invalid_psn_id") # => raises PsnTrophies::NoUserProfileError
|
data/Rakefile
CHANGED
@@ -1,2 +1,14 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
1
4
|
require 'bundler'
|
2
5
|
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
desc "Run tests"
|
8
|
+
Rake::TestTask.new do |t|
|
9
|
+
t.libs << "test"
|
10
|
+
t.test_files = FileList['test/**/*.rb']
|
11
|
+
t.verbose = true
|
12
|
+
end
|
13
|
+
|
14
|
+
task :default => :test
|
data/lib/psn_trophies.rb
CHANGED
@@ -4,13 +4,17 @@ require "uri"
|
|
4
4
|
|
5
5
|
module PsnTrophies
|
6
6
|
|
7
|
+
class NoUserProfileError < StandardError; end
|
8
|
+
|
7
9
|
class Client
|
8
10
|
|
9
11
|
def trophies(profile_id)
|
10
|
-
|
12
|
+
check_profile_id(profile_id)
|
13
|
+
body = get_body("http://us.playstation.com/playstation/psn/profile/#{profile_id}/get_ordered_trophies_data",
|
14
|
+
"http://us.playstation.com/publictrophy/index.htm?onlinename=#{profile_id}/trophies")
|
11
15
|
|
12
16
|
games = []
|
13
|
-
doc = Nokogiri::HTML(body)
|
17
|
+
doc = Nokogiri::HTML.fragment(body)
|
14
18
|
doc.css('.slotcontent').each do |container|
|
15
19
|
logo = container.at_css('.titlelogo img')["src"]
|
16
20
|
title = container.at_css('.gameTitleSortField').content
|
@@ -24,7 +28,17 @@ module PsnTrophies
|
|
24
28
|
|
25
29
|
private
|
26
30
|
|
27
|
-
def
|
31
|
+
def check_profile_id(profile_id)
|
32
|
+
body = get_body("http://us.playstation.com/playstation/psn/profiles/#{profile_id}",
|
33
|
+
"http://us.playstation.com/publictrophy/index.htm?onlinename=#{profile_id}")
|
34
|
+
doc = Nokogiri::HTML(body)
|
35
|
+
error_section = doc.at_css('.errorSection')
|
36
|
+
unless error_section.nil?
|
37
|
+
raise NoUserProfileError.new("No User Profile for #{profile_id}")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_body(uri, referer)
|
28
42
|
uri = URI.parse(uri)
|
29
43
|
http = Net::HTTP.new(uri.host, uri.port)
|
30
44
|
|
@@ -35,7 +49,7 @@ module PsnTrophies
|
|
35
49
|
request["Accept-Language"] = "en-us,en;q=0.5"
|
36
50
|
request["Accept-Charset"] = "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
|
37
51
|
request["Connection"] = "keep-alive"
|
38
|
-
request["Referer"] =
|
52
|
+
request["Referer"] = referer
|
39
53
|
|
40
54
|
response = http.request(request)
|
41
55
|
response.body
|
data/lib/psn_trophies/version.rb
CHANGED
data/psn_trophies.gemspec
CHANGED
@@ -0,0 +1,402 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Date: Mon, 10 Oct 2011 02:12:53 GMT
|
3
|
+
Server: Apache
|
4
|
+
Content-Length: 11754
|
5
|
+
Set-Cookie: JSESSIONID=L8MxTSJFtnG3Zwmtd1jQhtRVp39jQXWWnvn6Xl4vKXqgyTc1fLqf!1198684090; path=/
|
6
|
+
Content-Language: en-US
|
7
|
+
X-Powered-By: Servlet/2.5 JSP/2.1
|
8
|
+
Content-Type: text/html; charset=UTF-8
|
9
|
+
Set-Cookie: SONYCOOKIE1=577022144.20480.0000; path=/
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
16
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
17
|
+
|
18
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
<head>
|
26
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
|
27
|
+
<link rel="shortcut icon" href="http://webassets.scea.com/playstation/assets/favicon.ico"/ type="image/x-icon">
|
28
|
+
<link rel="stylesheet" href="http://webassets.scea.com/playstation/assets/css/reset.css" type="text/css" media="screen" charset="utf-8"/>
|
29
|
+
<link rel="stylesheet" href="http://webassets.scea.com/playstation/assets/css/global.css" type="text/css" media="screen" charset="utf-8"/>
|
30
|
+
<link rel="stylesheet" href="http://webassets.scea.com/playstation/assets/css/modules.css" type="text/css" media="screen" charset="utf-8"/>
|
31
|
+
<link rel="stylesheet" href="http://webassets.scea.com/playstation/assets/css/additional.css" type="text/css" media="screen" charset="utf-8"/>
|
32
|
+
<!--[if lte IE 7]>
|
33
|
+
<link rel="stylesheet" href="http://webassets.scea.com/playstation/assets/css/ie.css" type="text/css" media="screen" charset="utf-8"/>
|
34
|
+
<link rel="stylesheet" href="http://webassets.scea.com/playstation/assets/css/additionalie.css" type="text/css" media="screen" charset="utf-8"/>
|
35
|
+
<![endif]-->
|
36
|
+
|
37
|
+
<link rel="stylesheet" href="http://webassets.scea.com/playstation/assets/css/temp.css" type="text/css" media="screen" charset="utf-8"/>
|
38
|
+
|
39
|
+
<link rel="stylesheet" type="text/css" media="all" href="http://webassets.scea.com/playstation/stylesheets/lightview.css"/>
|
40
|
+
<link rel="stylesheet" type="text/css" media="all" href="http://webassets.scea.com/playstation/stylesheets/prototip.css"/>
|
41
|
+
<link rel="stylesheet" type="text/css" media="all" href="http://webassets.scea.com/playstation/stylesheets/trophies.css"/>
|
42
|
+
|
43
|
+
<!--[if lt IE 7]>
|
44
|
+
<link rel="stylesheet" type="text/css" media="all" href="http://webassets.scea.com/playstation/stylesheets/bie6.css"/>
|
45
|
+
<![endif]-->
|
46
|
+
<!--[if (gte IE 7)]>
|
47
|
+
<link rel="stylesheet" type="text/css" media="all" href="http://webassets.scea.com/playstation/stylesheets/bie7.css"/>
|
48
|
+
<![endif]-->
|
49
|
+
|
50
|
+
<script type="text/javascript" charset="utf-8" src="http://webassets.scea.com/playstation/assets/js/swfobject.js"></script>
|
51
|
+
<script type="text/javascript" src="http://webassets.scea.com/playstation/javascripts/protoaculous.1.8.2.p1.6.1_rc3.min_patch.js"></script>
|
52
|
+
<script type="text/javascript" src="http://webassets.scea.com/playstation/javascripts/lightview.js"></script>
|
53
|
+
<script type="text/javascript" src="http://webassets.scea.com/playstation/javascripts/prototip.js"></script>
|
54
|
+
<script type="text/javascript" src="http://webassets.scea.com/playstation/javascripts/livepipe/livepipe.js"></script>
|
55
|
+
<script type="text/javascript" src="http://webassets.scea.com/playstation/javascripts/livepipe/scrollbar.js"></script>
|
56
|
+
|
57
|
+
<script type="text/javascript" src="http://webassets.scea.com/playstation/javascripts/application.js"></script>
|
58
|
+
|
59
|
+
<script src="http://webassets.scea.com/playstation/assets/js/AC_RunActiveContent.js" type="text/javascript"></script>
|
60
|
+
<title>PlayStation.com - Public Profile - LeiteBR</title>
|
61
|
+
|
62
|
+
<script type="text/javascript">
|
63
|
+
var busyPath = "/playstation/pages/busy.html";
|
64
|
+
</script>
|
65
|
+
</head>
|
66
|
+
<body>
|
67
|
+
<!-- /main -->
|
68
|
+
<div id="main" name="main" class="clearfix">
|
69
|
+
<!-- breadcrumb -->
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
<div id="breadcrumb">
|
74
|
+
<h3 style="font-size:18px;">
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
LeiteBR's Trophies
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
</h3>
|
84
|
+
</div>
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
<!-- /breadcrumb -->
|
91
|
+
<!-- <div class="share">
|
92
|
+
<a href="#" id="overlayShare" onclick="alert('implement')"><span>Share this</span></a>
|
93
|
+
</div> -->
|
94
|
+
<!-- content -->
|
95
|
+
<div id="trophiescontent">
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
<script type="text/javascript" src="http://webassets.scea.com/playstation/javascripts/application.js"></script>
|
103
|
+
|
104
|
+
<div id="reset_title_section" style="overflow:hidden">
|
105
|
+
<!-- <h5 style="font-size:12px; float:left; padding:5px 0 0 0; color:#555555">
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
LeiteBR's Trophies
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
</h5> -->
|
117
|
+
<a class="reset_title" href="javascript:resetView();">Reset View </a>
|
118
|
+
<a class="backLink_title" href="javascript:history.go(-1);">Back to Previous
|
119
|
+
</a></div>
|
120
|
+
|
121
|
+
<div class="trophiescontainer">
|
122
|
+
<div class="trophiesinnermodule">
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
<div class="summaryslot">
|
128
|
+
<div class="profileLogo">
|
129
|
+
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
<div class="badge-full">
|
137
|
+
|
138
|
+
<div id="id-avatar">
|
139
|
+
<img width="57" height="57" border="0" alt="" src="/uwps/GetAvtarImage?avtar=http://static-resource.np.community.playstation.net/avatar_s/WWS_E/E0002_s.png" title="LeiteBR"/>
|
140
|
+
</div>
|
141
|
+
<div id="id-handle">
|
142
|
+
LeiteBR
|
143
|
+
</div>
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
<div id="id-compare" onClick="profileSignIn();">
|
150
|
+
<a href="javascript:void();">Compare With
|
151
|
+
|
152
|
+
|
153
|
+
My Friends
|
154
|
+
|
155
|
+
|
156
|
+
</a>
|
157
|
+
</div>
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
</div>
|
166
|
+
|
167
|
+
<script type="text/javascript">
|
168
|
+
function profileSignIn() {
|
169
|
+
parent.document.getElementById("black_overlay1").style.display="block";
|
170
|
+
parent.document.getElementById("overlayLogin").style.display="block";
|
171
|
+
parent.document.getElementById("signin-iframe").src="https://store.playstation.com/external/index.vm?returnURL=http://" + location.host + "/uwps/PSNTicketRetrievalGenericServlet";
|
172
|
+
}
|
173
|
+
</script>
|
174
|
+
|
175
|
+
</div>
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
<div id="trophysummary">
|
180
|
+
|
181
|
+
<div id="levelprogress">
|
182
|
+
<div class="stitle"><strong>LEVEL</strong></div>
|
183
|
+
<div id="starline">
|
184
|
+
</div>
|
185
|
+
<div id="leveltext"> 7</div>
|
186
|
+
</div>
|
187
|
+
|
188
|
+
<div id="totaltrophies">
|
189
|
+
<div class="stitle"><strong>TROPHIES</strong></div>
|
190
|
+
<div id="text">
|
191
|
+
334
|
192
|
+
</div>
|
193
|
+
</div>
|
194
|
+
<div style="clear:both"></div>
|
195
|
+
|
196
|
+
<div id="barline">
|
197
|
+
<div id="progressbar" class="progress_bar" style="width: 2.98px"></div>
|
198
|
+
</div>
|
199
|
+
<div class="progresstext">
|
200
|
+
2%
|
201
|
+
</div>
|
202
|
+
</div>
|
203
|
+
<div class="podium">
|
204
|
+
<div class="text platinum">0 Platinum</div>
|
205
|
+
<div class="text gold">6 Gold</div>
|
206
|
+
<div class="text silver">39 Silver</div>
|
207
|
+
<div class="text bronze">289 Bronze</div>
|
208
|
+
</div>
|
209
|
+
</div>
|
210
|
+
</div>
|
211
|
+
</div>
|
212
|
+
<div class="trophiescontainer mainlist">
|
213
|
+
<div class="trophiesinnermodule">
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
|
218
|
+
<div class="topslot">
|
219
|
+
<div id="topcontent">
|
220
|
+
|
221
|
+
<div class="topslotCol1">
|
222
|
+
|
223
|
+
<div class="colHeader topslotCol1a">
|
224
|
+
<div class="columntext">
|
225
|
+
|
226
|
+
TITLE
|
227
|
+
</div>
|
228
|
+
</div>
|
229
|
+
|
230
|
+
<div class="headerSeparator"></div>
|
231
|
+
|
232
|
+
|
233
|
+
<div class="colHeader topslotCol1b">
|
234
|
+
<div class="columntext">
|
235
|
+
|
236
|
+
COMPARE<br /> FRIENDS
|
237
|
+
</div>
|
238
|
+
</div>
|
239
|
+
<div class="headerSeparator"></div>
|
240
|
+
</div>
|
241
|
+
<div class="colHeader topslotCol2">
|
242
|
+
<div class="columntext">
|
243
|
+
|
244
|
+
PROGRESS
|
245
|
+
|
246
|
+
</div>
|
247
|
+
</div>
|
248
|
+
|
249
|
+
<div class="headerSeparator"></div>
|
250
|
+
|
251
|
+
<div class="colHeader topslotCol3">
|
252
|
+
<div class="columntext">
|
253
|
+
|
254
|
+
TROPHIES
|
255
|
+
</div>
|
256
|
+
</div>
|
257
|
+
|
258
|
+
<div class="headerSeparator"></div>
|
259
|
+
|
260
|
+
|
261
|
+
<div class="colHeader topslotCol4">
|
262
|
+
<div class="trophyholder">
|
263
|
+
<div class="trophyimage bronze"></div>
|
264
|
+
<div class="trophyimage silver"></div>
|
265
|
+
<div class="trophyimage gold"></div>
|
266
|
+
<div class="trophyimage platinum"></div>
|
267
|
+
</div>
|
268
|
+
</div>
|
269
|
+
</div>
|
270
|
+
</div>
|
271
|
+
|
272
|
+
|
273
|
+
|
274
|
+
<div id="slots_container" class="scrollbar_container">
|
275
|
+
<div id="scrollbar_up_arrow" class="scrollbar_up_arrow" style="display:none"></div>
|
276
|
+
<div id="scrollbar_down_arrow" class="scrollbar_down_arrow" style="display:none"></div>
|
277
|
+
<div id="scrollbar_track" class="scrollbar_track" style="display:none"><div id="scrollbar_handle" class="scrollbar_handle"></div></div>
|
278
|
+
<div id="theMainSlot">
|
279
|
+
<div id="spacer"></div>
|
280
|
+
|
281
|
+
|
282
|
+
|
283
|
+
<SCRIPT src="http://webassets.scea.com/playstation/javascripts/s_code.js" type=text/javascript></SCRIPT>
|
284
|
+
<script type="text/javascript" language="JavaScript">
|
285
|
+
function getOrderedData() {
|
286
|
+
var url = "/playstation/psn/profile/LeiteBR/get_ordered_trophies_data";
|
287
|
+
new Ajax.Updater('theMainSlot', url,
|
288
|
+
{
|
289
|
+
asynchronous:true,
|
290
|
+
onFailure: reportError,
|
291
|
+
onComplete: setupSortCheck,
|
292
|
+
on503: redirectToBusy,
|
293
|
+
on403: redirectToLogin,
|
294
|
+
method: 'get'
|
295
|
+
});
|
296
|
+
}
|
297
|
+
function setupSortCheck() {
|
298
|
+
if ($('theMainSlot').down() == null) {
|
299
|
+
if (true) {
|
300
|
+
$('theMainSlot').innerHTML='<div class="noDataMessage">' +
|
301
|
+
'You do not currently have any trophies in your list. You must use your PLAYSTATION<sup>®</sup> 3 console to add trophies.' +
|
302
|
+
'</div>';
|
303
|
+
} else {
|
304
|
+
$('theMainSlot').innerHTML='<div class="noDataMessage">' +
|
305
|
+
'No Trophies' +
|
306
|
+
'</div>';
|
307
|
+
}
|
308
|
+
} else {
|
309
|
+
setupSort();
|
310
|
+
}
|
311
|
+
}
|
312
|
+
|
313
|
+
var sortFunction = sortOn;
|
314
|
+
var sortSpec = {'topslotCol1a':{'sortField':'gameTitle','extractor': textContentExtractor, 'comparator': stringCompare},
|
315
|
+
'topslotCol2':{'sortField':'gameProgress', 'extractor': textContentExtractor, 'comparator': integerCompare},
|
316
|
+
'topslotCol3':{'sortField':'gameTrophyCount', 'extractor': textContentExtractor, 'comparator': integerCompare}};
|
317
|
+
|
318
|
+
document.observe("dom:loaded", function() {
|
319
|
+
//var defaultSort = "progress_desc";
|
320
|
+
getOrderedData();
|
321
|
+
//setupSort();
|
322
|
+
});
|
323
|
+
|
324
|
+
function setIFrameHeightToCookie1(iframeId){
|
325
|
+
var formHeight = document.getElementById('main').offsetHeight;
|
326
|
+
var iFrame = window.parent.document.getElementById(iframeId);
|
327
|
+
if (formHeight != null && iFrame !=null){
|
328
|
+
iFrame.height = eval(formHeight) ;
|
329
|
+
if(iFrame.style.height=='Nan' || iFrame.style.height=='0'){
|
330
|
+
iFrame.style.height = '600px';
|
331
|
+
}
|
332
|
+
}
|
333
|
+
else if (iFrame !=null) {
|
334
|
+
iFrame.height = '600px';
|
335
|
+
}
|
336
|
+
}
|
337
|
+
function profileSignIn() {
|
338
|
+
parent.document.getElementById("black_overlay1").style.display="block";
|
339
|
+
parent.document.getElementById("overlayLogin").style.display="block";
|
340
|
+
parent.document.getElementById("signin-iframe").src="https://store.playstation.com/external/index.vm?returnURL=http://" + location.host + "/uwps/PSNTicketRetrievalGenericServlet";
|
341
|
+
}
|
342
|
+
function ClickOmniTrack(obj,eventVal,secName) {
|
343
|
+
s.events=eventVal;
|
344
|
+
s.linkTrackEvents=eventVal;
|
345
|
+
s.linkTrackVars='events';
|
346
|
+
s.pageName = secName;
|
347
|
+
s.tl(obj,'o',secName);
|
348
|
+
}
|
349
|
+
function compareTrophy(title){
|
350
|
+
var da = title.split('/');
|
351
|
+
var s=s_gi('sceaplaystationprod');
|
352
|
+
s.linkTrackVars='prop26';
|
353
|
+
s.prop26=da[5];
|
354
|
+
s.tl(this,'o','trophyCompare/ps/mytrophies');
|
355
|
+
}
|
356
|
+
if(parent.document.getElementById('loading')!=null) {
|
357
|
+
parent.document.getElementById('loading').style.display='none';
|
358
|
+
}
|
359
|
+
</script>
|
360
|
+
|
361
|
+
</div>
|
362
|
+
</div>
|
363
|
+
|
364
|
+
|
365
|
+
|
366
|
+
</div>
|
367
|
+
</div>
|
368
|
+
|
369
|
+
<script type="text/javascript" language="JavaScript">
|
370
|
+
function backPage() {
|
371
|
+
if(navigator.appName == "Microsoft Internet Explorer")
|
372
|
+
{
|
373
|
+
if(window.location.pathname=='/playstation/psn/profile/trophies' || window.location.pathname=='/playstation/psn/profile/friends'){
|
374
|
+
history.go(-1);
|
375
|
+
} else {
|
376
|
+
history.go(-1);
|
377
|
+
return;
|
378
|
+
}
|
379
|
+
}
|
380
|
+
history.go(-1);
|
381
|
+
}
|
382
|
+
function resetView() {
|
383
|
+
window.location.reload();
|
384
|
+
}
|
385
|
+
</script>
|
386
|
+
</div><!-- /content -->
|
387
|
+
|
388
|
+
|
389
|
+
|
390
|
+
<p class="profile_note">Note: The above information is dependent on the proper functioning of the PlayStation®Network. Information is not updated in real time.</p>
|
391
|
+
|
392
|
+
<div id="tipHolder" style="display:none;"></div>
|
393
|
+
</div>
|
394
|
+
<!-- /main -->
|
395
|
+
</body>
|
396
|
+
|
397
|
+
<script>
|
398
|
+
if(parent.document.getElementById('profileFrame')!=null){
|
399
|
+
}
|
400
|
+
</script>
|
401
|
+
</html>
|
402
|
+
|