2022-12-07 19:09:05 -05:00
|
|
|
|
from django.test import TestCase
|
2023-07-19 11:12:58 -04:00
|
|
|
|
|
2022-12-07 19:09:05 -05:00
|
|
|
|
from catalog.common import *
|
2023-06-05 02:04:52 -04:00
|
|
|
|
from catalog.common.sites import crawl_related_resources_task
|
2022-12-07 19:09:05 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DoubanDramaTestCase(TestCase):
|
2024-07-13 00:16:47 -04:00
|
|
|
|
databases = "__all__"
|
|
|
|
|
|
2022-12-07 19:09:05 -05:00
|
|
|
|
def setUp(self):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def test_parse(self):
|
2022-12-29 23:57:02 -05:00
|
|
|
|
t_id = "24849279"
|
|
|
|
|
t_url = "https://www.douban.com/location/drama/24849279/"
|
2023-07-19 11:12:58 -04:00
|
|
|
|
t_url2 = (
|
|
|
|
|
"https://www.douban.com/doubanapp/dispatch?uri=/drama/24849279/&dt_dapp=1"
|
|
|
|
|
)
|
2023-06-05 10:06:16 -04:00
|
|
|
|
p1 = SiteManager.get_site_cls_by_id_type(IdType.DoubanDrama)
|
2022-12-07 19:09:05 -05:00
|
|
|
|
self.assertIsNotNone(p1)
|
2022-12-15 17:29:35 -05:00
|
|
|
|
p1 = SiteManager.get_site_by_url(t_url)
|
2022-12-07 19:09:05 -05:00
|
|
|
|
self.assertIsNotNone(p1)
|
|
|
|
|
self.assertEqual(p1.validate_url(t_url), True)
|
|
|
|
|
self.assertEqual(p1.id_to_url(t_id), t_url)
|
|
|
|
|
self.assertEqual(p1.url_to_id(t_url), t_id)
|
2023-07-19 11:12:58 -04:00
|
|
|
|
self.assertEqual(p1.url_to_id(t_url2), t_id)
|
2022-12-07 19:09:05 -05:00
|
|
|
|
|
|
|
|
|
@use_local_response
|
|
|
|
|
def test_scrape(self):
|
2023-02-15 23:45:12 -05:00
|
|
|
|
t_url = "https://www.douban.com/location/drama/25883969/"
|
|
|
|
|
site = SiteManager.get_site_by_url(t_url)
|
|
|
|
|
resource = site.get_resource_ready()
|
|
|
|
|
item = site.get_item()
|
2024-06-02 14:50:07 -04:00
|
|
|
|
self.assertEqual(
|
2024-07-13 00:16:47 -04:00
|
|
|
|
item.display_title, "眠らない男・ナポレオン ―愛と栄光の涯(はて)に―"
|
2024-06-02 14:50:07 -04:00
|
|
|
|
)
|
2024-07-13 00:16:47 -04:00
|
|
|
|
self.assertEqual(len(item.localized_title), 2)
|
2023-02-15 23:45:12 -05:00
|
|
|
|
self.assertEqual(item.genre, ["音乐剧"])
|
|
|
|
|
self.assertEqual(item.troupe, ["宝塚歌剧团"])
|
|
|
|
|
self.assertEqual(item.composer, ["ジェラール・プレスギュルヴィック"])
|
|
|
|
|
|
|
|
|
|
t_url = "https://www.douban.com/location/drama/20270776/"
|
|
|
|
|
site = SiteManager.get_site_by_url(t_url)
|
|
|
|
|
resource = site.get_resource_ready()
|
|
|
|
|
item = site.get_item()
|
2024-07-13 00:16:47 -04:00
|
|
|
|
self.assertEqual(item.display_title, "相聲說垮鬼子們")
|
2023-02-15 23:45:12 -05:00
|
|
|
|
self.assertEqual(item.opening_date, "1997-05")
|
2023-06-05 02:04:52 -04:00
|
|
|
|
self.assertEqual(item.location, ["臺北新舞臺"])
|
2023-02-15 23:45:12 -05:00
|
|
|
|
|
|
|
|
|
t_url = "https://www.douban.com/location/drama/24311571/"
|
|
|
|
|
site = SiteManager.get_site_by_url(t_url)
|
2023-06-05 02:04:52 -04:00
|
|
|
|
if site is None:
|
|
|
|
|
raise ValueError()
|
2023-02-15 23:45:12 -05:00
|
|
|
|
resource = site.get_resource_ready()
|
|
|
|
|
item = site.get_item()
|
2023-06-05 02:04:52 -04:00
|
|
|
|
if item is None:
|
|
|
|
|
raise ValueError()
|
|
|
|
|
self.assertEqual(item.orig_title, "Iphigenie auf Tauris")
|
2024-07-13 00:16:47 -04:00
|
|
|
|
self.assertEqual(len(item.localized_title), 3)
|
2023-02-15 23:45:12 -05:00
|
|
|
|
self.assertEqual(item.opening_date, "1974-04-21")
|
|
|
|
|
self.assertEqual(item.choreographer, ["Pina Bausch"])
|
|
|
|
|
|
2022-12-29 23:57:02 -05:00
|
|
|
|
t_url = "https://www.douban.com/location/drama/24849279/"
|
2022-12-15 17:29:35 -05:00
|
|
|
|
site = SiteManager.get_site_by_url(t_url)
|
2022-12-07 19:09:05 -05:00
|
|
|
|
self.assertEqual(site.ready, False)
|
2022-12-08 16:08:59 +00:00
|
|
|
|
resource = site.get_resource_ready()
|
2022-12-07 19:09:05 -05:00
|
|
|
|
self.assertEqual(site.ready, True)
|
2022-12-29 23:57:02 -05:00
|
|
|
|
self.assertEqual(resource.metadata["title"], "红花侠")
|
2023-06-05 02:04:52 -04:00
|
|
|
|
self.assertEqual(resource.metadata["orig_title"], "スカーレットピンパーネル")
|
2022-12-07 19:09:05 -05:00
|
|
|
|
item = site.get_item()
|
2023-06-05 02:04:52 -04:00
|
|
|
|
if item is None:
|
|
|
|
|
raise ValueError()
|
2024-07-13 00:16:47 -04:00
|
|
|
|
self.assertEqual(item.display_title, "THE SCARLET PIMPERNEL")
|
|
|
|
|
self.assertEqual(len(item.localized_title), 3)
|
|
|
|
|
self.assertEqual(len(item.display_description), 545)
|
2023-02-15 23:45:12 -05:00
|
|
|
|
self.assertEqual(item.genre, ["音乐剧"])
|
2023-06-05 02:04:52 -04:00
|
|
|
|
# self.assertEqual(
|
|
|
|
|
# item.version, ["08星组公演版", "10年月組公演版", "17年星組公演版", "ュージカル(2017年)版"]
|
|
|
|
|
# )
|
2023-02-15 23:45:12 -05:00
|
|
|
|
self.assertEqual(item.director, ["小池修一郎", "小池 修一郎", "石丸さち子"])
|
2024-06-02 14:50:07 -04:00
|
|
|
|
self.assertEqual(
|
|
|
|
|
item.playwright, ["小池修一郎", "Baroness Orczy(原作)", "小池 修一郎"]
|
|
|
|
|
)
|
2023-06-05 17:22:34 -04:00
|
|
|
|
self.assertEqual(
|
2024-07-13 00:16:47 -04:00
|
|
|
|
sorted(item.actor, key=lambda a: a["name"]),
|
2023-06-05 17:22:34 -04:00
|
|
|
|
[
|
|
|
|
|
{"name": "安蘭けい", "role": ""},
|
|
|
|
|
{"name": "柚希礼音", "role": ""},
|
|
|
|
|
{"name": "遠野あすか", "role": ""},
|
|
|
|
|
{"name": "霧矢大夢", "role": ""},
|
|
|
|
|
{"name": "龍真咲", "role": ""},
|
|
|
|
|
],
|
|
|
|
|
)
|
2023-06-05 02:04:52 -04:00
|
|
|
|
self.assertEqual(len(resource.related_resources), 4)
|
|
|
|
|
crawl_related_resources_task(resource.id) # force the async job to run now
|
2024-07-13 01:36:18 -04:00
|
|
|
|
productions = sorted(list(item.productions.all()), key=lambda p: p.opening_date)
|
2023-06-05 02:04:52 -04:00
|
|
|
|
self.assertEqual(len(productions), 4)
|
2023-06-05 17:22:34 -04:00
|
|
|
|
self.assertEqual(
|
|
|
|
|
productions[3].actor,
|
|
|
|
|
[
|
|
|
|
|
{"name": "石丸幹二", "role": "パーシー・ブレイクニー"},
|
|
|
|
|
{"name": "石井一孝", "role": "ショーヴラン"},
|
|
|
|
|
{"name": "安蘭けい", "role": "マルグリット・サン・ジュスト"},
|
|
|
|
|
{"name": "上原理生", "role": ""},
|
|
|
|
|
{"name": "泉見洋平", "role": ""},
|
|
|
|
|
{"name": "松下洸平", "role": "アルマン"},
|
|
|
|
|
],
|
|
|
|
|
)
|
2023-06-05 11:45:57 -04:00
|
|
|
|
self.assertEqual(productions[0].opening_date, "2008-06-20")
|
|
|
|
|
self.assertEqual(productions[0].closing_date, "2008-08-04")
|
|
|
|
|
self.assertEqual(productions[2].opening_date, "2017-03-10")
|
|
|
|
|
self.assertEqual(productions[2].closing_date, "2017-03-17")
|
|
|
|
|
self.assertEqual(productions[3].opening_date, "2017-11-13")
|
|
|
|
|
self.assertEqual(productions[3].closing_date, None)
|
2024-07-13 00:16:47 -04:00
|
|
|
|
self.assertEqual(
|
|
|
|
|
productions[3].display_title,
|
|
|
|
|
"THE SCARLET PIMPERNEL ミュージカル(2017年)版",
|
|
|
|
|
)
|
2023-06-05 17:22:34 -04:00
|
|
|
|
self.assertEqual(len(productions[3].actor), 6)
|
2023-06-05 02:04:52 -04:00
|
|
|
|
self.assertEqual(productions[3].language, ["日语"])
|
|
|
|
|
self.assertEqual(productions[3].opening_date, "2017-11-13")
|
|
|
|
|
self.assertEqual(productions[3].location, ["梅田芸術劇場メインホール"])
|