add: 刮削演员信息并生成相应目录结构和演员图片
19
README.md
|
@ -1,3 +1,22 @@
|
||||||
# tmdb-person
|
# tmdb-person
|
||||||
|
|
||||||
根据nfo文件信息刮削相关演员信息及图片
|
根据nfo文件信息刮削相关演员信息及图片
|
||||||
|
|
||||||
|
## example
|
||||||
|
> emby 存储于metadata/peopel 中的数据示例
|
||||||
|
|
||||||
|
> 电视剧tvs 和 电影movies 的保存 `.nfo` 命名格式不一样。movies的 `.nfo` 文件以电影名为前缀, tvs 统一以 `tvshow.nfo` 命名
|
||||||
|
|
||||||
|
* a: 英文演员信息
|
||||||
|
* 张: 中文演员信息
|
||||||
|
* person.nfo
|
||||||
|
* tvshow.nfo
|
||||||
|
|
||||||
|
## data
|
||||||
|
> 实际刮削的演员信息存放路径
|
||||||
|
|
||||||
|
## 接口
|
||||||
|
> https://developer.themoviedb.org/
|
||||||
|
|
||||||
|
1. 演员信息刮削:https://developer.themoviedb.org/reference/person-details
|
||||||
|
2. 图片统一前缀路径:https://www.themoviedb.org/t/p/original
|
BIN
example/a/Alan Rickman-tmdb-4566/folder.jpg
Executable file
After Width: | Height: | Size: 242 KiB |
BIN
example/a/Alan Tudyk-tmdb-21088/folder.jpg
Executable file
After Width: | Height: | Size: 51 KiB |
BIN
example/a/Allen Ai Lun-tmdb-1519031/folder.jpg
Executable file
After Width: | Height: | Size: 57 KiB |
BIN
example/a/Andrew Garfield-tmdb-37625/folder.jpg
Executable file
After Width: | Height: | Size: 94 KiB |
BIN
example/a/Andy Samberg-tmdb-62861/folder.jpg
Executable file
After Width: | Height: | Size: 442 KiB |
BIN
example/a/Andy Umberger-tmdb-142204/folder.jpg
Executable file
After Width: | Height: | Size: 124 KiB |
BIN
example/a/Annie Potts-tmdb-8873/folder.jpg
Executable file
After Width: | Height: | Size: 40 KiB |
11
example/person.nfo
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<person>
|
||||||
|
<plot />
|
||||||
|
<outline />
|
||||||
|
<lockdata>false</lockdata>
|
||||||
|
<dateadded>2023-08-26 05:05:20</dateadded>
|
||||||
|
<title>朱一龙</title>
|
||||||
|
<sorttitle>朱一龙</sorttitle>
|
||||||
|
<tmdbid>1743471</tmdbid>
|
||||||
|
<uniqueid type="tmdb">1743471</uniqueid>
|
||||||
|
</person>
|
96
example/tvshow.nfo
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<tvshow>
|
||||||
|
<plot><![CDATA[温婉可人、处事低调的业内顶尖配音演员时宜,一日在机场偶遇了儒雅的海归化学教授周生辰,两人一见如故颇有眼缘,短暂交往后彼此都留下了深刻印象。为了拯救日渐没落的紫砂壶工厂,周生辰答应母亲的 条件,订婚承业。他婉拒了家里安排,向颇有好感的时宜提出了订婚的请求。时宜内心早已认定 ,欣然答应。点滴相处中,两人默契逐渐产生,两颗心慢慢靠近。周生辰为了振兴家乡的紫砂壶工艺,与长辈产生了经营理念上的巨大分歧,面对亲情和事业的两难境地,幸得时宜始终相伴,并给予了最坚实的支持和鼓励,两人最终携手最大程度地保全了传统手工艺。风雨过后,情意更为深重。然而此时,时宜为了救周生辰遭奸人陷害,身受重伤重度昏迷。周生辰暂时放下事业悉心陪伴照料,终将爱妻唤醒,两人约定相伴此生此世永不分离。]]></plot>
|
||||||
|
<outline><![CDATA[温婉可人、处事低调的业内顶尖配音演员时宜,一日在机场偶遇了儒雅的海归化学教授周生辰,两人一见如故颇有眼缘,短暂交往后彼此都留下了深刻印象。为了拯救日渐没落的紫砂壶工厂,周生辰答应母亲的 条件,订婚承业。他婉拒了家里安排,向颇有好感的时宜提出了订婚的请求。时宜内心早已认定 ,欣然答应。点滴相处中,两人默契逐渐产生,两颗心慢慢靠近。周生辰为了振兴家乡的紫砂壶工艺,与长辈产生了经营理念上的巨大分歧,面对亲情和事业的两难境地,幸得时宜始终相伴,并给予了最坚实的支持和鼓励,两人最终携手最大程度地保全了传统手工艺。风雨过后,情意更为深重。然而此时,时宜为了救周生辰遭奸人陷害,身受重伤重度昏迷。周生辰暂时放下事业悉心陪伴照料,终将爱妻唤醒,两人约定相伴此生此世永不分离。]]></outline>
|
||||||
|
<lockdata>false</lockdata>
|
||||||
|
<dateadded>2023-09-02 22:49:29</dateadded>
|
||||||
|
<title>一生一世</title>
|
||||||
|
<originaltitle>一生一世</originaltitle>
|
||||||
|
<actor>
|
||||||
|
<name>Ren Jialun</name>
|
||||||
|
<role>Zhousheng Chen</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>2084465</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Bai Lu</name>
|
||||||
|
<role>Shi Yi</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>1879666</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Ci Sha</name>
|
||||||
|
<role>Mei Xing</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>3167855</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Wang Yueyi</name>
|
||||||
|
<role>Hong Xiaoyu</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>3161424</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Luo Mingjie</name>
|
||||||
|
<role>Zhou Wenchuan</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>2359338</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Wang Ruixin</name>
|
||||||
|
<role>Zhou Wenxing</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>3177467</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Luo Haiqiong</name>
|
||||||
|
<role>Qin Wan</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>1363325</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Feng Jia-Yi</name>
|
||||||
|
<role>Zhou Shengxing</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>1613707</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Wang Xiwen</name>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>3177468</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Ye Xiaowei</name>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>2790196</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Liu Ruogu</name>
|
||||||
|
<role>Zhou Shengren</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>2747081</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<director tmdbid="2665899">Shen Yang</director>
|
||||||
|
<trailer>http://www.youtube.com/watch?v=ZGymduZZhqg</trailer>
|
||||||
|
<rating>7.4</rating>
|
||||||
|
<year>2021</year>
|
||||||
|
<sorttitle>一生一世</sorttitle>
|
||||||
|
<imdb_id>tt14324128</imdb_id>
|
||||||
|
<tmdbid>130107</tmdbid>
|
||||||
|
<premiered>2021-09-06</premiered>
|
||||||
|
<releasedate>2021-09-06</releasedate>
|
||||||
|
<enddate>2021-10-03</enddate>
|
||||||
|
<runtime>50</runtime>
|
||||||
|
<genre>剧情</genre>
|
||||||
|
<studio>iQiyi</studio>
|
||||||
|
<uniqueid type="imdb">tt14324128</uniqueid>
|
||||||
|
<uniqueid type="tmdb">130107</uniqueid>
|
||||||
|
<uniqueid type="tvdb">402985</uniqueid>
|
||||||
|
<tvdbid>402985</tvdbid>
|
||||||
|
<episodeguide>{"imdb":"tt14324128","tmdb":"130107","tvdb":"402985"}</episodeguide>
|
||||||
|
<id>402985</id>
|
||||||
|
<season>-1</season>
|
||||||
|
<episode>-1</episode>
|
||||||
|
<displayorder>aired</displayorder>
|
||||||
|
<status>Ended</status>
|
||||||
|
</tvshow>
|
13
example/张/张晚意-tmdb-3028958/person.nfo
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<person>
|
||||||
|
<plot />
|
||||||
|
<outline />
|
||||||
|
<lockdata>false</lockdata>
|
||||||
|
<dateadded>2023-08-26 16:06:51</dateadded>
|
||||||
|
<title>张晚意</title>
|
||||||
|
<sorttitle>张晚意</sorttitle>
|
||||||
|
<imdbid>nm9545744</imdbid>
|
||||||
|
<tmdbid>3028958</tmdbid>
|
||||||
|
<uniqueid type="tmdb">3028958</uniqueid>
|
||||||
|
<uniqueid type="imdb">nm9545744</uniqueid>
|
||||||
|
</person>
|
522
example/神出鬼没 (2023) - 2160p.nfo
Normal file
|
@ -0,0 +1,522 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<movie>
|
||||||
|
<plot><![CDATA[忠厚老实的科尔(克里斯·埃文斯 Chris Evans 饰)爱上了神秘莫测的赛迪(安娜·德·阿玛斯 Ana de Armas 饰),却惊诧地发现她是一名秘密特工。在他们决定是否进行第二次约会之前,科尔和赛迪被卷入了一场拯救世界的国际冒险。]]></plot>
|
||||||
|
<outline />
|
||||||
|
<lockdata>false</lockdata>
|
||||||
|
<dateadded>2023-04-23 19:26:54</dateadded>
|
||||||
|
<title>神出鬼没</title>
|
||||||
|
<originaltitle>Ghosted</originaltitle>
|
||||||
|
<actor>
|
||||||
|
<name>Chris Evans</name>
|
||||||
|
<role>Cole Turner</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>16828</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Ana de Armas</name>
|
||||||
|
<role>Sadie Rhodes</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>224513</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>艾德里安·布洛迪</name>
|
||||||
|
<role>Leveque</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>3490</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>麦克·莫</name>
|
||||||
|
<role>Wagner</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>1324443</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>泰特·多诺万</name>
|
||||||
|
<role>Dad</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>15455</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>艾米·塞德丽丝</name>
|
||||||
|
<role>Mom</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>12110</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>丽兹·布罗德威</name>
|
||||||
|
<role>Mattie Turner</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>1376782</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Mustafa Shakir</name>
|
||||||
|
<role>Monte Jackson</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>62385</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Anthony Mackie</name>
|
||||||
|
<role>Grandson of Sam</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>53650</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>John Cho</name>
|
||||||
|
<role>The Leopard</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>68842</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Sebastian Stan</name>
|
||||||
|
<role>God</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>60898</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Ryan Reynolds</name>
|
||||||
|
<role>Jonas</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>10859</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>安娜·迪佛·史密斯</name>
|
||||||
|
<role>Claudia Yates</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>63279</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Tim Blake Nelson</name>
|
||||||
|
<role>Borislov</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>1462</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>蒂娅·希尔卡</name>
|
||||||
|
<role>Patti</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>109046</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Steve Park</name>
|
||||||
|
<role>Utami</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>4025</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Burn Gorman</name>
|
||||||
|
<role>English Cabbie</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>39659</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Marwan Kenzari</name>
|
||||||
|
<role>Marco</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>935235</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Victoria Garcia-Kelleher</name>
|
||||||
|
<role>Edna</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>1500108</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>Jordan Blair Mangold Brown</name>
|
||||||
|
<role>Joann</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>1999675</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<actor>
|
||||||
|
<name>德克斯特·弗莱彻</name>
|
||||||
|
<role>Raoul</role>
|
||||||
|
<type>Actor</type>
|
||||||
|
<tmdbid>974</tmdbid>
|
||||||
|
</actor>
|
||||||
|
<director tmdbid="974">德克斯特·弗莱彻</director>
|
||||||
|
<trailer>plugin://plugin.video.youtube/?action=play_video&videoid=IAdCsNtEuBU</trailer>
|
||||||
|
<rating>5.8</rating>
|
||||||
|
<year>2023</year>
|
||||||
|
<sorttitle>神出鬼没</sorttitle>
|
||||||
|
<mpaa>PG-13</mpaa>
|
||||||
|
<imdbid>tt15326988</imdbid>
|
||||||
|
<tmdbid>868759</tmdbid>
|
||||||
|
<premiered>2023-04-21</premiered>
|
||||||
|
<releasedate>2023-04-21</releasedate>
|
||||||
|
<runtime>117</runtime>
|
||||||
|
<country>United States of America</country>
|
||||||
|
<genre>爱情</genre>
|
||||||
|
<genre>动作</genre>
|
||||||
|
<genre>喜剧</genre>
|
||||||
|
<studio>Skydance Media</studio>
|
||||||
|
<studio>Apple Studios</studio>
|
||||||
|
<uniqueid type="imdb">tt15326988</uniqueid>
|
||||||
|
<uniqueid type="tmdb">868759</uniqueid>
|
||||||
|
<id>tt15326988</id>
|
||||||
|
<fileinfo>
|
||||||
|
<streamdetails>
|
||||||
|
<video>
|
||||||
|
<codec>hevc</codec>
|
||||||
|
<micodec>hevc</micodec>
|
||||||
|
<bitrate>24860682</bitrate>
|
||||||
|
<width>3840</width>
|
||||||
|
<height>2076</height>
|
||||||
|
<aspect>320:173</aspect>
|
||||||
|
<aspectratio>320:173</aspectratio>
|
||||||
|
<framerate>23.976025</framerate>
|
||||||
|
<language>eng</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>True</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
<duration>116</duration>
|
||||||
|
<durationinseconds>7014</durationinseconds>
|
||||||
|
</video>
|
||||||
|
<audio>
|
||||||
|
<codec>eac3</codec>
|
||||||
|
<micodec>eac3</micodec>
|
||||||
|
<bitrate>768000</bitrate>
|
||||||
|
<language>eng</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<channels>6</channels>
|
||||||
|
<samplingrate>48000</samplingrate>
|
||||||
|
<default>True</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</audio>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>eng</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>eng</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>ara</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>bul</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>cze</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>dan</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>ger</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>gre</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>spa</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>spa</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>est</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>fin</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>fre</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>fre</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>heb</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>hin</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>hun</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>ind</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>ita</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>jpn</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>kor</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>lit</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>lav</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>may</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>dut</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>nor</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>pol</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>por</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>por</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>rus</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>slo</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>slv</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>swe</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>tam</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>tel</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>tha</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>tur</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>ukr</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>vie</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>chi</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>chi</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
<subtitle>
|
||||||
|
<codec>subrip</codec>
|
||||||
|
<micodec>subrip</micodec>
|
||||||
|
<language>chi</language>
|
||||||
|
<scantype>progressive</scantype>
|
||||||
|
<default>False</default>
|
||||||
|
<forced>False</forced>
|
||||||
|
</subtitle>
|
||||||
|
</streamdetails>
|
||||||
|
</fileinfo>
|
||||||
|
</movie>
|
75
person.py
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import requests
|
||||||
|
import os
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
class Analyze:
|
||||||
|
def __init__(self, file_path):
|
||||||
|
self.file_path = file_path
|
||||||
|
|
||||||
|
def analyze(self):
|
||||||
|
tree = ET.parse(self.file_path)
|
||||||
|
root = tree.getroot()
|
||||||
|
if "tvshow" in root.tag:
|
||||||
|
data_json = {}
|
||||||
|
self.__list_nodes(root, data_json)
|
||||||
|
return data_json
|
||||||
|
if "movie" in root.tag:
|
||||||
|
data_json = {}
|
||||||
|
self.__list_nodes(root, data_json)
|
||||||
|
return data_json
|
||||||
|
|
||||||
|
def __list_nodes(self, root, data):
|
||||||
|
actors = []
|
||||||
|
for node in root:
|
||||||
|
if 0 == len(list(node)):
|
||||||
|
data[node.tag] = node.text
|
||||||
|
elif "actor" == node.tag:
|
||||||
|
actor_json = {}
|
||||||
|
self.__list_nodes(node, actor_json)
|
||||||
|
actors.append(actor_json)
|
||||||
|
data["actors"] = actors
|
||||||
|
|
||||||
|
|
||||||
|
class Tmdb:
|
||||||
|
def __init__(self, tmdb_id, actor_path):
|
||||||
|
self.image_path = None
|
||||||
|
self.tmdb_id = tmdb_id
|
||||||
|
self.actor_path = actor_path
|
||||||
|
|
||||||
|
def get_actor_info(self):
|
||||||
|
url = "https://api.themoviedb.org/3/person/" + self.tmdb_id + "?language=zh-CN"
|
||||||
|
headers = {
|
||||||
|
"accept": "application/json",
|
||||||
|
"Authorization": "Bearer eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxYTU4ODAxMGY5OTUwYWEyNThhYjFhYjJlMjI4NGVmYSIsInN1YiI6IjYxYmRmOGNjMzgzZGYyMDA0MjIzNDhjOSIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.RPG8F8AELlK7MgrXDR2U0YRv61VteZZ9ponilnkQqkE"
|
||||||
|
}
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
return response.text
|
||||||
|
|
||||||
|
def get_actor_image(self):
|
||||||
|
image_path = json.loads(self.get_actor_info())["profile_path"]
|
||||||
|
url = 'https://www.themoviedb.org/t/p/original' + image_path
|
||||||
|
response = requests.get(url)
|
||||||
|
if response.status_code == 200:
|
||||||
|
suffix = image_path.split(".")[1]
|
||||||
|
with open(os.path.join(self.actor_path, "folder." + suffix), 'wb') as f:
|
||||||
|
f.write(response.content)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
__nfo_data = Analyze(file_path="example/神出鬼没 (2023) - 2160p.nfo").analyze()
|
||||||
|
for __actor in __nfo_data["actors"]:
|
||||||
|
__tmdbid = __actor["tmdbid"]
|
||||||
|
__actor_name = __actor["name"]
|
||||||
|
__name = __actor_name[1].lower()
|
||||||
|
__path_dir = os.path.join("data", __name, __actor_name)
|
||||||
|
if not os.path.exists(__path_dir):
|
||||||
|
os.makedirs(__path_dir)
|
||||||
|
if ".nfo" not in os.listdir(__path_dir):
|
||||||
|
__actor_info = Tmdb(tmdb_id=__tmdbid, actor_path=__path_dir).get_actor_info()
|
||||||
|
print(__actor_info)
|
||||||
|
if "folder" not in os.listdir(__path_dir):
|
||||||
|
Tmdb(tmdb_id=__tmdbid, actor_path=__path_dir).get_actor_image()
|