なんとなく

誰得感満載な記事が多いかも。Mono関係とLinuxのサーバ関係、レビューとか。

NHK Worldのラジオ日本を取得してみる

はじめに

最近ロシア語聞いてないなぁと思って、身近なところから結構意味が分かりそうな日本についての放送をと思って NHK Worldのラジオ日本のロシア語放送をLinuxで保存するスクリプトを書いてみた。

www3.nhk.or.jp

ニュースとその他の話題を20分程度で消化できるので、聴き始めている。

取得の方法を備忘録的に記しておく。 おそらく他言語もURIを少し変えれば同じ方法で対応できると思う。検証はしていないが。

NHK Worldのラジオ日本のロシア語放送について

NHK Worldのラジオ日本のロシア語放送の放送時間は、12:30、13:30、14:30、20:00、1:00、2:30に行われている。 内容は、2つに分かれていて、ニュースとそれ以外。それ以外はロシア人向けの日本語講座だったり日本の文化的なところとかいろいろな内容だ。 蛇足ではあるが、毎週月曜日のロシア人向けの日本語講座があり、ロシア人声優のジェーニャがロシア語を話しているのでちょっと面白かったりする。

データを取得するにあたって、観測したことろ、ニュースが更新されるのは1日2度で、12:30と20:00のようだ。 それ以外が更新されるのは1日1度で、13:00のようだ。

ニュースはポッドキャストで取得することができる。アーカイブはされていないようだ。 それ以外は、flvで配信されているようだ。また、それ以外の毎週月曜日の日本語講座は別にmp3で取得することができる。 アーカイブとして1ヶ月程度保存されているようだ。

ニュースの取得

それでは、ニュースの取得の取得方法についてである。 ポッドキャストで配信されているので、xmlを元に配信されているmp3のURLを取得する。

スクリプトは以下。

#!/bin/bash

SAVEPATH=/home/takeshich/nhkru/news

URIXML=`echo "cat /rss/channel/item/enclosure/@url" |xmllint --shell http://www3.nhk.or.jp/rj/podcast/rss/russian.xml`
URL=`echo ${URIXML} | sed -e "s/^.*url=\"\(.*\)\".*$/\1/"`

wget -nc -P ${SAVEPATH} ${URL}

処理としては、

  • ポッドキャスト向けのxmlを取得
  • URLを取得
  • ファイルを取得する。
  • cronで毎日12:45、20:15に定期実行

xmllintでxmlを解析して、sedでURLを整形、wgetで保存するフォルダを指定して保存。同名のファイルが有った場合は保存しないオプションをつけている。

12:45 20:15 ごろにサーバに更新されるようなので、このスクリプトをcrontabで13:00と20:30に実行するようにしている。

それ以外の取得。

それ以外は、rtmpプロトコルで配信されているのでrtmpdumpを使って取得する。

スクリプトは以下。

#!/bin/bash

RECDATE=`date '+%Y%m%d'`
HOMEPATH=/home/takeshich/nhkru/

rtmpdump -i rtmp://flv.nhk.or.jp/ondemand/mp4:flv/nhkworld/radio/program/russian/radio/update/${RECDATE}1300_ru_01.m4a | \
ffmpeg -y -i pipe:0 -acodec libmp3lame -ab 48k ${HOMEPATH}${RECDATE}1300_ru_01.mp3

処理としては、

  • rtmpdumpでm4aを取得
  • ffmpegでmp3に変換
  • cronで毎日13:30に実行。

rtmpdumpを使い、m4aで取得できるので、PCなどの環境であれば特に気にすることなく再生できるものと思われるが、 スクリプトにおいては取得しながらMP3に変換している。 当方の所持しているMP3プレイヤーではmp3のみしか再生できないためである。 m4aで良い場合は、pipe以降のffmpegで変換する処理は必要はない。

13:00ごろにサーバにに更新されるようなので、このスクリプトをcrontabで13:30に実行するようにしている。

rtmpdumpのバージョンとかでちょっとオプションが違ったりするかもしれないけど読み替えてほしい。 crontabに設定するときにPATHが通ってなくてうまく行かなかったりしたので、crontabのところで必要なPATHは通すこと。

それ以外のアーカイブを取得

それ以外のアーカイブが1ヶ月程度保存されているようなので、32日前から昨日までのそれ以外を取得してみる。

スクリプトは以下。

#!/bin/bash

HOMEPATH=/home/takeshich/nhkru/

for CNT in `seq 31 -1 1`
do
        RECDATE=`date --date "${CNT}"' day ago' +%Y%m%d`
        rtmpdump -i rtmp://flv.nhk.or.jp/ondemand/mp4:flv/nhkworld/radio/program/russian/radio/update/${RECDATE}1300_ru_01.m4a |\
        ffmpeg -y -i pipe:0 -acodec libmp3lame -ab 48k ${HOMEPATH}${RECDATE}1300_ru_01.mp3
        sleep 10
done

n日前の日付を取得して、URLを整形し、前述の処理を実行している。 スクリプト内では31から1まで1ずつデクリメントすることによって32日前から昨日までの日付を取得するようにしている。

それ以外の毎週月曜日の日本語講座の取得

それ以外の毎週月曜日の日本語講座はmp3で別ページに置いてある。テキストもPDFであるがロシア語なので省略。

www.nhk.or.jp

スクリプトは以下。

#!/bin/bash

URL=http://www.nhk.or.jp/lesson/russian/learn/mp3/
SAVEPATH=/home/takeshich/nhkru/lesson

for CNT in $(seq 1 32)
do
    wget -nc -P ${SAVEPATH} ${URL}`printf %02d $CNT`-ru-le_01.mp3
    sleep 5
done

mp3は、

http://www.nhk.or.jp/lesson/russian/learn/mp3/01-ru-le_01.mp3
http://www.nhk.or.jp/lesson/russian/learn/mp3/02-ru-le_01.mp3

のようなURIなので、01,02のところをインクリメントしてあげて取得する。 文字列で0埋め処理をしながら、URLを整形しwgetで取得している。