Commit Louise :
authorLouise Grandjonc <louise.grandjonc@iri.centrepompidou.fr>
Tue, 18 Sep 2012 15:26:46 +0200
changeset 779 129b1c8b0088
parent 778 ebd7050d8de9
child 780 35631012b6d4
Commit Louise : Récupération du temps titre et thumbnails avec les API pour vimeo, dailymotion et youtube. Retrait des champs url_extern et id_extern dans le formulaire d'ajout de content Modification du css pour adapter le nouveau formulaire Mise à "True" par défaut du champ is_public dans content : more option
src/ldt/ldt/ldt_utils/forms.py
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html
src/ldt/ldt/ldt_utils/views/content.py
src/ldt/ldt/static/ldt/css/ldtform.css
src/ldt/ldt/static/ldt/js/projectscontents.js
--- a/src/ldt/ldt/ldt_utils/forms.py	Tue Sep 18 15:16:39 2012 +0900
+++ b/src/ldt/ldt/ldt_utils/forms.py	Tue Sep 18 15:26:46 2012 +0200
@@ -52,7 +52,7 @@
     content_creation_date = forms.SplitDateTimeField(widget=ldt_widgets.LdtSplitDateTime, required=False, label=_("content.content_creation_date"))
     media_input_type = forms.ChoiceField(required=False, label=_("content.media_input_type"), choices=(("upload", _("file_upload")), ("url", _("url")), ("link", _("existing_media")), ("create", _("create_media")), ("none", _("none_media"))))
     groups = forms.ModelMultipleChoiceField(Group.objects.all(), required=False)
-    is_public = forms.BooleanField(required=False)
+    is_public = forms.BooleanField(required=False, initial=True)
     front_project = forms.ModelChoiceField(queryset=Project.objects.none(), required=False, label=_("content.front_project"))
     duration = forms.IntegerField(required=True) 
         
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html	Tue Sep 18 15:16:39 2012 +0900
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html	Tue Sep 18 15:26:46 2012 +0200
@@ -5,9 +5,9 @@
 
 {% block js_import %}
 	{{ block.super }}
-    <script type="text/javascript" src="{{ADMIN_MEDIA_PREFIX}}js/core.js" ></script>
     <script type="text/javascript" src="{% url ldt.jsi18n packages='ldt' %}" ></script>
     <script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/projectscontents.js"></script>
+    <script type="text/javascript" src="{{ADMIN_MEDIA_PREFIX}}js/core.js" ></script>
     <script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.nyroModal.min.js"></script>
     <script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.textchange.min.js"></script>
     <script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery-ui.min.js"></script>
@@ -97,8 +97,6 @@
 		<div>{{ content_form.videopath.errors }}{{ content_form.videopath.label_tag }}{{content_form.videopath}}</div>
 		<div>{{ content_form.title.errors }}{{ content_form.title.label_tag }}{{content_form.title}}</div>
 		<div>{{ content_form.description.errors }}{{ content_form.description.label_tag }}{{content_form.description}}</div>
-		<div>{{ media_form.external_id.errors }}{{ media_form.external_id.label_tag }}{{media_form.external_id}}</div>
-		<div>{{ media_form.external_publication_url.errors }}{{ media_form.external_publication_url.label_tag }}{{media_form.external_publication_url}}</div>
 	</div>
 	<div id="contentright" class="span-9 last" >
 		<div>{{ content_form.external_id.errors }}{{ content_form.external_id.label_tag }}{{content_form.external_id}}</div>
--- a/src/ldt/ldt/ldt_utils/views/content.py	Tue Sep 18 15:16:39 2012 +0900
+++ b/src/ldt/ldt/ldt_utils/views/content.py	Tue Sep 18 15:26:46 2012 +0200
@@ -25,9 +25,11 @@
 import re
 import datetime
 import math
+import requests
+import django.utils.simplejson as simplejson
+import urlparse
 
 def write_content_base(request, iri_id=None): 
-
     if iri_id:        
         instance_content = Content.safe_objects.get(iri_id=iri_id) #@UndefinedVariable
         instance_media = instance_content.media_obj
@@ -42,7 +44,12 @@
     
     form_status = 'none'        
     if request.method == "POST":
-        
+        if request.POST.get('content-duration')!='':
+            logging.debug("petitchienmalade il y a duration")
+        else:
+            logging.debug("petitchienmalade il y a pas de duration")
+           
+        logging.debug("on est dans POST")
         if instance_content is not None:
             content_instance_val = model_to_dict(instance_content, exclude=ContentForm.Meta.exclude)
         else:
