--- a/src/ldt/ldt/api/ldt/resources/content.py Fri Nov 09 15:58:04 2012 +0100
+++ b/src/ldt/ldt/api/ldt/resources/content.py Fri Nov 09 17:46:21 2012 +0100
@@ -1,6 +1,8 @@
from django.conf.urls.defaults import url
-from ldt.ldt_utils.models import Content
+from ldt.ldt_utils.models import Content, Segment
from tastypie.resources import Bundle, ModelResource
+from ldt.indexation import get_results_list
+from itertools import groupby
class ContentResource(ModelResource):
@@ -13,7 +15,8 @@
def override_urls(self):
# WARNING : in tastypie <= 1.0, override_urls is used instead of prepend_urls. From 1.0.0, prepend_urls will be prefered and override_urls deprecated
return [
- url(r"^(?P<resource_name>%s)/(?P<iri_id>[\w\d_.-]+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),
+ url(r"^(?P<resource_name>%s)/recommended/$" % self._meta.resource_name, self.wrap_view('get_recommended'), name="api_contents_recommended"),
+ url(r"^(?P<resource_name>%s)/(?P<iri_id>[\w\d_.-]+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_contents_dispatch_detail"),
]
def get_resource_uri(self, bundle_or_obj):
kwargs = {
@@ -25,4 +28,33 @@
else:
kwargs['iri_id'] = bundle_or_obj.iri_id
return self._build_reverse_url("api_dispatch_detail", kwargs=kwargs)
+
+ def get_recommended(self, request, **kwargs):
+ self.method_check(request, allowed=['get'])
+
+ keywords = request.GET.get('keywords','')
+ keywords_search = " OR ".join(keywords.split(','))
+ field = request.GET.get('field','all')
+
+ result_list = get_results_list(field, keywords_search)
+ score_dict = dict([(k,sum([e.score for e in i])) for k,i in groupby(result_list, lambda e: e.iri_id)])
+
+ res = [self.full_dehydrate(self.build_bundle(obj=c, request=request)) for c in Content.objects.filter(iri_id__in = score_dict.keys())]
+
+ def add_score(b,s):
+ b.data['score'] = s
+ return b
+
+
+ object_list = {
+ 'objects': sorted([add_score(b, score_dict.get(b.data['iri_id'],0)) for b in res], key=lambda b: b.data['score'], reverse=True),
+ }
+
+ self.log_throttled_access(request)
+
+ return self.create_response(request, object_list)
+
+
+
+
\ No newline at end of file