# HG changeset patch # User Louise Grandjonc # Date 1347974806 -7200 # Node ID 129b1c8b008831350709243e9b45e018cf38e4e7 # Parent ebd7050d8de9ef620a3740f70354cf73bd82a2f9 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 diff -r ebd7050d8de9 -r 129b1c8b0088 src/ldt/ldt/ldt_utils/forms.py --- 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) diff -r ebd7050d8de9 -r 129b1c8b0088 src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html --- 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 }} - + @@ -97,8 +97,6 @@
{{ content_form.videopath.errors }}{{ content_form.videopath.label_tag }}{{content_form.videopath}}
{{ content_form.title.errors }}{{ content_form.title.label_tag }}{{content_form.title}}
{{ content_form.description.errors }}{{ content_form.description.label_tag }}{{content_form.description}}
-
{{ media_form.external_id.errors }}{{ media_form.external_id.label_tag }}{{media_form.external_id}}
-
{{ media_form.external_publication_url.errors }}{{ media_form.external_publication_url.label_tag }}{{media_form.external_publication_url}}
{{ content_form.external_id.errors }}{{ content_form.external_id.label_tag }}{{content_form.external_id}}
diff -r ebd7050d8de9 -r 129b1c8b0088 src/ldt/ldt/ldt_utils/views/content.py --- 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 diff -r ebd7050d8de9 -r 129b1c8b0088 src/ldt/ldt/static/ldt/css/ldtform.css --- 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 { diff -r ebd7050d8de9 -r 129b1c8b0088 src/ldt/ldt/static/ldt/js/projectscontents.js --- 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') + 'Youtube Thumbnail'); - $('#media_field_create').append('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('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(''); + $('#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(''); + $('#media_fields_div').height(190); + } + }); + } } function check_uncheck_all(name) {