initial working version
This commit is contained in:
commit
8c3230ad43
0
layar/__init__.py
Normal file
0
layar/__init__.py
Normal file
3
layar/models.py
Normal file
3
layar/models.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
101
layar/views.py
Normal file
101
layar/views.py
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
from hashlib import sha1
|
||||||
|
from django.conf import settings
|
||||||
|
from django.http import HttpResponse
|
||||||
|
from django.utils import simplejson as json
|
||||||
|
|
||||||
|
class LayarException(Exception):
|
||||||
|
def __init__(self, code, message):
|
||||||
|
self.code = code
|
||||||
|
self.message = message
|
||||||
|
|
||||||
|
class POI(object):
|
||||||
|
|
||||||
|
def __init__(self, id, lat, lon, title, actions=None, image_url=None,
|
||||||
|
line2=None, line3=None, line4=None, type=0, attribution=None):
|
||||||
|
self.id = str(id)
|
||||||
|
self.lat = lat
|
||||||
|
self.lon = lon
|
||||||
|
self.title = title # recommended max len 60
|
||||||
|
self.imageURL = image_url
|
||||||
|
self.line2 = line2 # recommended max len 35
|
||||||
|
self.line3 = line3
|
||||||
|
self.line4 = line4
|
||||||
|
self.type = type
|
||||||
|
self.attribution = attribution # recommended max len 45
|
||||||
|
self.actions = actions
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
d = dict(self.__dict__)
|
||||||
|
|
||||||
|
# do lat/long conversion
|
||||||
|
if isinstance(self.lat, float):
|
||||||
|
d['lat'] = int(self.lat*1000000)
|
||||||
|
if isinstance(self.lon, float):
|
||||||
|
d['lon'] = int(self.lon*1000000)
|
||||||
|
|
||||||
|
# convert actions dictionary into expected format
|
||||||
|
if self.actions:
|
||||||
|
d['actions'] = [{'label':k, 'uri':v} for k,v in self.actions.iteritems()]
|
||||||
|
else:
|
||||||
|
d['actions'] = []
|
||||||
|
|
||||||
|
return d
|
||||||
|
|
||||||
|
class LayarView(object):
|
||||||
|
|
||||||
|
results_per_page = 15
|
||||||
|
max_results = 50
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.developer_key = settings.LAYAR_DEVELOPER_KEY
|
||||||
|
|
||||||
|
def __call__(self, request):
|
||||||
|
user_id = request.GET['userId']
|
||||||
|
developer_id = request.GET['developerId']
|
||||||
|
developer_hash = request.GET['developerHash']
|
||||||
|
timestamp = request.GET['timestamp']
|
||||||
|
layer_name = request.GET['layerName']
|
||||||
|
latitude = request.GET['lat']
|
||||||
|
longitude = request.GET['lon']
|
||||||
|
accuracy = request.GET['accuracy']
|
||||||
|
radius = request.GET['radius']
|
||||||
|
radio_option = request.GET.get('RADIOLIST')
|
||||||
|
search_query = request.GET.get('SEARCHBOX')
|
||||||
|
custom_slider = request.GET.get('CUSTOM_SLIDER')
|
||||||
|
page_key = request.GET.get('pageKey')
|
||||||
|
|
||||||
|
# oauth: oauth_consumer_key, oauth_signature_method, oauth_timestamp,
|
||||||
|
# oauth_nonce, oauth_version, oauth_signature
|
||||||
|
|
||||||
|
layar_response = dict(hotspots=[], layer=layer_name, errorCode=0,
|
||||||
|
errorString='ok', nextPageKey=None, morePages=False)
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
# verify hash
|
||||||
|
key = self.developer_key + timestamp
|
||||||
|
if sha1(key).hexdigest() != developer_hash:
|
||||||
|
raise LayarException(20, 'Bad developerHash')
|
||||||
|
|
||||||
|
try:
|
||||||
|
poi_func = getattr(self, 'get_%s_pois' % layer_name)
|
||||||
|
except AttributeError:
|
||||||
|
raise LayarException(21, 'no such layer: %s' % layer_name)
|
||||||
|
|
||||||
|
pois = poi_func(latitude=latitude, longitude=longitude, radius=radius,
|
||||||
|
start_index=0,
|
||||||
|
radio_option=radio_option, search_query=search_query,
|
||||||
|
custom_slider=custom_slider)
|
||||||
|
|
||||||
|
# pagination logic
|
||||||
|
if len(pois) > self.max_results:
|
||||||
|
pois = pois[:self.max_results]
|
||||||
|
|
||||||
|
layar_response['hotspots'] = [poi.to_dict() for poi in pois]
|
||||||
|
|
||||||
|
except LayarException, e:
|
||||||
|
layar_response['errorCode'] = e.code
|
||||||
|
layar_response['errorString'] = e.message
|
||||||
|
|
||||||
|
content = json.dumps(layar_response)
|
||||||
|
return HttpResponse(content, content_type='application/javascript; charset=utf-8')
|
Loading…
Reference in New Issue
Block a user