0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

特定のyoutubeチャンネルの動画の評価数を監視するスクリプト

Last updated at Posted at 2021-01-29

youtubeのホワイトハウスの動画を監視するスクリプトが以下のサイトで紹介されていました。作者がこのスクリプトを使ってホワイトハウスの動画を調査したところ、バイデンの動画の低評価がとても多いことと。低評価を減らす操作が行われていることがわかったそうです。
https://phzoe.com/2021/01/27/white-house-youtube-dislike-manipulation/
このスクリプトは英語圏用みたいで、日本語圏の自分の環境では以下のスクリプトで動きました。言語圏によりcurlの応答が変わるのは、curlで「私はこの言語圏にいます」という情報をyoutubeに送っているからなのか、それともyoutubeが勝手にこちらの言語圏を認識してるのかわかりません。詳しい人教えてください。

あとこのプログラムが回りすぎるとDOS攻撃になってしまうと思うので、使うときはターゲットのサイトをホワイトハウス以外に変えてみてください。

wh.sh
# Zoe Phin, 2021/01/26
# Habu, 2021/01/29
require() { sudo apt-get install curl gnuplot; }
 
stats() {
    list=$(curl -s 'https://www.youtube.com/c/WhiteHouse/videos' | grep -o 'watch?v=[^"]*')
    for i in $list; do
        link="https://www.youtube.com/$i"
        #echo -e "\x1B[31m" $link "\x1B[0m"
	date=$(date +"%s %x,%R:%S" | tr -d '\n')
	curl -s $link | tr -d ',' | tr '}' '\n' > new 
	grep -m 1 -o '[0-9,]* 回視聴' new > .views
        grep -m 1 -o '高評価 [0-9,]* 件' new > .likes
        grep -m 1 -o '低評価 [0-9,]* 件' new > .dislikes
	paste .views .likes .dislikes | awk -v L=$link -v D="$date" '
	    NF==8{printf "%s %s %9s %9s %9s\n", L, D, $1, $4, $7}'
    done
}
 
collect() {
    while true; do
        stats; sleep 75
    done | tee -a data.csv
}
 
dislikes() {
    list=$(cut -c1-44 data.csv | sort -u)
 
    for vid in $list; do   
        echo $vid
        grep ^$vid data.csv | awk '{
            DiffD=$6-D
            if (DiffD < 0) { 
                printf "%s %+7d\n", $3, DiffD 
                DLost+=DiffD
            }
            L=$5; D=$6
        } END {
            printf "%-19s %7d\n", "Total", DLost
        }' 
        echo
    done | awk '{
        print} $1=="Total" { GT+=$2 } 
        END { printf "%-17s %9d\n", "Grant Total", GT 
    }'
}
 
plot() {
    list=$(cut -c1-44 data.csv | sort -u)
    let n=0
 
    for vid in $list; do   
        let n++
        awk -v V=$vid '$1==V {print $2" "$4" "$5" "$6}' data.csv > plot.csv
 
        echo "set term png size 740,740
        set key top left
        set grid xtics ytics
        set title '$vid'
        set timefmt '%s'
        set xdata time
        set xtics format '%Hh'
        plot 'plot.csv' u 1:2 t 'Views'    w lines lc rgb 'black' lw 2,\
                     '' u 1:3 t 'Likes'    w lines lc rgb 'green' lw 2,\
                     '' u 1:4 t 'Dislikes' w lines lc rgb 'red'   lw 2
        " | gnuplot > example${n}.png 
    done
}

使い方

$source wh.sh;

とします。次に

$collect

とします。このプログラムは75秒間隔で情報をとってきます。
好きなときにCtrl-Dで止めます。

gnuplotが入ってたら

$plot

でグラフがかけます。

中身の解説

まず

list=$(curl -s 'https://www.youtube.com/c/WhiteHouse/videos' | grep -o 'watch?v=[^"]*')

でホワイトハウスのyoutubeチャンネルの動画一覧のリンクを得ます。
次にforループでそのリンクを巡回して

curl -s $link | tr -d ',' | tr '}' '\n' > new 

でそのリンクの情報をとってきます。
そして'grep'で狙っている情報を抜き取ります。

grep -m 1 -o '[0-9,]* 回視聴' new > .views
grep -m 1 -o '高評価 [0-9,]* 件' new > .likes
grep -m 1 -o '低評価 [0-9,]* 件' new > .dislikes

あとは表示を整えたり、ポストプロセスの情報処理の部分です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?