@@ -61,7 +68,8 @@
         
         add_prefix(content_instance_val, "content")
         add_prefix(media_instance_val, "media")     
-        
+        src_video=request.POST.get('media-src')
+   
         for k in request.POST.keys():
             value = request.POST.get(k)
             content_instance_val[k] = value
@@ -69,7 +77,7 @@
             
         content_instance_val['read_list'] = request.POST.getlist('read_list')
         content_instance_val['write_list'] = request.POST.getlist('write_list')
-        content_instance_val['share'] = request.POST.get('share', False)
+        content_instance_val['share'] = request.POST.get('share', True)
 
         content_form = ContentForm(content_instance_val, prefix="content", instance=instance_content)
         media_form = MediaForm(media_instance_val, request.FILES, prefix="media", instance=instance_media)
@@ -86,7 +94,7 @@
         logging.debug("write_content_base : valid form: for instance : " + repr(instance_media) + " -> media " + str(media_valid) + " content : for instance : " + repr(instance_content) + " : " + str(content_valid)) #@UndefinedVariable
         
         if media_valid and content_valid and picture_valid:
-
+            logging.debug("on est dans media_valid, content_valif, picture_valid")
             # see if media must be created
             cleaned_data = {}
             cleaned_data.update(media_form.cleaned_data)
@@ -195,6 +203,7 @@
                     
 
             if media and not created:
+                logging.debug("creation media")
                 for attribute in ('external_id', 'external_permalink', 'external_publication_url', 'external_src_url', 'media_creation_date', 'videopath', 'duration', 'description', 'title', 'front_project'):
                     setattr(media, attribute, cleaned_data.get(attribute))
                 mimetype = cleaned_data.get('mimetype_field', None)
@@ -233,9 +242,11 @@
                     if media:
                         assign_perm_to_obj(media, content_form.cleaned_data['read_list'], content_form.cleaned_data['write_list'], request.user)
                 if not created:
-                    for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media_obj'):
+                    logging.debug("on cree le media")
+                    for attribute in ('iriurl', 'title', 'description', 'content_creation_date', 'duration', 'tags', 'media_obj'):
                         setattr(content, attribute, content_defaults[attribute])
-                        
+                    
+                 
                     if request.user.is_staff and content_defaults.has_key('front_project'):
                         content.front_project = content_defaults['front_project']
                     
@@ -255,7 +266,7 @@
         if instance_content:
             initial['is_public'] = instance_content.is_public
         else:
-            initial['is_public'] = False
+            initial['is_public'] = True
         
         content_form = ContentForm(prefix="content", instance=instance_content, initial=initial)
         media_form = MediaForm(prefix="media", instance=instance_media) 
@@ -271,6 +282,7 @@
 
 @login_required
 def write_content(request, iri_id=None):    
+    logging.debug("test write_content test")
     submit_action = request.REQUEST.get("submit_button", False) 
     member_list = admin_list = []
     current_front_project = None
@@ -292,6 +304,7 @@
         picture_form = PictureForm()
     else:
         content_form, media_form, picture_form, form_status, current_front_project = write_content_base(request, iri_id)
+        logging.debug("fin test dans write_content")
         if iri_id:
             member_list, admin_list = get_userlist_model(Content.objects.get(iri_id=iri_id), request.user)
         
@@ -444,3 +457,43 @@
         return Tag.objects.cloud_for_model(Content, steps=steps)
     else :
         return Tag.objects.cloud_for_model(Content, steps=steps)[:limit]
+        
+def get_json(src_video):
+    if 'youtube' in src_video:
+        url_data=urlparse.urlparse(src_video)
+        query=urlparse.parse_qs(url_data.query)
+        video_id=query['v'][0]
+        lien='http://gdata.youtube.com/feeds/api/videos/'+video_id+'?v=2&alt=jsonc'
+    elif 'vimeo' in src_video:
+        url_data=urlparse.urlparse(src_video)
+        url_path=url_data.path
+        video_id=(url_path.split('/'))[1]
+        lien='http://vimeo.com/api/v2/video/'+video_id+'.json'
+    elif 'dailymotion' in src_video:
+        url_data=urlparse.urlparse(src_video)
+        video_path=url_data.path
+        split_path=(video_path.split('/'))[2]
+        video_id=(split_path.split('_'))[0]
+        lien='https://api.dailymotion.com/video/'+video_id+'?fields=id,duration,title'
+    resp=requests.get(lien)
+    data=simplejson.loads(resp.content)
+    return data
+
+def get_duration_json(src_video, data):
+    if 'youtube' in src_video:
+        duration=data['data']['duration']*1000
+    elif 'vimeo' in src_video:
+        duration=data[0]['duration']*1000
+    else:
+        duration=data['duration']*1000
+    return duration
+    
+def get_title_json(src_video, data):
+    if 'youtube' in src_video:
+        title=data['data']['title']
+    elif 'vimeo' in src_video:
+        title=data[0]['title']
+    else:
+        title=data['title']
+    return title
+  
\ No newline at end of file
--- a/src/ldt/ldt/static/ldt/css/ldtform.css	Tue Sep 18 15:16:39 2012 +0900
+++ b/src/ldt/ldt/static/ldt/css/ldtform.css	Tue Sep 18 15:26:46 2012 +0200
@@ -24,7 +24,7 @@
 }
 
 #add_content textarea {
