add recommende content api
authorymh <ymh.work@gmail.com>
Fri, 09 Nov 2012 17:46:21 +0100
changeset 921 4e24ad4db185
parent 920 510e079e4b15
child 922 cba34a867804
add recommende content api
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<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