diff --git a/server/app/models/Program.py b/server/app/models/Program.py index 810d4735..32423bf6 100644 --- a/server/app/models/Program.py +++ b/server/app/models/Program.py @@ -402,25 +402,29 @@ def MillisecondToDatetime(millisecond: int) -> datetime: if 'genres' in program_info: for genre in program_info['genres']: # ジャンルごとに - # major … 大分類 - # middle … 中分類 - genre_dict: Genre = { - 'major': ariblib.constants.CONTENT_TYPE[genre['lv1']][0].replace('/', '・'), - 'middle': ariblib.constants.CONTENT_TYPE[genre['lv1']][1][genre['lv2']].replace('/', '・'), - } - - # BS/地上デジタル放送用番組付属情報がジャンルに含まれている場合、user_nibble から値を取得して書き換える - # たとえば「中止の可能性あり」や「延長の可能性あり」といった情報が取れる - if genre_dict['major'] == '拡張': - if genre_dict['middle'] == 'BS/地上デジタル放送用番組付属情報': - user_nibble = (genre['un1'] * 0x10) + genre['un2'] - genre_dict['middle'] = ariblib.constants.USER_TYPE.get(user_nibble, '') - # 「拡張」はあるがBS/地上デジタル放送用番組付属情報でない場合はなんの値なのかわからないのでパス - else: - continue + # 大まかなジャンルを取得 + genre_tuple = ariblib.constants.CONTENT_TYPE.get(genre['lv1']) + if genre_tuple is not None: + + # major … 大分類 + # middle … 中分類 + genre_dict: Genre = { + 'major': genre_tuple[0].replace('/', '・'), + 'middle': genre_tuple[1].get(genre['lv2'], '未定義').replace('/', '・'), + } + + # BS/地上デジタル放送用番組付属情報がジャンルに含まれている場合、user_nibble から値を取得して書き換える + # たとえば「中止の可能性あり」や「延長の可能性あり」といった情報が取れる + if genre_dict['major'] == '拡張': + if genre_dict['middle'] == 'BS/地上デジタル放送用番組付属情報': + user_nibble = (genre['un1'] * 0x10) + genre['un2'] + genre_dict['middle'] = ariblib.constants.USER_TYPE.get(user_nibble, '未定義') + # 「拡張」はあるがBS/地上デジタル放送用番組付属情報でない場合はなんの値なのかわからないのでパス + else: + continue - # ジャンルを追加 - program.genres.append(genre_dict) + # ジャンルを追加 + program.genres.append(genre_dict) # 番組情報をデータベースに保存する if duplicate_program is None: @@ -682,7 +686,7 @@ async def updateFromEDCB(cls, is_running_multiprocess: bool = False) -> None: # middle … 中分類 genre_dict: Genre = { 'major': genre_tuple[0].replace('/', '・'), - 'middle': genre_tuple[1].get(content_data['content_nibble'] & 0xf, '').replace('/', '・'), + 'middle': genre_tuple[1].get(content_data['content_nibble'] & 0xf, '未定義').replace('/', '・'), } # BS/地上デジタル放送用番組付属情報がジャンルに含まれている場合、user_nibble から値を取得して書き換える @@ -690,7 +694,7 @@ async def updateFromEDCB(cls, is_running_multiprocess: bool = False) -> None: if genre_dict['major'] == '拡張': if genre_dict['middle'] == 'BS/地上デジタル放送用番組付属情報': user_nibble = (content_data['user_nibble'] >> 8 << 4) | (content_data['user_nibble'] & 0xf) - genre_dict['middle'] = ariblib.constants.USER_TYPE.get(user_nibble, '') + genre_dict['middle'] = ariblib.constants.USER_TYPE.get(user_nibble, '未定義') # 「拡張」はあるがBS/地上デジタル放送用番組付属情報でない場合はなんの値なのかわからないのでパス else: continue