如何从 Linux 命令行订阅 YouTube 源?

如何从 Linux 命令行订阅 YouTube 源?

我想订阅 YouTube 频道并自动将新视频下载到我的 Linux 机器上。

我知道我可以使用 miro 来做到这一点,但我不会使用 Miro 观看视频,而是想选择质量并将其作为 cronjob 运行。

它应该能够:

  • 知道哪些 feed 条目是新的并且不下载旧条目
  • 从旧会话中恢复(或至少重新下载)失败/不完整的下载

有没有完整的解决方案?

如果没有的话,对我来说就足够了(也许更可取),只需有一个命令行 rss 阅读器,记住哪些条目已经存在并写入新的视频 url(例如http://www.youtube.com/watch?v=FodYFMaI4vQ&feature=youtube_gdatahttp://gdata.youtube.com/feeds/api/users/tedxtalks/uploadsbash) 保存到一个文件中。然后我可以使用脚本和来完成其余的工作youtube-dl

有哪些程序可用于此目的?

答案1

我最终使用这个bash脚本完成了它:

#!/bin/bash

conffile="$@"

if [ ! -f "$@" ] || [ 3 -ne $(wc -l "$@" | grep -o '^[0-9]*') ]; then
        echo "This script writes a list of new video ids into an output file."
        echo "Argument must be a file containing three lines:"
        echo "      line 1: Feed url"
        echo "      line 2: Output file "
        echo "      line 3: Newest id from last program call. Leave empty for first run."

        exit 1
fi

mapfile -t < "$conffile"
url="${MAPFILE[0]}"
outfile="${MAPFILE[1]}"
lastid="${MAPFILE[2]}"

echo "Processing $id:"

allids=$(wget -q -O- "$url" | sed 's,href,\nhref,g' | sed -n -e "s,^.*href='http://www.youtube.com/watch?v=\([A-Za-z0-9_-]*\).*$,\1,p")

for id in $allids; do
    if [ "$lastid" == "$id" ]; then echo "No new items left." >&2; break; fi
    echo "$id"
    echo "Adding $id" >&2
done | tac >> "$outfile"

newlastid=$(echo $allids | grep -o "^[A-Za-z0-9_-]*")

echo  "$url"       > "$conffile"
echo  "$outfile"   >> "$conffile"
echo  "$newlastid" >> "$conffile"

它从配置文件中读取 feed url、输出文件和最新已知视频,然后从 feed 中提取视频 ID。然后将这些 ID 与最新已知 ID 进行比较(最新 feed 项目优先)。比此更新的项目将添加到输出文件中(现在最旧的项目优先)。

以下是一个示例配置文件youtube_tedx.conf

http://gdata.youtube.com/feeds/api/users/tedxtalks/uploads
~/Documents/Movies/tedx/list.all
VxKMeE-gTQY

可以通过调用来使用./get_new_youtube.sh youtube_tedx.conf

然后可以通过使用类似这样的命令list.all来处理输出文件( ) 。youtube-dlyoutube-dl -tca list.all && rm list.all

相关内容