YouTubeの動画再生率を用いたスマートリストを作成する方法 | Community
Skip to main content
August 9, 2022
Solved

YouTubeの動画再生率を用いたスマートリストを作成する方法

  • August 9, 2022
  • 1 reply
  • 145 views

現在YouTube動画を用いたナーチャリング施策を検討しています。

具体的には、YouTube動画の再生率が高い顧客をスマートリストで一覧表示し、インサイドセールスの架電につなげるというものです。

 

以下のディスカッションを拝見し、Marketoのアクティビティログへ再生率を反映させるところまでは成功しましたが、

「参照元 URL」「クエリのパラメータ」「ウェブページ URL」といった詳細アクティビティログへ再生率を反映できているわけではないため、スマートリストの条件として活用できる状態にありません。

 

https://nation.marketo.com/t5/japan-user-group-discussions/youtube%E3%82%92%E5%8B%95%E7%94%BB%E5%86%8D%E7%94%9F%E6%99%82%E9%96%93%E3%81%BE%E3%81%A7%E3%83%88%E3%83%A9%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/gpm-p/254298#M3272

 

以下のJavascriptに何らかの記述を追加する必要がありそうなのですが、見当がつかず、お分かりになられるかたおりましたら教えてください。

<script> 'use strict'; (function () { $(function () { var idx = ''; var $target = $('[id *= "player_"]'); // idを取得 $target.each( function(i){ var tempId = $(this).attr('id').replace('player_', ''); if( i >= 1){ idx += ','; } idx += tempId; } ) // youtube API var tag = document.createElement('script'); tag.src="http://www.youtube.com/iframe_api"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); window.onYouTubeIframeAPIReady = function() { addYoutubePlayer( idx ); } var playerArr = {}; // player obj // playerを生成 function addYoutubePlayer( videoIDs ) { if( videoIDs === undefined ){ throw new Error('videoIDs is not defined!'); } var tmpIdArr = videoIDs.split(","); for(var i in tmpIdArr){ var videoID = tmpIdArr[i]; var playerID = 'player_' + videoID; var player = new YT.Player( playerID, { videoId: videoID, events: { onReady : onPlayerReady, onStateChange : onPlayerStateChange }, playerVars: { rel :0, showinfo :0, controls :1 } } ); // var tempObj = { player : player, startFlg : false, send25per : 0, send50per : 0, send75per : 0, totalSeconds : 0, second30Flg : false, intervalId : 0, oldTime : 0, currentTime : 0, send25Flg : false, send50Flg : false, send75Flg : false, send100Flg : false } playerArr[videoID] = tempObj; } } function onPlayerReady( event ) { var id = event.target.getVideoUrl().replace(/https?:\/\/www\.youtube\.com\/watch\?v=/, ''); var totalSeconds = event.target.getDuration() - 1; playerArr[id].totalSeconds = totalSeconds; playerArr[id].send25per = totalSeconds * 0.25; playerArr[id].send50per = totalSeconds * 0.50; playerArr[id].send75per = totalSeconds * 0.75; } function onPlayerStateChange(event) { var eventNum = event.data; var id = event.target.getVideoUrl().replace(/https?:\/\/www\.youtube\.com\/watch\?v=/, ''); switch ( eventNum ) { case YT.PlayerState.ENDED: // 0 (再生終了(=最後まで再生した)) playerArr[id].startFlg = false; playerArr[id].second30Flg = false; clearInterval( playerArr[id].intervalId ); break; case YT.PlayerState.PLAYING: // 1 (再生中) if( !playerArr[id].startFlg ){ playerArr[id].startFlg = true; // playを飛ばす sendGA( id, 'play', '', '0%'); } // playerArr[id].intervalId = setInterval(function(){ playerArr[id].oldTime = playerArr[id].currentTime; playerArr[id].currentTime = event.target.getCurrentTime(); var range = Math.abs( playerArr[id].currentTime - playerArr[id].oldTime ); // seekの判断 if( Math.floor(range) >= 2 ){ // seek後も同じ計測エリアの場合はフラグを戻さない // 25per if( playerArr[id].oldTime >= ( playerArr[id].send25per ) && playerArr[id].oldTime <= ( playerArr[id].send50per ) && playerArr[id].currentTime >= ( playerArr[id].send25per ) && playerArr[id].currentTime <= ( playerArr[id].send50per ) ){ playerArr[id].send25Flg = true; } else { playerArr[id].send25Flg = false; } // 50per if( playerArr[id].oldTime >= ( playerArr[id].send50per ) && playerArr[id].oldTime <= ( playerArr[id].send75per ) && playerArr[id].currentTime >= ( playerArr[id].send50per ) && playerArr[id].currentTime <= ( playerArr[id].send75per ) ){ playerArr[id].send50Flg = true; } else { playerArr[id].send50Flg = false; } // 75per if( playerArr[id].oldTime >= ( playerArr[id].send75per ) && playerArr[id].oldTime <= ( playerArr[id].totalSeconds ) && playerArr[id].currentTime >= ( playerArr[id].send75per ) && playerArr[id].currentTime <= ( playerArr[id].totalSeconds ) ){ playerArr[id].send75Flg = true; } else { playerArr[id].send75Flg = false; } playerArr[id].send100Flg = false; } // 30秒のフラグ if( playerArr[id].currentTime >= ( 30 ) && playerArr[id].currentTime <= ( 30 + 1 ) && !playerArr[id].second30Flg ){ sendGA( id, '', '30秒突破', ''); playerArr[id].second30Flg = true; } // 25%のフラグ if( playerArr[id].currentTime >= ( playerArr[id].send25per ) && playerArr[id].currentTime <= ( playerArr[id].send50per ) && !playerArr[id].send25Flg ){ sendGA( id, '', '', '25%'); playerArr[id].send25Flg = true; } // 50%のフラグ if( playerArr[id].currentTime >= ( playerArr[id].send50per ) && playerArr[id].currentTime <= ( playerArr[id].send75per ) && !playerArr[id].send50Flg ){ sendGA( id, '', '', '50%'); playerArr[id].send50Flg = true; } // 75%のフラグ if( playerArr[id].currentTime >= ( playerArr[id].send75per ) && playerArr[id].currentTime <= ( playerArr[id].totalSeconds ) && !playerArr[id].send75Flg ){ sendGA( id, '', '', '75%'); playerArr[id].send75Flg = true; } // 100%のフラグ if( playerArr[id].currentTime >= ( playerArr[id].totalSeconds ) && !playerArr[id].send100Flg ) { sendGA( id, 'finish', 'complete', '100%'); playerArr[id].send100Flg = true; } // loopFunc( event.target ); }, 250); break; case YT.PlayerState.PAUSED: // 2 (一時停止された) clearInterval( playerArr[id].intervalId ); if(playerArr[id].currentTime >= playerArr[id].totalSeconds ) { return; } sendGA( id, 'stop', '', '' ); break; case YT.PlayerState.BUFFERING: // 3 (バッファリング中) if( !playerArr[id].startFlg ){ playerArr[id].startFlg = true; sendGA( id, 'play', '', '0%'); } break; case YT.PlayerState.CUED: // 5 (頭出しされた) break; case -1: // 動画未再生 break; } } function sendGA( id, label, time1, time2 ) { // console.log( 'id : ' + id, ' / label : ' + label, ' / time-1 : ' + time1, ' / time-2 : ' + time2 ); var url = 'id:'+ id + '_label :' + label + '_time-1:' + time1 + '_%_:' + time2 /* dataLayer.push({ 'event' : 'Click', 'category' : 'YouTube', 'action' : id, 'label' : label, // 'play' / 'finish' 'time-1' : time1, // 30秒 / complete 'time-2' : time2 // percent }); */ Munchkin.munchkinFunction('clickLink', { 'href': url } ); } }); }()); </script>
This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Darshil_Shah1

You can check this where Sandy has explained about creating munchkin webpage visit activities to reflect the % of youtube videos watched.

 

これは、視聴した YouTube 動画の割合を反映するマンチカン Web ページの訪問アクティビティの作成について Sandy が説明している場所で確認できます。

 

1 reply

Darshil_Shah1
Community Advisor and Adobe Champion
Darshil_Shah1Community Advisor and Adobe ChampionAccepted solution
Community Advisor and Adobe Champion
August 9, 2022

You can check this where Sandy has explained about creating munchkin webpage visit activities to reflect the % of youtube videos watched.

 

これは、視聴した YouTube 動画の割合を反映するマンチカン Web ページの訪問アクティビティの作成について Sandy が説明している場所で確認できます。

 

k-hayashiAuthor
August 18, 2022

Darshil様

 

ありがとうございます!

無事解決しました!