-	height : 125px;
+	height : 220px;
 }
 
 #add_content li {
--- a/src/ldt/ldt/static/ldt/js/projectscontents.js	Tue Sep 18 15:16:39 2012 +0900
+++ b/src/ldt/ldt/static/ldt/js/projectscontents.js	Tue Sep 18 15:26:46 2012 +0200
@@ -736,11 +736,73 @@
         results = url.match("[\\?&]v=([^&#]*)");
         vid = ( results === null ) ? url : results[1].substring(0,11);
         if(vid.length===11){
-            //$('#id_content-description').val($('#media_field_create') + '<img src="http://img.youtube.com/vi/'+vid+'/default.jpg" alt="Youtube Thumbnail"/>');
-            $('#media_field_create').append('<img id="external_thumbnail" src="http://img.youtube.com/vi/'+vid+'/default.jpg" alt="Youtube Thumbnail"/>');
-            $('#media_fields_div').height(150);
+            var jsonp_url = 'https://gdata.youtube.com/feeds/api/videos/'+vid+'?v=2';
+            $.ajax({
+                type: "GET",
+                url: jsonp_url,
+                dataType: "jsonp",
+                cache : false,
+                data : {"alt" : "json-in-script"},
+                jsonpCallback : 'dude',
+                jsonp : 'callback',
+                success: function(data, status, request) {
+                    $('#id_content-duration').val(data.entry.media$group.media$content[0].duration*1000);
+                    if(($('#id_content-title').val())==""){
+                         $('#id_content-title').val(data.entry.title.$t);
+                    }
+                    $('#media_field_create').append('<img id="external_thumbnail" src="'+data.entry.media$group.media$thumbnail[0].url+'" alt="Youtube Thumbnail"/>');
+                    $('#media_fields_div').height(150);
+                }
+            });
+            
         }
     }
+    else if(url.match("vimeo")){
+        var match = /vimeo.*\/(\d+)/i.exec( url );
+        if (match){
+            vid=match[1];
+            var jsonp_url="http://vimeo.com/api/v2/video/"+vid+".json";
+            $.ajax({
+                type: "GET",
+                url: jsonp_url,
+                dataType: "jsonp",
+                cache : false,
+                jsonpCallback : 'dude',
+                jsonp : 'callback',
+                success: function(data, status, request) {
+                    $('#id_content-duration').val(data[0].duration*1000);
+                    if(($('#id_content-title').val())==""){
+                         $('#id_content-title').val(data[0].title);
+                    }
+                    $('#media_field_create').append('<img id="external_thumbnail" src="'+data[0].thumbnail_small+'" />');
+                    $('#media_fields_div').height(150);
+                }
+            });
+        }
+    }
+    else if(url.match("dailymotion")){
+        id = url.substr(url.search("video/")+6);
+        tableau=id.split("_");
+        vid=tableau[0];
+        jsonp_url= "https://api.dailymotion.com/video/"+vid;
+        $.ajax({
+            type: "GET",
+            data : {"fields" : "id,duration,title,thumbnail_medium_url"},
+            url: jsonp_url,
+            dataType: "jsonp",
+            cache : false,
+            jsonp : 'callback',
+            jsonpCallback : 'dude',
+            success: function(data, status, request) {
+                $('#id_content-duration').val(data.duration*1000);
+                if(($('#id_content-title').val())==""){
+                     $('#id_content-title').val(data.title);
+                }
+                $('#media_field_create').append('<img id="external_thumbnail" src="'+data.thumbnail_medium_url+'" />');
+                $('#media_fields_div').height(190);
+            }
+        });
+    }
 }
 
 function check_uncheck_all(name) {