連続したテキストからYoutube URL抜くだけでの正規表現grepメモ そこからyt-dlpする

こんばんわ、無能です。

マストドンの書き込みとかをdumpするとこうなる。

/\u003e\u003ca href=\"https://youtube.com/watch?v=jL4NZ913v8E\u0026amp;feature=share\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"\u003e\u003cspan class=\"invisible\"\u003ehttps://\u003c/span\u003e\u003cspan class=\"ellipsis\"

とこの連続した文字列の中からyoutubeのURLだけを抽出したい。

grep -oP ‘youtube.com\/watch\?v=…………’ outbox.json > mstv.txt

grep -oP ‘youtube.com\/shorts\/…………’ outbox.json > mstv2.txt

一応、wwwがありなしで区別するのがめんどくさいのでyoutube.com以降だけマッチさせて、あとから置換する。

youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p\
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p\
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg\
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg\

まだ詳しく見ていないが、なぜかイチ文字削れて\が入っているものもあるのでsed -iで消す。

sed -i ‘s/\\//g’ mstv.txt

youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg

こんな感じになるので正しいURLの方の文字列をカウントしてみる。

echo “youtube.com/watch?v=g5HQFrSk4OA” | wc -c
32

32桁らしい。

ということで32桁のだけ抽出する。

grep -oP ‘^.{32}$’ mstv.txt > mstvtmp.txt

と、なんか成功した風に書いてあるが再検証したらうまくいかなかった。32を31にしたらいけた。アレ、なんで?というので誰か教えてください。

grep -oP ‘^.{31}$’ mstv.txt > mstvtmp.txt

youtube.com/watch?v=g5HQFrSk4OA
youtube.com/watch?v=g5HQFrSk4OA
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8pc

こんな感じに重複してしまうので・・・。

uniqで重複するものを行ごと消す。

uniq mstvtmp.txt > newmstv.txt

念の為重複しないものを探して追記していく

uniq -u mstvtmp.txt >> newmstv.txt

youtube.com/watch?v=jL4NZ913v8E
youtube.com/watch?v=g5HQFrSk4OA
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=DRVp_cmW3Nw

おっけーだ。

ということでyt-dlpでダウンロードするようにしてみる。
今回はmp4形式で保存します。

sed -i ‘s|youtube|yt-dlp -o “/media/ncp/yt/n/%(title)s” -f “bv[ext=mp4]+ba[ext=m4a]” –merge-output-format mp4 https://www.youtube|g’ newmstv.txt

上記の時点で、wwwついたURLに置換してます。
別に、検索文字列を行頭である^でいいじゃーん!って声もありそうですが個人的に途中からの文字列で置き換えたほうが再現性高そうなのでこのやり方が好きです。

また、/が入っているのでsedで区切るのも|で行っています。|でなくてもいいんですけどね。

ほんで、名前をsh形式にしましょう。

mv newmstv.txt ytdl.sh

vi ytdl.sh

で#!/bin/bashを追記します。

実行権限を与えましょう。

chmod +x ./ytdl.sh

(ここで、./でやらねばーと思い立って今さらやる男。なしでも変わらないんですが。つけないと男として失格です。)

あとは、実行しておk。

なお、絶対的に最初のgrepの段階できれいにURLの文字列抜く方法あるはずです。まだまだあまあまなのでゆるしてください。なぜなのかまだ追ってすら無いから、逆にめんどくさいことしてると思いますがいろんなコマンド打って楽しいね、をやる回です。

おわり。

コメントを残す

管理人が承認後コメントが公開されます。
の項目は必須項目となります。