First batch of extra files

This commit is contained in:
2025-10-28 18:39:57 +01:00
parent d8c35077cb
commit 2bb22c7583
890 changed files with 40738 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
<?xml version="1.0"?>
<opml version="1.1">
<body>
<outline text="YouTube Subscriptions" title="YouTube Subscriptions">
<outline text="Afrotechmods" title="Afrotechmods" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCosnWgi3eorc1klEQ8pIgJQ"/>
<outline text="Andreas Spiess" title="Andreas Spiess" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCu7_D0o48KbfhpEohoP7YSQ"/>
<outline text="April Wilkerson" title="April Wilkerson" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC4v2tQ8GqP0RbmAzhp4IFkQ"/>
<outline text="BicycleDutch" title="BicycleDutch" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC67YlPrRvsO117gFDM7UePg"/>
<outline text="bigclivedotcom" title="bigclivedotcom" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCtM5z2gkrGRuWd0JQMx76qA"/>
<outline text="Business Casual" title="Business Casual" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC_E4px0RST-qFwXLJWBav8Q"/>
<outline text="CaptainDisillusion" title="CaptainDisillusion" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCEOXxzW2vU0P-0THehuIIeg"/>
<outline text="CGP Grey" title="CGP Grey" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC2C_jShtL725hvbm1arSV9w"/>
<outline text="colinfurze" title="colinfurze" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCp68_FLety0O-n9QU6phsgw"/>
<outline text="Computerphile" title="Computerphile" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC9-y-6csu5WGm29I7JiwpnA"/>
<outline text="DIY Perks" title="DIY Perks" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCUQo7nzH1sXVpzL92VesANw"/>
<outline text="EEVblog" title="EEVblog" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC2DjFE7Xf11URZqWBigcVOQ"/>
<outline text="ElectroBOOM" title="ElectroBOOM" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCJ0-OtVpF0wOKEqT2Z1HEtA"/>
<outline text="engineerguy" title="engineerguy" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC2bkHVIDjXS7sgrgjFtzOXQ"/>
<outline text="Essential Craftsman" title="Essential Craftsman" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCzr30osBdTmuFUS8IfXtXmg"/>
<outline text="Every Frame a Painting" title="Every Frame a Painting" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCjFqcJQXGZ6T6sxyFB-5i6A"/>
<outline text="exurb1a" title="exurb1a" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCimiUgDLbi6P17BdaCZpVbg"/>
<outline text="FLEB" title="FLEB" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCTlGuNR-3QM0PMPNCAcAX2w"/>
<outline text="Foil Arms and Hog" title="Foil Arms and Hog" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCzb-6smlTg5UPirLdsdQ_cQ"/>
<outline text="Francois Rautenbach" title="Francois Rautenbach" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC1KeUTUd-fDv553C3UNr7xQ"/>
<outline text="Geography Now" title="Geography Now" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCmmPgObSUPw1HL2lq6H4ffA"/>
<outline text="Get Hands Dirty" title="Get Hands Dirty" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCETeXD_3awsQv-9rSdCYXQQ"/>
<outline text="Grand Illusions" title="Grand Illusions" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCnmgSO_4g6QcRzy0yFeglyA"/>
<outline text="GreatScott!2" title="GreatScott!2" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UChDhmjwek68frAz_p4ySBuQ"/>
<outline text="GreatScott!" title="GreatScott!" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC6mIxFTvXkWQVEHPsEdflzQ"/>
<outline text="Half as Interesting" title="Half as Interesting" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCuCkxoKLYO_EQ2GeFtbM_bw"/>
<outline text="History Buffs" title="History Buffs" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCggHoXaj8BQHIiPmOxezeWA"/>
<outline text="How to DAD" title="How to DAD" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCNJTPOFN-13sb5JGrY1mNQg"/>
<outline text="Human Interests" title="Human Interests" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCaPRCWnFAzeI3_tr--Qw5qg"/>
<outline text="I Like To Make Stuff" title="I Like To Make Stuff" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC6x7GwJxuoABSosgVXDYtTw"/>
<outline text="Jared Owen" title="Jared Owen" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCbsfyGlrjrKQC0gbzK0-EiA"/>
<outline text="Jay Foreman" title="Jay Foreman" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCbbQalJ4OaC0oQ0AqRaOJ9g"/>
<outline text="John Ward" title="John Ward" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC2uFFhnMKyF82UY2TbXRaNg"/>
<outline text="Julian Ilett" title="Julian Ilett" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCmHvGf00GDuPYG9DZqQKd9A"/>
<outline text="kaptainkristian" title="kaptainkristian" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCuPgdqQKpq4T4zeqmTelnFg"/>
<outline text="Kurzgesagt &#x2013; In a Nutshell" title="Kurzgesagt &#x2013; In a Nutshell" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCsXVk37bltHxD1rDPwtNM8Q"/>
<outline text="LastWeekTonight" title="LastWeekTonight" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC3XTzVzaHQEd30rQbuvCtTQ"/>
<outline text="Laura Kampf" title="Laura Kampf" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCRix1GJvSBNDpEFY561eSzw"/>
<outline text="Machine Thinking" title="Machine Thinking" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCfsznjef2zGJnrCRQBXqo6Q"/>
<outline text="Mark Rober" title="Mark Rober" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCY1kMZp36IQSyNx_9h4mpCg"/>
<outline text="MickMake" title="MickMake" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC7GMT3ohvYEAJFDenzj9EMQ"/>
<outline text="Motherboard" title="Motherboard" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCB6PV0cvJpzlcXRG7nz6PpQ"/>
<outline text="N1QQ" title="N1QQ" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCaz816AiirAP2vsdyeYLcqA"/>
<outline text="NightHawkInLight" title="NightHawkInLight" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCFtc3XdXgLFwhlDajMGK69w"/>
<outline text="Now You See It" title="Now You See It" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCWTFGPpNQ0Ms6afXhaWDiRw"/>
<outline text="Oscar Owen" title="Oscar Owen" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCeeHYKSxJPk0Hv2v-LLTdmg"/>
<outline text="Polyphonic" title="Polyphonic" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCXkNod_JcH7PleOjwK_8rYQ"/>
<outline text="PostmodernJukebox" title="PostmodernJukebox" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCORIeT1hk6tYBuntEXsguLg"/>
<outline text="Practical Engineering" title="Practical Engineering" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCMOqf8ab-42UUQIdVoKwjlQ"/>
<outline text="Primitive Technology" title="Primitive Technology" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCAL3JXZSzSm8AlZyD3nQdBA"/>
<outline text="Radio Physics and Electronics" title="Radio Physics and Electronics" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCPZyvIlEccZAGRZNzCPuKDQ"/>
<outline text="Real Engineering" title="Real Engineering" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCR1IuLEqb6UEA_zQ81kwXfg"/>
<outline text="RealLifeLore" title="RealLifeLore" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCP5tjEmvPItGyLhmjdwP7Ww"/>
<outline text="singingbanana" title="singingbanana" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCMpizQXRt817D0qpBQZ2TlA"/>
<outline text="SmarterEveryDay" title="SmarterEveryDay" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC6107grRI4m0o2-emgoDnAA"/>
<outline text="standupmaths" title="standupmaths" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCSju5G2aFaWMqn-_0YBtq5A"/>
<outline text="Steve Mould" title="Steve Mould" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCEIwxahdLz7bap-VDs9h35A"/>
<outline text="The Great War" title="The Great War" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCUcyEsEjhPEDf69RRVhRh4A"/>
<outline text="The Ham Whisperer" title="The Ham Whisperer" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCgJ1zALjXRqiEcjFB-9b7rA"/>
<outline text="The Offset Volt" title="The Offset Volt" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCr5GSao6hWBvsVLGWha1hCw"/>
<outline text="The Signal Path" title="The Signal Path" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCKxRARSpahF1Mt-2vbPug-g"/>
<outline text="the Technowright" title="the Technowright" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCvDZZ8MX-Cgi-ygNBniHs7Q"/>
<outline text="thomas nagy" title="thomas nagy" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC6EJTy6p58ZW16PEljSn4Qw"/>
<outline text="Tom Scott" title="Tom Scott" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCBa659QWEk1AI4Tg--mrJ2A"/>
<outline text="Veritasium" title="Veritasium" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCHnyfMqiRRG1u-2MsSQLbXA"/>
<outline text="w2aew" title="w2aew" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCiqd3GLTluk2s_IBt7p_LjA"/>
<outline text="Wendover Productions" title="Wendover Productions" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC9RM-iSvTu1uPJb8X5yp3EQ"/>
<outline text="Wintergatan" title="Wintergatan" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCcXhhVwCT6_WqjkEniejRJQ"/>
</outline>
</body>
</opml>

