proppy/studivz01
Ich bin Programmierer und arbeite hauptsächlich an jpoker (http://jspoker.pokersource.info/), einem Pokerclient in Javascript. Ich möchte diesen Client gern in StudiVZ, über die Open Social API, integrieren. Für weitere Informationen zum Projekt oder seiner Integrierung stehe ich Ihnen gern zur Verfügung unter proppy@aminche.com. Ich arbeite für meine Firma "Aminche" in Frankreich, die Dienstleistungen und Entwicklungen im Bereich Freier Software anbietet.
<container url="http://sandbox.gadgets.apivz.net/"
cert_url="http://sandbox.gadgets.apivz.net/public.cer"
cert_hex="0xB55AE3E211C542D2921D84CDED4AA67E170F39628B989882E4E4F16F2FEA79FF3F3138C9E7CC886006C77E3F58376BCAB0865865A572789A4E31E2AA46AC3F75A04A686716F5E3EA9B12D862FB289713CF5F17512A561D29AFFBCE8E242B27D967D7CBB5296442CD764892F16B9DC191FBA0493C3910040A466107B1943798B9"
opensocial_app_id="1906"
oauth_consumer_key="1906"
oauth_consumer_secret="694ac83733ee3503b14597c79bf4589a"
server_rpc_base="http://sandbox.gadgets.apivz.net/social/rpc"
server_rest_base="http://sandbox.gadgets.apivz.net/social/rest"
skin_url="/images/people/%(serial)d.129x225.jpg"
>
-----BEGIN CERTIFICATE-----
MIIDkzCCAvygAwIBAgIJANKwaPvVQ9nAMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYD
VQQGEwJERTEQMA4GA1UECBMHR2VybWFueTEPMA0GA1UEBxMGQmVybGluMRUwEwYD
VQQKEwxzdHVkaVZaIEx0ZC4xEzARBgNVBAsTCk9wZW5Tb2NpYWwxDjAMBgNVBAMT
BW11cmNTMSAwHgYJKoZIhvcNAQkBFhFtdXJjc0BzdHVkaXZ6Lm5ldDAeFw0wOTA4
MjQxNTM5MjNaFw0xMDA4MjQxNTM5MjNaMIGOMQswCQYDVQQGEwJERTEQMA4GA1UE
CBMHR2VybWFueTEPMA0GA1UEBxMGQmVybGluMRUwEwYDVQQKEwxzdHVkaVZaIEx0
ZC4xEzARBgNVBAsTCk9wZW5Tb2NpYWwxDjAMBgNVBAMTBW11cmNTMSAwHgYJKoZI
hvcNAQkBFhFtdXJjc0BzdHVkaXZ6Lm5ldDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
gYkCgYEAtVrj4hHFQtKSHYTN7UqmfhcPOWKLmJiC5OTxby/qef8/MTjJ58yIYAbH
fj9YN2vKsIZYZaVyeJpOMeKqRqw/daBKaGcW9ePqmxLYYvsolxPPXxdRKlYdKa/7
zo4kKyfZZ9fLtSlkQs12SJLxa53BkfugSTw5EAQKRmEHsZQ3mLkCAwEAAaOB9jCB
8zAdBgNVHQ4EFgQUrnNSvWS19/tMKMzgOP1W8I7r6NowgcMGA1UdIwSBuzCBuIAU
rnNSvWS19/tMKMzgOP1W8I7r6NqhgZSkgZEwgY4xCzAJBgNVBAYTAkRFMRAwDgYD
VQQIEwdHZXJtYW55MQ8wDQYDVQQHEwZCZXJsaW4xFTATBgNVBAoTDHN0dWRpVlog
THRkLjETMBEGA1UECxMKT3BlblNvY2lhbDEOMAwGA1UEAxMFbXVyY1MxIDAeBgkq
hkiG9w0BCQEWEW11cmNzQHN0dWRpdnoubmV0ggkA0rBo+9VD2cAwDAYDVR0TBAUw
AwEB/zANBgkqhkiG9w0BAQUFAAOBgQAvKHI4MocFggliGJXkLMdcT2P7jBnMzw6w
7XxJPl1nGhG/awMpoJyplsevm2lkLslCDWXWXqHdBbeMwBsiRRn/i0Gooxn8heyl
0hHJYau9OvUPaSSvW8JB35TvMgFWtwrPchZe86xAwEX4NZZ4AFcu7AOSJgNKZC6Z
uJQBPvSfeA==
-----END CERTIFICATE-----
</container>
diff -r 1d599e16185b jpoker-opensocial.xml
--- a/jpoker-opensocial.xml Fri Jan 22 20:02:12 2010 +0100
+++ b/jpoker-opensocial.xml Thu Jan 28 15:21:34 2010 +0000
@@ -7,25 +7,25 @@
<![CDATA[
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jpoker sample application</title>
- <script language="JavaScript" type="text/javascript" src="/jpoker/jquery/jquery-1.2.6.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/jquery/ui/ui.core.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/jquery/ui/ui.draggable.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/jquery/ui/ui.resizable.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/jquery/ui/ui.dialog.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/jquery/ui/ui.slider.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/jquery.ajaxQueue.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/jquery.cookie.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/jquery.gettext.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/jquery.strftime.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/jquery.form.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/jquery.tablesorter.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/jquery.tablesorter.pager.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/printstacktrace.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/json2.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/jquery.jpoker.js"></script>
- <script language="JavaScript" type="text/javascript" src="/jpoker/js/mockup.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/jquery/jquery-1.2.6.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/jquery/ui/ui.core.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/jquery/ui/ui.draggable.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/jquery/ui/ui.resizable.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/jquery/ui/ui.dialog.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/jquery/ui/ui.slider.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/jquery.ajaxQueue.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/jquery.cookie.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/jquery.gettext.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/jquery.strftime.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/jquery.form.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/jquery.tablesorter.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/jquery.tablesorter.pager.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/printstacktrace.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/json2.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/jquery.jpoker.js"></script>
+ <script language="JavaScript" type="text/javascript" src="http://studivz.pokersource.info/studivz/jpoker/jpoker/js/mockup.js"></script>
<script type="text/javascript">
- var restURL = "http://" + document.location.host + "/POKER_REST";
+ var restURL = "http://studivz.pokersource.info/POKER_REST";
var jQueryAjax = $.ajax;
var server;
$.jpoker.verbose = 6;
@@ -92,7 +92,7 @@
});
});
</script>
- <link href="/jpoker/css/jpoker.css" rel="stylesheet" type="text/css" />
+ <link href="http://studivz.pokersource.info/studivz/jpoker/jpoker/css/jpoker.css" rel="stylesheet" type="text/css" />
<style type="text/css">
.jpoker_table.MALE .jpoker_ptable_game_background {
background-color: #00ffff;
zip -r jpoker-studivz.zip jpoker-studivz.xml
diff -r 02c36260acf6 usr/share/pyshared/pokersocial/auth.py
--- a/usr/share/pyshared/pokersocial/auth.py Thu Jan 28 14:47:17 2010 +0000
+++ b/usr/share/pyshared/pokersocial/auth.py Thu Jan 28 15:08:26 2010 +0000
@@ -23,17 +23,38 @@
from pokersocial.core import Pokersocial
+_opensocial2serial = {}
+_serial2opensocial = {}
+_next_serial = 100
+
+def opensocial2serial(opensocial_id):
+ global _opensocial2serial, _serial2opensocial, _next_serial
+ if not _opensocial2serial.has_key(opensocial_id):
+ _opensocial2serial[opensocial_id] = _next_serial
+ _serial2opensocial[_next_serial] = opensocial_id
+ _next_serial += 1
+ return _opensocial2serial[opensocial_id]
+def serial2opensocial(serial):
+ global _serial2opensocial
+ return _serial2opensocial[serial]
+
def update_session(site, request):
+ global next_serial
+ global opensocial2serial
if site.verbose > 3:
site.message("pokersocial: ")
- serial = int(request.args['opensocial_owner_id'][0])
- if serial == int(request.args['opensocial_viewer_id'][0]):
+ opensocial_id = request.args['opensocial_owner_id'][0]
+
+ serial = opensocial2serial(opensocial_id)
+
+ if opensocial_id == request.args['opensocial_viewer_id'][0]:
cert_url = urllib.unquote(request.args['xoauth_signature_publickey'][0])
container = Pokersocial.info(site.resource.service)['url2container'][cert_url]
- info = Pokersocial.importUser(site.resource.service, container, serial)
+ info = Pokersocial.importUser(site.resource.service, container, opensocial_id)
+ info['serial'] = serial
Pokersocial.updateUser(site.resource.service, info)
Pokersocial.updatePlayerMoney(site.resource.service, serial,
- Pokersocial.importPlayerMoney(site.resource.service, container, serial))
+ Pokersocial.importPlayerMoney(site.resource.service, container, opensocial_id))
else:
info = None
session = request.getSession()
diff -r 02c36260acf6 usr/share/pyshared/pokersocial/core.py
--- a/usr/share/pyshared/pokersocial/core.py Thu Jan 28 14:47:17 2010 +0000
+++ b/usr/share/pyshared/pokersocial/core.py Thu Jan 28 15:08:26 2010 +0000
@@ -191,16 +191,16 @@
assert cursor.rowcount in (1, 2), s
@staticmethod
- def exportPlayerMoney(service, container, serial, money):
+ def exportPlayerMoney(service, container, opensocial_id, money):
app_id = container['config'].get('opensocial_app_id')
- r = request.UpdateAppDataRequest(str(serial), '@self', app_id, ['money'], { 'money': simplejson.dumps(dict(money)) })
+ r = request.UpdateAppDataRequest(opensocial_id, '@self', app_id, ['money'], { 'money': simplejson.dumps(dict(money)) })
if service.verbose > 2:
- service.message("pokersocial.exportPlayerMoney(serial = %d, opensocial_app_id = %s): query params = %s rpc body = %s" % ( serial, app_id, r.get_query_params(), r.get_rpc_body() ))
+ service.message("pokersocial.exportPlayerMoney(serial = %s, opensocial_app_id = %s): query params = %s rpc body = %s" % ( opensocial_id, app_id, r.get_query_params(), r.get_rpc_body() ))
try:
- data = container['context'].send_request(r)
+ data = container['context'].send_request(r, True)
except errors.BadResponseError, e:
if e.code == 404 and 'Data Not Found' in e.message:
- service.error("pokersocial.exportPlayerMoney(serial = %d, opensocial_app_id = %s): <= %s" % ( serial, app_id, e.message ))
+ service.error("pokersocial.exportPlayerMoney(serial = %s, opensocial_app_id = %s): <= %s" % ( opensocial_id, app_id, e.message ))
data = None
else:
raise
@@ -209,23 +209,23 @@
return data
@staticmethod
- def importPlayerMoney(service, container, serial):
+ def importPlayerMoney(service, container, opensocial_id):
app_id = container['config'].get('opensocial_app_id')
- r = request.FetchAppDataRequest(str(serial), '@self', app_id, ['money'])
+ r = request.FetchAppDataRequest(opensocial_id, '@self', app_id, ['money'])
try:
- data = container['context'].send_request(r)
+ data = container['context'].send_request(r, True)
except errors.BadResponseError, e:
if e.code == 404 and 'Data Not Found' in e.message:
- service.error("pokersocial.importPlayerMoney(serial = %d, opensocial_app_id = %s): <= %s" % ( serial, app_id, e.message ))
+ service.error("pokersocial.importPlayerMoney(opensocial_id = %s, opensocial_app_id = %s): <= %s" % ( opensocial_id, app_id, e.message ))
data = None
else:
raise
except:
raise
if service.verbose > 2:
- service.message("pokersocial.importPlayerMoney(serial = %d, opensocial_app_id = %s): <= %s" % ( serial, app_id, str(data) ))
- if data:
- return simplejson.loads(data[str(serial)]['money'])
+ service.message("pokersocial.importPlayerMoney(opensocial_id = %s, opensocial_app_id = %s): <= %s" % ( opensocial_id, app_id, str(data) ))
+ if data.has_key('money'):
+ return result['money']
else:
return {}
@@ -301,10 +301,10 @@
return True
@staticmethod
- def importUser(service, container, serial):
- person = container['context'].fetch_person(str(serial), [ 'nickname' ])
- skin = container['config'].get('skin_url') % { 'serial': serial }
- return { 'serial': serial,
+ def importUser(service, container, opensocial_id):
+ person = container['context'].fetch_person(opensocial_id, [ 'nickname' ])
+ skin = person.get_field('thumbnailUrl')
+ return { 'opensocial_id': opensocial_id,
'name': person.get_field('nickname'),
'skin_url': skin }
diff -r 02c36260acf6 usr/share/pyshared/pokersocial/monitor.py
--- a/usr/share/pyshared/pokersocial/monitor.py Thu Jan 28 14:47:17 2010 +0000
+++ b/usr/share/pyshared/pokersocial/monitor.py Thu Jan 28 15:08:26 2010 +0000
@@ -18,6 +18,7 @@
from pokernetwork.pokerpackets import PacketPokerMonitorEvent
from pokersocial.core import Pokersocial
+from pokersocial.auth import serial2opensocial
event2name = [ 'NONE', 'HAND', 'TOURNEY', 'BUY_IN', 'REFILL', 'PRIZE', 'REGISTER', 'UNREGISTER', 'LEAVE', 'SEAT' ]
@@ -34,7 +35,7 @@
):
money = Pokersocial.queryPlayerMoney(service, packet.param1)
for container in info['url2container'].values():
- Pokersocial.exportPlayerMoney(service, container, packet.param1, money)
+ Pokersocial.exportPlayerMoney(service, container, serial2opensocial(packet.param1), money)
if packet.event in (
PacketPokerMonitorEvent.LEAVE,
diff -r 02c36260acf6 usr/share/pyshared/opensocial/__init__.py
--- a/usr/share/pyshared/opensocial/__init__.py Thu Jan 28 14:47:17 2010 +0000
+++ b/usr/share/pyshared/opensocial/__init__.py Thu Jan 28 15:09:04 2010 +0000
@@ -119,7 +119,7 @@
"""
request = FetchPersonRequest(user_id, fields=fields)
- return self.send_request(request)
+ return self.send_request(request, True)
def fetch_friends(self, user_id='@me', fields=None):
"""Fetches the friends of a given user by id.
diff -r 02c36260acf6 usr/share/pyshared/opensocial/request.py
--- a/usr/share/pyshared/opensocial/request.py Thu Jan 28 14:47:17 2010 +0000
+++ b/usr/share/pyshared/opensocial/request.py Thu Jan 28 15:09:04 2010 +0000
@@ -195,12 +195,15 @@
params['data'] = data
+ rest_path = '/'.join(('appdata', user_id, group_id, app_id))
+ rest_request = RestRequestInfo(rest_path, params=params)
+
#TODO: add support for rest
params.update({'userId': user_id,
'groupId': group_id,
'appId': app_id})
rpc_request = RpcRequestInfo('appdata.update', params=params)
- super(UpdateAppDataRequest, self).__init__(None,
+ super(UpdateAppDataRequest, self).__init__(rest_request,
rpc_request,
user_id)
@@ -217,13 +220,16 @@
if fields:
params['fields'] = ','.join(fields)
+ rest_path = '/'.join(('appdata', user_id, group_id, app_id))
+ rest_request = RestRequestInfo(rest_path, params=params)
+
#TODO: add support for rest
params.update({'userId': user_id,
'groupId': group_id,
'appId': app_id,
'keys': params['fields']})
rpc_request = RpcRequestInfo('appdata.delete', params=params)
- super(DeleteAppDataRequest, self).__init__(None,
+ super(DeleteAppDataRequest, self).__init__(rest_request,
rpc_request,
user_id)