# HG changeset patch # User ymh # Date 1352479581 -3600 # Node ID 4e24ad4db185dc6fb88d00d4938354d9271ee49a # Parent 510e079e4b151a93637d1d08c5c0a1782a35725b add recommende content api diff -r 510e079e4b15 -r 4e24ad4db185 src/ldt/ldt/api/ldt/resources/content.py --- 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%s)/(?P[\w\d_.-]+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"), + url(r"^(?P%s)/recommended/$" % self._meta.resource_name, self.wrap_view('get_recommended'), name="api_contents_recommended"), + url(r"^(?P%s)/(?P[\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