View File

@@ -0,0 +1,102 @@
#!/bin/bash
# Downloads videos from youtube based on selection from http://thebestofyoutube.com
# (c) Ken Fallon http://kenfallon.com
# Released under the CC-0
# https://www.youtube.com/subscription_manager -> /mnt/media/Videos/channels/subscription_manager.opml
# xmllint --format /mnt/media/Videos/channels/subscription_manager.opml | sponge /mnt/media/Videos/channels/subscription_manager.opml
savepath="/mnt/media/Videos/channels"
subscriptions="${savepath}/subscription_manager.opml"
logfile="${savepath}/log/downloaded.log"
youtubedl="/mnt/media/Videos/youtube-dl/youtube-dl"
DRYRUN="echo DEBUG: "
maxlength=7200 # two hours
#skipcrap="fail |react |live |Best Pets|BLOOPERS|Kids Try"
if [ ! -e "${subscriptions}" ]
then
echo "Cannot find subscription file \"${subscriptions}\""
exit 1
fi
if [ -e "${logfile}_getlist" ]
then
rm -v "${logfile}_getlist"
fi
if [ -e "${logfile}_todo" ]
then
rm -v "${logfile}_todo"
fi
if [ -e "${logfile}" ]
then
cp -v "${logfile}" "${logfile}".$(/bin/date +%Y%m%d%H%M%S)
else
touch "${logfile}"
fi
xmlstarlet sel -T -t -m '/opml/body/outline/outline' -v 'concat( @xmlUrl, " ", @title)' -n "${subscriptions}" | while read subscription title
do
echo "Getting \"${title}\""
wget -q "${subscription}" -O - | xmlstarlet sel -T -t -m '/_:feed/_:entry/media:group/media:content' -v '@url' -n - | awk -F '?' '{print $1}' >> "${logfile}_getlist"
done
count=1
total=$( sort "${logfile}_getlist" | uniq | wc -l )
sort "${logfile}_getlist" | uniq | while read thisvideo
do
if [ "$( grep "${thisvideo}" "${logfile}" | wc -l )" -eq 0 ];
then
metadata="$( ${youtubedl} --dump-json ${thisvideo} )"
uploader="$( echo $metadata | jq '.uploader' | awk -F '"' '{print $2}' )"
title="$( echo $metadata | jq '.title' | awk -F '"' '{print $2}' )"
upload_date="$( echo $metadata | jq '.upload_date' | awk -F '"' '{print $2}' )"
id="$( echo $metadata | jq '.id' | awk -F '"' '{print $2}' )"
duration="$( echo $metadata | jq '.duration' )"
if [[ -z ${duration} || ${duration} -le 0 ]]
then
echo -e "\nError: The duration \"${length}\" is strange. \"${thisvideo}\"."
continue
elif [[ ${duration} -ge ${maxlength} ]]
then
echo -e "\nFilter: You told me not to download titles over ${maxlength} seconds long \"${title}\", \"${thisvideo}\""
continue
fi
if [[ ! -z "${skipcrap}" && $( echo ${title} | egrep -i "${skipcrap}" | wc -l ) -ne 0 ]]
then
echo -e "\nSkipping: You told me not to download this stuff. ${uploader}: \"${title}\", \"${thisvideo}\""
continue
else
echo -e "\n${uploader}: \"${title}\", \"${thisvideo}\""
fi
echo ${thisvideo} >> "${logfile}_todo"
echo -e $( echo $metadata | jq '.description' ) > "${savepath}/description/${id}.txt"
else
echo -ne "\rProcessing ${count} of ${total}"
fi
count=$((count+1))
done
echo ""
# Download the list
if [ -e "${logfile}_todo" ];
then
cat "${logfile}_todo" | ${youtubedl} --batch-file - --ignore-errors --no-mtime --restrict-filenames --format mp4 -o "${savepath}"'/%(uploader)s/%(upload_date)s-%(title)s⋄%(id)s.%(ext)s'
cat "${logfile}_todo" >> ${logfile}
fi
if [ -e "${logfile}_getlist" ]
then
rm -v "${logfile}_getlist"
fi
if [ -e "${logfile}_todo" ]
then
rm -v "${logfile}_todo"
fi
echo "${savedir}"