あらすじ
消される前に落としたいのだけれどsoundcloudのAPIからは自分のアカウントでlikeしたtrackにはアクセスできるのですが、playlistには対応してないらしいです。
ならばpython+bs4+seleniumで、とも思ったのですが、pythonすら危ういのに使ったことない技術を2つも使うのは無理勉強しているうちに消されちゃうとなったので別の方法を模索しました。ちなみに結論からいうと一切pythonとか使わずに済んだのですが丸2日以上を要しました。アホです
とりあえず現状あるぶんだけのurlがわかればいいのでタイトルです。
Chromeデベロッパーツールを使う
[2021/03/26追記] Filefoxでも使えました。
適当に「webページ スクレイピング」とかで検索するとこちらの記事がヒットしました。ありがとうございます。
CSSセレクタがなんなのかは知らんけど、ElementsからurlがあるタグでCopy -> Copy Selectorでとってきたフルパスを流用したらいけたのでもうこれでいいです
> $$('div.playableTile__description > div.playableTile__descriptionContainer > a').map(e=>e.origin+e.pathname).join('\n'); > copy($_)
これでクリップボードにコピーされるので煮るなり焼くなりですね。
アウトテイクス
わたしなりに煮るなり焼くなりしました。
必要になりそうな知識
ざっくり、目的として、取得したurl先のsetsをscdlで指定のフォルダにDLするという感じ。 ぼんやりとやる羽目になりそうな手順を調べてやる羽目になりそうなやつとぶちあたりそうなやつを考えてみる。
- ターゲットとなるurlを改行区切りにした.txtをラズパイに送る
- そもそも可能かすら知らない
- 不可能だったりめんどくさそうすぎるなら平文メールなり自分垢にDMなりやる
- (ラズパイ側で)くだんのtxtを読み込む
- (ラズパイ側で)scdl実行
知らんこと多すぎるけど進める。
touchコマンドでファイルに書き出す
果たしてコマンドから一発でファイルに書き出すやりかた知らんかったけどググったら出てきた。エディタすら立ち上げるのがめんどくさい
touch urls1.txt vi urls1.txt
viの使い方も知らんのでいちいちググった
ファイルをmacからラズパイに送る
scp
コマンドとかいうのでできるらしい
http://wa3.i-3-i.info/word12904.html
user$ scp -p /the/directory/for/urls1.txt pi@192.xxx.xxx.xxx:/home/pi/scdl/urls1.txt pi@192.xxx.xxx.xxx's password: urls1.txt 100% 5095 5.0KB/s 00:00
pythonを使おうとする(使えなかったです)
さてここからpython内で「テキストファイルからurlを読み込みそれぞれに外部コマンドから処理を走らせる」旨のことをしたい。ざっと調べたところ外部コマンドはsubprocess
なるモジュールを使うといいらしい。プロセスとか出てきたがよくわからん。
コピペしてこのような感じでやってみたのだが、
with open('urltext.txt', 'r') as f: for line in f: p = subprocess.Popen(["scdl", "-l", line, "-c"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdo, _ = p.communicate() print("process: ", stdo)
動くには動くぽいのだが、コマンドが実行されている雰囲気がない。そもそもプロセスの定義とか挙動とかわからんしPopenとかいうのに渡している引数も最初のコマンドしか知らない。あとこのコマンドを使うと本来ならばプログレスバーが表示されるのだがpythonの標準出力でそんなことが可能なのか知らん。わからん。10時間くらい溶かしたところで諦める。
forコマンドを使う(できた)
自棄酒を煽っていたところ、for
の存在を知る。
for line in `cat ../urltext.text`; do scdl -l ${line} -c; done
これであっさりと動き出した。10時間返せ。結局pythonで得たのはファイルを扱うときはwith openでやるとcloseする必要がないよ、という教科書で得たやつを実装する経験だけで、何もないのと同じだった。。。。みんな一体どこでコマンドとかの知識を得ているというのだ。。