YouTube playlist on a Chromecast device that starts at a random video?

Hi all, I would like to play a YouTube playlist on a Chromecast device that starts at a random video.

My idea so far: To play a playlist starting with the video matching media_id via Chromecast, the following snippet works:

service: media_player.play_media
data:
  media_content_id: >-
    {% set msg ={'app_name':'youtube',
    'playlist_id':'<pid>',
    'media_id':'<mid>'}%}{{ msg|to_json }}
  media_content_type: cast 

In principle, all I would need to do now is generate a random number (smaller than the playlist size) and find out (possibly via YouTube API) the media_id of the xth playlist item, so roughly: ‘media_id’:‘playlist[x].itemId’. Can I pass the result of an API call as a parameter to the template? Or maybe there are better, more comfortable ways? Unfortunately ‘Media_id’:‘h**ps://www.youtube.com/watch?v=+&list=$pid&index=$randomNumber’ does not work for me by passing it directly to media_player.play_media. Maybe I could catch the redirection to get the actual media_id in a more convenient way and pass it then to media_player?

Thank you so much in advance!

1 Like

Hi there,
Did you manage to work out a solution to this in the end?

For anyone looking to do something similar, you can create an action like this to randomize the video that gets played from an array of YouTube video IDs.

service: media_player.play_media
data:
  media_content_type: cast
  media_content_id: '
    { 
    "app_name": "youtube", 
    "media_id": "{{ ["_eA_yGCXeOc","HwCxsgO9yuc","sAbft0V_kuc","gK4gkQT5LCc","9xgQK0INfzs","R951vrtD26Q","6gvtwZPjFzA","02ML4zlcRpk","Mm3JEThKlb0","HaAlW2V3BFg","j6UpMQ2zQYc","jiBW2FOgqk4","J4bQVMo-rV0","DJ8TeIg54aA","8On65uuidM8","r0XNQKvXQ1M","R1b7xQl78oQ","Q4_HXU67C_Y","sz2yap7PlJQ","A9sPEMFUiq4","uu1YpRtrLNA","ZPVje0hBXyw","9ZUeOOcJcJ0","S9hDCskzWSM","ZEBKaApFzKU","pINr59Lx-Ow","UoMQ3gO6UJs","AZtPl6AWiY4","bzDspQiDIRg","28hxSU4mxbw","kwbBRLLOFrw","NKhiSENqxsQ","lG79-4KbEgA","aVMBBWWr8n0","bjTqrtGPdKY","NFLpFvY19tE","NeoXLil0peQ","vPs7h4ub03k","zACwfxltq3o","hwVLv4swDrA","81tFBK5-_fM","QWA22t3yAk4","zTzTdndj_IY","9tkAj82rNGM","zlg6AUUAfsA","of7ezf2vWdw","rrQGHSaIoZ8","SAIiZRGfKfo","c0tY3Xho0fE","YS3xsJsuiEI","H24Epu-1k6c","wQlpBgYRw4Y","AicXkHxlOFM","4JiDd1mn0nM","sHbdSDkceI4","gsC8yPZ3K10","oNhnkPP11Js","Dix58mO0Pbc","q6gR3ayHKeo","BvQqevix-C8","2rzPWUGqQSs","Ee7vVI5R7PM","vFVkwVJzsrI","BJ0RCLG-Kr8","K3_PG7LBw-M","jYBk-BVOnC4","dDXrN-yPOFo","jS-N2rw_GoU","B-FR23hswfQ","3qDTEFD88h0","fbykY7EX6Ss","_iNQ7wELS2k","CTPomE_7xdI","ZLUrdZ9iKgI","7ZPrbrzllVc","pUvQ1KmkqZI","_qbml6Ib4OQ","_itxpL_jXW4","JJgbaxzRF0g","yQZXrg2d37g","fDEgO2A-34g","hHTZT4RnKo0","CUfGX90c39c","HA2WwumRIT8","Z0cixBmgLcA","AY3m0NpkSY4","GpgZriJI-Ho","OzohNi3NHWI","AUFarbDfUl4","UKL2DxolEDQ","6zwfRQaiRU4","DTPIzMB0MmI","Vr2OkMB2Wr0","8fpfdAKcBfU","56359TnQGww","yO4B3gYZ_Wo","wSGXziyeHlE","qsOUbq0Aj1k","gSxXqjYTAJ0","hr3NAx2AnFw","XnmgbZdcRl4","b_xKQ20jnQA","rhYSurIb1-8","J1d1LvTzyGU","GxUo52lmnXc","Fy_dFSHBL0k","esBaoCGUPw0","A1VaNx3gjQE","NyC7pxHJYC4","RKeakEiw3ug","mRqjclXwUmg","W7cgMJJXTKE","YUekOmRg3Dg","obThoQvPSd4","eBNDRH1T6cU","Gzn5BStC5xo","0mgulZinj7U","gqGfwPXUsfo","bwfPdDP6GUM","QIL8c-8p-yU","PJ4xdmZccqw","I8Wtq7Q0IiM","CD3YNLUgW8s","wcrMTyTmoXA","3YcnVpYKcHc","t4FoUGcxEvQ","at4-7P3EBPU","lIKbOFdlujM","wZPbsiJ4Cj8","OmDTkmyoLk0","LXVPEL9OvQ0","dH3KGIaQXlQ","jA275UZJViw","4IiEsBaMrDA"] | random }}" 
    }'
target:
  entity_id: media_player.office_tv

To extract all the video IDs from a YouTube playlist. Open the playlist page (like this https://www.youtube.com/playlist?list=PLVsZgWtfYk4igOAAaP56JvuFuabPD29-d), scroll down to the bottom, click load more, repeat until the end, then open Google Developer Tools, Console and paste this code.

var els = document.getElementsByClassName('yt-simple-endpoint style-scope ytd-playlist-video-renderer');
var show="";
for(i = 0;i<els.length;i++){
    var el = els[i];
	show += (el.href.split('?v=')[1].split('&list')[0] + "\n");
}
console.log(show);

Output is a list of video IDs from the page which I dropped into Google Sheets to add quotes around each value and comma separate with a JOIN formula.

2 Likes