Skip to content

Instantly share code, notes, and snippets.

@spyesx
Last active June 16, 2024 13:38
Show Gist options
  • Save spyesx/27cecbe9483c507b9b098d942e98d62b to your computer and use it in GitHub Desktop.
Save spyesx/27cecbe9483c507b9b098d942e98d62b to your computer and use it in GitHub Desktop.
Get URLs of your youtube watch later playlist
// Execute this in the console of on your own playlist
var videos = document.querySelectorAll('.yt-simple-endpoint.style-scope.ytd-playlist-video-renderer');
var r = [];
var json = [];
r.forEach.call(videos, function(video) {
var url = 'https://www.youtube.com' + video.getAttribute('href');
url = url.split('&list=WL&index=');
url = url[0];
json.push(url);
});
console.log(json)
## As @jwillmer said in the comment, we want to use bash, not sh
# chmod 744 youtube_watch_later.sh
# ./youtube_watch_later.sh
#!/bin/bash
declare -a videos=(
"https://www.youtube.com/watch?v=5dsGWM5XGdg"
"https://www.youtube.com/watch?v=2J5GzHoKl1Q"
)
for i in "${videos[@]}"
do
youtube-dl -i -c --write-thumbnail -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' "$i"
done
@zi3dAouidene
Copy link

I change it to a set of objects, each objects contains the title and url separately rather than just one string

  let videos = document.querySelectorAll('.yt-simple-endpoint.style-scope.ytd-playlist-video-renderer');
  let r = [];
  let result = new Set();

  r.forEach.call(videos, function (video) {
    let title = video.getAttribute('title') 
    let url = 'https://www.youtube.com' + video.getAttribute('href')
    url = url.split('&list=WL&index=')[0];

    result.add({title:title, url:url})

  });
  console.log(Array.from(result))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment