과거 쎈호스팅에서 mp3를 다운로드를 제공했었는데, 팟빵 앱으로 접근하지 않는 사용자들을 제약하려고 주소를 옮겼다. 겨우 찾았는데, 쎈호스팅과 과학과사람들이 어떤 일을 했는지 이후 다운로드 서비스도 하고 있지 않았다. 귀찮아 방치했는데, 하드디스크로 바꾼 기념으로 찾아보니, 홈페이지가 rss를 제공하고 있었다.
bash로 xml을 parsing하기 힘들어 xpath 도움을 받았다. xpath를 쓰지 않았을 때 정규표현식으로 억지로 뽑아냈다. xmllint도 있는데, 맨 처음 한 개만 제대로 출력하고 이 후 정보를 무시해버려 시간만 날렸다. 몇 시간 노가다 끝에 다음 방식으로 정리했다. 과거 노가다보다 훨씬 정확하고 보람차다.
#!/bin/bash #cron을 위한 cd cd ??? echo "TEDTalks Downloader v0.1" echo "by Denver Gingerich (http://ossguy.com/)" which wget if [ $? -eq 0 ]; then echo "Using wget..." GET_CMD="wget --quiet -O" else which curl if [ $? -eq 0 ]; then echo "Using curl..." GET_CMD="curl -L -o" else echo "Could not find wget or curl" exit 2 fi fi FEED=feed_podcast.xml URLS=urls_podcast DIRNAME=파토의과학 rm -f ${FEED} rm -f ${URLS} #podcast_address=http://www.podbbang.com/ch/6205 podcast_address=https://feeds.feedburner.com/sciencewithpeople ${GET_CMD} ${FEED} ${podcast_address} #xpath #get nth item #xpath -e "//rss/channel/item[position()=2]/title" temp2.txt patoCouter=10; #과학과사람들fileInfo.txt 만듦. #filename, path, title, 업데이트일 순으로 정리 for i in $(seq 1 $patoCouter); do #echo $i title=$(xpath -q -e "//rss/channel/item[position()=$i]/title" ${FEED}) title2=$(echo $title | sed 's/<title>//g' | sed 's/<\/title>//') title3=$(echo $title2 | sed 's/ / /g' | sed 's/,/_/g') #echo $title3 fileTmp=$(xpath -q -e "//rss/channel/item[position()=$i]/enclosure" ${FEED}) file=$(echo $fileTmp | cut -d'"' -f2) #echo $file pubTmp=$(xpath -q -e "//rss/channel/item[position()=$i]/pubDate" ${FEED}) pub=$(echo $pubTmp| sed 's/<pubDate>//g' | sed 's/<\/pubDate>//'| cut -d',' -f2 | cut -d' ' -f1-4 | sed 's/^ //g') #monthtmp=$(echo $pub | cut -d'-' -f2) #daytmp=$(echo $pub | cut -d'-' -f1) #yeartmp=$(echo $pub | cut -d'-' -f3) #echo $pubTmp echo $pub #echo $monthtmp #from #https://www.unix.com/shell-programming-and-scripting/191527-converting-month-into-integer.html #M=1 #for X in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec #do # [ "$monthtmp" = "$X" ] && break # M=`expr $M + 1` #done #myeardate=$(date --date="$(printf "%s" $yeartmp-$M-$daytmp)" +"%Y-%m-%d") #echo $myeardate printf "$title3" >> ${URLS} printf "," >> ${URLS} printf "$file" >> ${URLS} printf "," >> ${URLS} printf "$pub" >> ${URLS} printf "\n" >> ${URLS} done cp ${URLS} ${DIRNAME}/파토가과학하고앉아있네FileAndTitle.txt mkdir -p ${DIRNAME} cd ${DIRNAME} for line in $(cat ../${URLS} | cut -d',' -f2); do URL=$(echo ${line} | cut -d',' -f2) FILENAME=`basename ${URL}|tr -d '\r'` if [ ! -f "${FILENAME}" ]; then # || [ ${SIZE} -ne `ls -l "${FILENAME}" | awk '{print $5}'` ]; then rm -f "${FILENAME}" ${GET_CMD} "${FILENAME}" "${URL}" fi done
plex media server가 정확하게 인식하도록 id3 태그를 각 파일에 입력했다.
now0930@gen8:파토의과학$ ls -t 파토가과학하고앉아있네FileAndTitle.txt 174371_1619141878558.mp3 174371_1621561758166.mp3 174371_1616052641424.mp3 174371_1617934621403.mp3 174371_1620965968488.mp3 details.txt 174371_1616979006251.mp3 174371_1620359306326.mp3 174371_1622166509979.mp3 174371_1618471405918.mp3 174371_1617304165488.mp3 conver.jpg
파토가과학하고앉아있네FileAndTitle.txt 파일은 id3를 입력할 수 있는 파일, 태그, 날자 데이터다.
now0930@gen8:파토의과학$ cat 파토가과학하고앉아있네FileAndTitle.txt | head -10 삼테성즈 S7E04 반도체 대란_ KF21 핵심기술 그리고 게임의 역사2!,https://cdn-cf.podty.me/meta/episode_audio/22286/174371_1622166509979.mp3,28 May 2021 과학하고 앉아있네 S7E04 K박사 완전 복귀 특집! 암흑의 물질과 K박사의 어두운 미래,https://cdn-cf.podty.me/meta/episode_audio/22286/174371_1621561758166.mp3,21 May 2021 격동 500년! S7E04 세계적인 나비박사 석주명 선생!,https://cdn-cf.podty.me/meta/episode_audio/22286/174371_1620965968488.mp3,14 May 2021 뉴스룸! S7E04 생명연장의 시간표_ 그리고 나의 뇌를 다스리자! feat. 카이스트 김대수 교수,https://cdn-cf.podty.me/meta/episode_audio/22286/174371_1620359306326.mp3,07 May 2021 삼테성즈 S7E03 화제의 메타버스 특집! Feat. 강원대 김상균 교수,https://cdn-cf.podty.me/meta/episode_audio/22286/174371_1619141878558.mp3,23 Apr 2021 과학하고 앉아있네 S7E03 빛은 뭐고 LCD는 뭐고 OLED는 또 뭐냐? feat. 한림대 고재현 교수,https://cdn-cf.podty.me/meta/episode_audio/22286/174371_1618471405918.mp3,16 Apr 2021 격동 500년! S7E03 태양의 정체를 밝히다! 세실리아 페인.,https://cdn-cf.podty.me/meta/episode_audio/22286/174371_1617934621403.mp3,09 Apr 2021 뉴스룸! S7E03 화성 퍼시비어런스 엠바고 속보! 그리고 자연계 5번째의 힘 발견? feat. 박인규 교수,https://cdn-cf.podty.me/meta/episode_audio/22286/174371_1617304165488.mp3,02 Apr 2021 (음질보정재업) 삼테성즈! S7E02 딥페이크_ 전기자동차_ NFT_ 비디오게임. Feat. K2박사_ 최팀장,https://cdn-cf.podty.me/meta/episode_audio/22286/174371_1616979006251.mp3,28 Mar 2021 과학하고 앉아있네 S7E02 코로나백신 완전 털기! feat. 남재환 교수_ 김연희 기자,https://cdn-cf.podty.me/meta/episode_audio/22286/174371_1616052641424.mp3,19 Mar 2021
details.txt 파일은 각 디렉토리별 어떻게 입력할지 대한 규칙이다. 각 폴더마다 스크립트를 다르게 사용할 수 없어, details.txt로 각 폴더 규칙을 정리했다.
now0930@gen8:파토의과학$ cat details.txt SONGEXP $(cat $EXTRAINFO | grep $FILE | cut -d',' -f1) tmpSONGEXP $(cat $EXTRAINFO | grep $FILE | cut -d$'\t' -f2) ARTISTEXP "파토" ALBUMEXP "파토가과학하고앉아있네" mYearDateEXPtmp "2020-1-1" mYearDateEXP $(cat $EXTRAINFO | grep $FILE | cut -d',' -f3) GENREEXP "팟캐스트" FILETYPE "mp3" PODCASTFILE 파토가과학하고앉아있네FileAndTitle.txt
id3를 업데이트 하는 스크립트를 실행하면 각 폴더에 설정한 details.txt를 읽어 업데이트 한다. 이전에 이 내용을 포스트했다. 다 하고나니 이렇게까지 해야 하나 싶다. 관리하기 참 까다롭다. plex media server 스캐너까지 관리하고 싶은데, 어떻게 하는지 모르겠다. 모두 하면 다음과 같이 관리할 수 있다.