podsync 追加設定メモ 作成スクリプトの記録など。{“key”:”browse_id”,”value”:

 

2023-01-16(MO) 現在のスクリプト

取得エラー、rm削除、5秒ほど待って再取得としています。

再取得した後もファイル長が短い(ファイルには一度rmした記録があるが)=でもエラー?ならもう一度やり直し。

という事で、最大2回までrm,ダウンロードしなおし言う設定にしています。

 




#!/bin/bash
#easycheck_ver_0.1.1.20221016
cd `dirname $0`
target_dir=dir_folder_name
minimum_length=20
file_type=mp4
try_file=easycheck.txt
max_try_cnt=1
ymd_kizyun=`date --date '5 minutes ago' +%s`
ymd_kizyun_disp=`date -d @$ymd_kizyun +"%Y-%m-%d_%H:%M:%S"`
#再ダウンロード設定
DLD_COMMAND_COMMON="docker exec -i podsync_container ash -c "
DLD_URL_COMMON="https://www.youtube.com/watch?v="
#メール通知設定
SUBJECT="Podsync_easy_chk"
FROM_ADDR="from_mail_address@domain.com"
TO_ADDR="to_mail_address@domain.com"
LOG_TXT="easycheck.txt"
mail_send_flg=0


if [ ! -e $try_file ]; then
  echo -n >| $try_file
  echo "try_file=$try_file 作成しました。"
fi
idx=0
while read -r f; do
  echo "file: $f"
  extention=`echo $f | sed 's/^.*\.\([^\.]*\)$/\1/'`
  if [ $extention == $file_type ]
  then
      ymd_file=`date +%Y%m%d-%H%M%S -r $f` ; echo $ymd_file
      ymd_cmp_file=`date -r $f +%s` ; echo $ymd_cmp_file
      if [ $ymd_kizyun -lt $ymd_cmp_file ]; then # -lt : '<' echo "判定基準日より前" else echo "判定基準日を経過したので判定対象" duration=$(ffmpeg -i $f 2>&1 | grep Duration | awk '{print $2}' | tr -d ,)
            echo "再生時間="$duration
            duration_ARR=(${duration//:/ })
            tmp_hour=`echo $(( 10#${duration_ARR[0]} ))`
            tmp_minute=`echo $(( 10#${duration_ARR[1]} ))`
            duration_minute=$(( $tmp_hour * 60 + $tmp_minute ))
            #再生時間長で再取得候補に追加
            if (( "$duration_minute" < "$minimum_length" ))
            then
              # echo "c is less than d"
               echo "再取得候補追加"
               reget_arr[$idx]=$f
               idx=$((idx + 1))
            fi
      fi
  else
      echo "extention Not Equal"
  fi
#-mtimeで2日以内のファイルに対して新規判定とします。
done < <(find ./$target_dir  -mindepth 1 -maxdepth 1 -mtime -2)

#try_file内にあるもので判定不要なものをはじく。以前判定しているはず。
idx=0
match_flg=0
while read line
do
  line_ARR=(${line// / })
  for v in "${reget_arr[@]}"
  do
    match_flg=0
    if [ ${line_ARR[0]} = $v ]; then
      match_flg=1
      if (( "${line_ARR[1]}" < "$max_try_cnt" ))
      then
          file_match_arr[$idx]="${line_ARR[0]} $((line_ARR[1] + 1)) DEL $ymd_kizyun_disp"
          rm ${line_ARR[0]}
          mail_send_flg=1
          echo "${file_match_arr[$idx]}"
          #再ダウンロード指示を追加
            sleep 5
            TGT_DLD_DIR=`echo $(dirname ${line_ARR[0]}) | sed 's/\.\///'`
            DLD_FILE_NAME=`echo $(basename ${line_ARR[0]}) | sed 's/\.[^\.]*$//'`
            THIS_TIME_DLD_URL=$DLD_URL_COMMON$DLD_FILE_NAME
            DLD_OPTION="cd /app/data/$TGT_DLD_DIR && youtube-dl -f bestvideo[ext=mp4]+bestaudio[ext=m4a] -o '%(id)s' $THIS_TIME_DLD_URL"
            THIS_TIME_DLD_COMMAND=$DLD_COMMAND_COMMON'"'$DLD_OPTION'"'
            eval $THIS_TIME_DLD_COMMAND
          #再ダウンロード完了 
      else
           file_match_arr[$idx]="${line_ARR[0]} $((line_ARR[1])) ${line_ARR[2]} Max_tryed_no_need_to_del"
           echo "${file_match_arr[$idx]}"         
      fi
      idx=$((idx + 1))
      break
    fi
  done
  if [ ${match_flg} = 0 ]; then
      file_match_arr[$idx]="${line_ARR[0]} ${line_ARR[1]} ${line_ARR[2]} Previously_determined._No_need_this_time "
      echo "${file_match_arr[$idx]}"
      idx=$((idx + 1))
  fi
done < $try_file echo ${file_match_arr[@]} #ここまでで一回新規ファイルをまとめて作る。 rm $try_file echo -n >| $try_file
for match in "${file_match_arr[@]}"
do
        echo $match >> $try_file

done
#ファイルにはなかったけど、新規判定対象になるものをファイルに追加
for v in "${reget_arr[@]}"
do
        match_flg=0
        for match in "${file_match_arr[@]}"
        do
                match_ARR=(${match// / })
                if [ ${match_ARR[0]} = $v ]; then
                        match_flg=1
                        break
                fi
        done
        if [ ${match_flg} = 0 ]; then
                #DELとファイル追加
                echo "最初のDEL判定=0,最初のDEL=first"
                rm $v
                echo $v 0 first $ymd_kizyun_disp>> $try_file
                mail_send_flg=1
                #再ダウンロード指示を追加
                  sleep 5
                  TGT_DLD_DIR=`echo $(dirname ${v}) | sed 's/\.\///'`
                  DLD_FILE_NAME=`echo $(basename ${v}) | sed 's/\.[^\.]*$//'`
                  THIS_TIME_DLD_URL=$DLD_URL_COMMON$DLD_FILE_NAME
                  DLD_OPTION="cd /app/data/$TGT_DLD_DIR && youtube-dl -f bestvideo[ext=mp4]+bestaudio[ext=m4a] -o '%(id)s' $THIS_TIME_DLD_URL"
                  THIS_TIME_DLD_COMMAND=$DLD_COMMAND_COMMON'"'$DLD_OPTION'"'
                  eval $THIS_TIME_DLD_COMMAND
                #再ダウンロード完了
        fi
done



if [ ${mail_send_flg} != 0 ]; then
 cat -v $LOG_TXT | mail -s $SUBJECT -r $FROM_ADDR $TO_ADDR
fi

                                                                                                                                                  1,1          先頭

 

 

2023-01-16(MO) ダウンロードエラーを判定して知らせる機能だけではなく、再度ダウンロードするように設定を変更

easycheck.txt で取得失敗、削除したリストを送ってきているわけですが、その後もう一度取得しなおしてくれた方が良い。

DLし直すのは以下のような感じで可能そうでした。

私の設定ではDockerのコンテナ内のyt-dlpを使っています。

一応5秒ほど待ってから実行します。確実に削除出来た後。

パスから保存Dir,保存File名を設定して再取得しています。

 



#!/bin/bash

DLD_COMMAND_COMMON="docker exec -i podsync_container ash -c "
DLD_URL_COMMON="https://www.youtube.com/watch?v="


STR="./dir_to/filename.mp4"
sleep 5
TGT_DLD_DIR=`echo $(dirname ${STR}) | sed 's/\.\///'`
DLD_FILE_NAME=`echo $(basename ${STR}) | sed 's/\.[^\.]*$//'`
THIS_TIME_DLD_URL=$DLD_URL_COMMON$DLD_FILE_NAME
DLD_OPTION="cd /app/data/$TGT_DLD_DIR && youtube-dl -f bestvideo[ext=mp4]+bestaudio[ext=m4a] -o '%(id)s' $THIS_TIME_DLD_URL"
THIS_TIME_DLD_COMMAND=$DLD_COMMAND_COMMON'"'$DLD_OPTION'"'
eval $THIS_TIME_DLD_COMMAND


 

 

2022-10-19(WE)プレミア公開カウントダウン、どうも14分以上取得してしまうようだ。

 

設定を以下に変更して様子を見ます。
minimum_length=15

 

 

2022-10-17(MO)取得しなおすとき(DELする時とか)に、メールで通知するよう変更

 




#以下を頭に追加。
SUBJECT="Podsync_easy_chk"
FROM_ADDR="アドレス"
TO_ADDR="アドレス"
LOG_TXT="easycheck.txt"
mail_send_flg=0



#変更、追加箇所
          file_match_arr[$idx]="${line_ARR[0]} $((line_ARR[1] + 1)) DEL $ymd_kizyun_disp"
          rm ${line_ARR[0]}
          mail_send_flg=1
          
          file_match_arr[$idx]="${line_ARR[0]} $((line_ARR[1])) ${line_ARR[3]} max_try"
          mail_send_flg=1

          echo $v 0 first $ymd_kizyun_disp>> $try_file
          mail_send_flg=1

#最後に追加
if [ ${mail_send_flg} != 0 ]; then
 cat -v $LOG_TXT | mail -s $SUBJECT -r $FROM_ADDR $TO_ADDR
fi


 

 

2022-10-17(MO)実行時間を記録するように変更


easycheck_ver_0.1.1.20221016


変更、追加
ymd_kizyun=`date --date '5 minutes ago' +%s`
ymd_kizyun_disp=`date -d @$ymd_kizyun +"%Y-%m-%d_%H:%M:%S"` #追加




変更前
file_match_arr[$idx]="${line_ARR[0]} $((line_ARR[1] + 1)) DEL"

file_match_arr[$idx]="${line_ARR[0]} $((line_ARR[1])) max_try"

file_match_arr[$idx]="${line_ARR[0]} ${line_ARR[1]} no_need "

echo $v 0 >> $try_file






変更後
file_match_arr[$idx]="${line_ARR[0]} $((line_ARR[1] + 1)) DEL $ymd_kizyun_disp"

file_match_arr[$idx]="${line_ARR[0]} $((line_ARR[1])) ${line_ARR[3]} max_try"

file_match_arr[$idx]="${line_ARR[0]} ${line_ARR[1]} ${line_ARR[3]} no_need "

echo $v 0 first $ymd_kizyun_disp>> $try_file




 

2022-10-16 1時間以上ある場合を考慮していなかった

バグ対応

#ver 0.1.1.20221016



duration=$(ffmpeg -i $f 2>&1 | grep Duration | awk '{print $2}' | tr -d ,)
            echo "再生時間="$duration
            duration_ARR=(${duration//:/ })
#10進数にして計算する。01とか、09とか頭に0が付いているかもしれないから。
            tmp_hour=`echo $(( 10#${duration_ARR[0]} ))`
            tmp_minute=`echo $(( 10#${duration_ARR[1]} ))`
            duration_minute=$(( $tmp_hour * 60 + $tmp_minute ))
#            if (( "${duration_ARR[1]}" < "$minimum_length" ))
            if (( "$duration_minute" < "$minimum_length" ))
            


2022-10-13 再生時間、トライの数で判定。再取得

 

取りあえずやっつけだが、何度取得してもできないこともあるかもしれない。

それを想定して3回で取得を諦める設定にした。

取りあえず諦めるだけで通知は無い。そのうち必要になるかも。

でも取りあえずこれで問題なければこのまま放置すると思う。

10分以内の動画なら途中でおかしくなっているという判定で再取得。削除すれば勝手にとってくれるかなと。

一応ログっぽいファイルを作ることにする。本当にやっつけなのでコメントとか思いっきり残っているが。

 



#!/bin/bash
cd `dirname $0`
target_dir=対象のフォルダ
minimum_length=10
file_type=mp4
try_file=easycheck.txt
max_try_cnt=2
ymd_kizyun=`date --date '5 minutes ago' +%s`

if [ ! -e $try_file ]; then
  echo -n >| $try_file
  echo "try_file=$try_file 作成しました。"
fi
idx=0
while read -r f; do
  echo "file: $f"
  extention=`echo $f | sed 's/^.*\.\([^\.]*\)$/\1/'`
  if [ $extention == $file_type ]
  then
      ymd_file=`date +%Y%m%d-%H%M%S -r $f` ; echo $ymd_file
      ymd_cmp_file=`date -r $f +%s` ; echo $ymd_cmp_file
      if [ $ymd_kizyun -lt $ymd_cmp_file ]; then # -lt : '<' echo "まだ基準日より前" else echo "基準日を過ぎた" duration=$(ffmpeg -i $f 2>&1 | grep Duration | awk '{print $2}' | tr -d ,)
            echo "再生時間="$duration
            duration_ARR=(${duration//:/ })
            if (( "${duration_ARR[1]}" < "$minimum_length" ))
            then
               echo "再取得候補追加"
               reget_arr[$idx]=$f
               idx=$((idx + 1))
            fi
      fi
  else
      echo "extention Not Equal"
  fi
done < <(find ./$target_dir  -mindepth 1 -maxdepth 1 -mtime -2)
#ファイル内にあるもので判定不要なものをはじく
idx=0
match_flg=0
while read line
do

  line_ARR=(${line// / })
  for v in "${reget_arr[@]}"
  do
    match_flg=0
    if [ ${line_ARR[0]} = $v ]; then
      match_flg=1
      if (( "${line_ARR[1]}" < "$max_try_cnt" ))
      then
          file_match_arr[$idx]="${line_ARR[0]} $((line_ARR[1] + 1)) DEL"
          rm ${line_ARR[0]}
          echo "${file_match_arr[$idx]}" 
      else
           file_match_arr[$idx]="${line_ARR[0]} $((line_ARR[1])) max_try"
           echo "${file_match_arr[$idx]}"         
      fi
      idx=$((idx + 1))
      break
    fi
  done
  if [ ${match_flg} = 0 ]; then
      file_match_arr[$idx]="${line_ARR[0]} ${line_ARR[1]} no_need "
      echo "${file_match_arr[$idx]}"
      idx=$((idx + 1))
  fi
done < $try_file echo ${file_match_arr[@]} #ここまでで一回新規ファイルを作る。 rm $try_file echo -n >| $try_file
for match in "${file_match_arr[@]}"
do
        echo $match >> $try_file

done
#新規でファイルに追加しないと
for v in "${reget_arr[@]}"
do
        match_flg=0
        for match in "${file_match_arr[@]}"
        do
                match_ARR=(${match// / })
                if [ ${match_ARR[0]} = $v ]; then
                        match_flg=1
                        break
                fi
        done
        if [ ${match_flg} = 0 ]; then
                #DELとファイル追加
                echo "新規del"
                rm $v
                echo $v 0 >> $try_file
        fi
done



 

2022-10-10 たまたま今のところうまく行っているけど、作りかけたので記録。

とりあえずファイルの取得



#!/bin/bash

target_dir=対象のディレクトリ

while read -r f; do
  echo "file: $f"
  ymd=`date +%Y%m%d -r $f` ; echo $ymd
  ffmpeg -i $f 2>&1 | grep Duration | awk '{print $2}' | tr -d ,
done < <(find ./$target_dir  -mindepth 1 -maxdepth 1 -mtime -2)


2022-10-08 公開時間の間際での取得だとおかしな動画になってしまう対応

 

要は間もなく公開状態の時に取得してしまうと、不完全なのに取得完了と認識されてしまう。

恐らく不完全なファイルを削除して取得しなおせばいいのではないか?

たしかファイルが無い状態だともう一度取得してくれるはずなので、単純にファイル容量から判定して削除してやれば再び取得してくれるかなと。

でも何度かチャレンジしてそれでもダメだったときはあきらめてもらわないと困る。

あと、チャレンジしたならその旨を通知して欲しい。メールとかで。

この辺を盛り込んでスクリプトを作るかもしれない。

取りあえずサイズの小さいファイルがおかしいかどうか検証してみます。

 

 

2022-07-06

https://www.youtube.com/c/xxxxxxxx

のようなアドレスだと取得できていない用でした。

ソースを表示して、{“key”:”browse_id”,”value”:

等で検索。

,{“key”:”browse_id”,”value”:”aaaaaaaaaaaaaaaaaaaa”},

などが分かる。

https://www.youtube.com/channel/aaaaaaaaaaaaaaaaaaa

などでpodsync側に登録すると正常に取れるようでした。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です