EPGStation での録画ファイル管理。
「EPGStation で WebAPI を使って余分な TS ファイルを削除」
https://qiita.com/nanbuwks/items/bab77ef5c61b5e74c905
を応用して、 python で EPGStation の録画ファイルをキーワード削除するようにしてみます。
環境
- Version of EPGStation: 2.6.20
- Version of Mirakurun: 3.9.0-rc.2
- OS:Ubuntu Linux 20.04
- Architecture: x64
「PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい」
https://qiita.com/nanbuwks/items/640ee4405e1fdd2ca497
こちらで構築したものです。
作戦
- 録画リスト取得
- 不要な録画ファイルがあるか判定
- 不要な録画ファイルを削除
録画リスト取得、不要な録画ファイルがあるか判定
以下のようにして取得
$ curl -X 'GET' 'http://192.168.42.100:8888/api/recorded?isHalfWidth=false&offset=0&limit=24&isReverse=true&keyword=%E5%88%97%E5%B3%B6%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&hasOriginalFile=false' -H 'accept: application/json'
取得したもの
{"records":[{"id":50,"channelId":3273601024,"startAt":1661486700000,"endAt":1661489700000,"name":"列島ニュース[字]","isRecording":false,"isEncoding":false,"isProtected":false,"programId":327360102401403,"description":"日本列島の今が見える!NHKが地域向けに放送しているお昼のニュースを選(え)りすぐって大阪から全国に発信。地域の課題や郷土の話題を盛りだくさんでお届けします。","extended":"◇番組内容\n「列島各地の地域ニュースを選りすぐって大阪から全国に発信します」。全国に54あるNHKの各放送局が取材して地域向けに放送したお昼のニュースから地域の課題、地元ならではの話題などを集めて盛りだくさんでお伝えします。今年度は中継で結んで現地の放送局から伝える「列島ニュースアップ」と「NHK NEWS WEB」に掲載された特集記事を紹介するコーナーを新たに開始!ライブ感とネット連携を強化してお届けします\n◇出演者\n【キャスター】武田真一,伊藤雄彦,二宮直輝,牛田茉友,一柳亜矢子,【気象予報士】坂下恵理","genre1":0,"subGenre1":0,"videoType":"mpeg2","videoResolution":"1080i","videoStreamContent":1,"videoComponentType":179,"audioSamplingRate":48000,"audioComponentType":1,"thumbnails":[48],"videoFiles":[{"id":13451,"name":"H.264","filename":"2022年08月26日13時05分00秒-列島ニュース[字].mp4","type":"encoded","size":80505197}]}],"total":1}
この中の
- "id":50,"
を指定して、録画を削除する。
不要な録画を削除
$ curl -X 'DELETE' 'http://192.168.42.100:8888/api/recorded/50' -H 'accept: application/json'
これに対し、帰ってきた返答は
{"code":200}
うまくいったようです。
pythonプログラム
上記の操作を元に、以下のプログラムを作りました。
#import requests
import sys
import urllib.parse
import urllib.request
import json
import time
# limit を適宜変更のこと
urlget = "http://192.168.42.100:8888/api/recorded?isHalfWidth=false&offset=0&limit=10000&keyword="+urllib.parse.quote(sys.argv[1])
urldelete = "http://192.168.42.100:8888/api/recorded/"
# 録画一覧を表示
# 録画一覧を得る
response = urllib.request.urlopen(urlget)
jsonData = json.load(response)
# 録画ごとにループ
for jsonObj in jsonData["records"]:
# "videoFilesを取り出し
for videoFileObj in jsonObj["videoFiles"]:
name=videoFileObj["filename"]
print(":",name)
yesno = input("Delete Files. OK? [y/N]: ").lower()
if yesno in ['y', 'ye', 'yes']:
# 削除実行
# 録画一覧を得る
response = urllib.request.urlopen(urlget)
jsonData = json.load(response)
# 録画ごとにループ
for jsonObj in jsonData["records"]:
# "録画IDを取り出し
id=jsonObj["id"]
url=urldelete+str(id)
headers = {"Content-Type": "application/json"}
res=urllib.request.Request(url,json.dumps(jsonObj).encode(),headers,method="DELETE")
try:
with urllib.request.urlopen(res) as f:
pass
print(f.status,end="")
if (200==f.status):
print(" DELETE",end="")
print(":",id)
else:
print(" Error",end=" ")
print(f.reason)
print(" at:",nameTs)
except urllib.error.HTTPError as err:
print(" Error",end=" ")
print(err.code,end=" ")
print("at:",id)
except urllib.error.URLError as err:
print(" Error",end="")
print(err.reason)
print("at:",id)
実行
$ python3 deleteepgstation.py おはよう日本
合致するリストが出てきます。
: 2022年08月28日07時40分00秒-NHKニュース おはよう日本(関東甲信越)[字].mp4
: 2022年08月28日07時00分00秒-NHKニュース おはよう日本 夏休み明け子どもの悩み▽「魔球」の謎[字].mp4
まずはキャンセルして
Delete Files. OK? [y/N]: n
再度絞り込んで指定します。
$ python3 deleteepgstation.py おはよう日本(関東甲信越)
該当が出てきたのでこれを削除します
: 2022年08月28日07時40分00秒-NHKニュース おはよう日本(関東甲信越)[字].mp4
Delete Files. OK? [y/N]: y
うまく削除できました。
200 DELETE: 110