From e4be2be66490fe9b2c969ea53f6d973a24c44f6d Mon Sep 17 00:00:00 2001 From: jiaojiaodubai <63148861+jiaojiaodubai@users.noreply.github.com> Date: Fri, 20 Sep 2024 13:11:05 +0800 Subject: [PATCH] close #383 --- Douban.js | 125 +++++++++++++++++++++++++++++------------------------- 1 file changed, 67 insertions(+), 58 deletions(-) diff --git a/Douban.js b/Douban.js index 7f0e7c3..9281b5f 100644 --- a/Douban.js +++ b/Douban.js @@ -9,7 +9,7 @@ "inRepository": true, "translatorType": 4, "browserSupport": "gcsibv", - "lastUpdated": "2024-04-17 13:01:09" + "lastUpdated": "2024-09-20 05:05:44" } /* @@ -43,7 +43,7 @@ const typeMap = { }; function detectWeb(doc, url) { - let typeKey = Object.keys(typeMap).find(key => new RegExp(`${key}/\\d+/`).test(url)); + const typeKey = Object.keys(typeMap).find(key => new RegExp(`${key}/\\d+/`).test(url)); if (typeKey) { return typeMap[typeKey]; } @@ -54,18 +54,18 @@ function detectWeb(doc, url) { } function getSearchResults(doc, checkOnly) { - var items = {}; - var found = false; + const items = {}; + let found = false; // .title > a, h2 > a: read.douban.com/ebook // td > .pl2: music.douban.com/top250 // .explore li > a:first-child: https://movie.douban.com/tv/ - var rows = Array.from(doc.querySelectorAll('.title > a, h2 > a, td > .pl2 > a, a.album-titl, .explore li > a:first-child')) + const rows = Array.from(doc.querySelectorAll('.title > a, h2 > a, td > .pl2 > a, a.album-titl, .explore li > a:first-child')) .filter((row) => { return [...Object.keys(typeMap), 'uri=/tv', 'uri=/movie'].some(key => new RegExp(`${key}/\\d+`).test(row.href)); }); - for (let row of rows) { - let href = row.href; - let title = ZU.trimInternal(row.textContent); + for (const row of rows) { + const href = row.href; + const title = ZU.trimInternal(row.textContent); if (!href || !title) continue; if (checkOnly) return true; found = true; @@ -76,9 +76,9 @@ function getSearchResults(doc, checkOnly) { async function doWeb(doc, url) { if (detectWeb(doc, url) == 'multiple') { - let items = await Zotero.selectItems(getSearchResults(doc, false)); + const items = await Zotero.selectItems(getSearchResults(doc, false)); if (!items) return; - for (let url of Object.keys(items)) { + for (const url of Object.keys(items)) { await scrape(await requestDocument(url)); } } @@ -88,16 +88,16 @@ async function doWeb(doc, url) { } async function scrape(doc, url = doc.location.href) { - var newItem = new Z.Item(detectWeb(doc, url)); - let extra = new Extra(); - var creators = []; + const newItem = new Z.Item(detectWeb(doc, url)); + const extra = new Extra(); + let creators = []; const isRead = url.includes('read.douban.com/ebook'); // .article-meta for read - var labels = isRead + const labels = isRead ? new Labels(doc, '.article-meta > p') : new TextLabels(doc, '#info', /.+?:/); Z.debug(isRead ? labels.data.map(arr => [arr[0], arr[1].innerText]) : labels.data); - var title = ZU.trimInternal(text(doc, 'h1')); + let title = ZU.trimInternal(text(doc, 'h1')); switch (newItem.itemType) { case 'book': { Z.debug('this is a book'); @@ -121,18 +121,17 @@ async function scrape(doc, url = doc.location.href) { ? labels.get('出版社').split(' / ')[0] : labels.get('出版社'); // https://book.douban.com/subject/1451400/ - newItem.date = isRead + newItem.date = ZU.strToISO(isRead ? tryMatch(labels.get('出版社'), /[\d.-]+/) - : labels.get('出版年').replace(/\./g, '-'); + : labels.get('出版年')); newItem.numPages = labels.get('页数'); newItem.ISBN = labels.get('ISBN'); - newItem.shortTitle = tryMatch(newItem.title, /[::] (.+)$/, 1); - let authors = isRead + const authors = isRead ? Array.from(labels.get('作者', true).querySelectorAll('.author-item')) .map(creator => processName(ZU.trimInternal(creator.textContent), 'author')) : labels.get('作者').split(/\s?\/\s?/) .map(creator => processName(creator, 'author')); - let translators = isRead + const translators = isRead ? Array.from(labels.get('译者', true).querySelectorAll('.author-item')) .map(translator => processName(ZU.trimInternal(translator.textContent), 'translator')) : labels.get('译者').split(/\s?\/\s?/) @@ -142,7 +141,7 @@ async function scrape(doc, url = doc.location.href) { doc.querySelectorAll('.tags a > span:first-child').forEach((tag) => { newItem.tags.push(tag.innerText); }); - let contents = doc.querySelector('[id*="dir_"][id*="_full"], .table-of-contents'); + const contents = doc.querySelector('[id*="dir_"][id*="_full"], .table-of-contents'); if (contents) { newItem.notes.push(`

《${newItem.title}》 - 目录

` + contents.innerHTML.replace(/ · · · [\s\S]*$/, '').replace(/展开全部$/, '')); } @@ -158,7 +157,7 @@ async function scrape(doc, url = doc.location.href) { title = title.replace(/ \(\d{4}\)$/, ''); // 很难用正则从title中匹配出中文标题 // https://movie.douban.com/subject/3183628/ - let zhTitle = doc.title.replace(/ \(豆瓣\)$/, ''); + const zhTitle = doc.title.replace(/ \(豆瓣\)$/, ''); newItem.title = zhTitle; if (new RegExp(`${zhTitle}.+`).test(title)) { extra.set('original-title', title.replace(`${zhTitle} `, ''), true); @@ -178,7 +177,7 @@ async function scrape(doc, url = doc.location.href) { extra.set('alias', labels.get('又名')); extra.set('IMDb', labels.get('IMDb')); extra.set('style', labels.get('类型')); - let creatorsMap = { + const creatorsMap = { director: json.director, scriptwriter: json.author, contributor: json.actor @@ -196,7 +195,7 @@ async function scrape(doc, url = doc.location.href) { creators.push(processName(creator, creatorType)); } } - let image = json.image; + const image = json.image; if (image) { newItem.attachments.push({ title: newItem.title, @@ -219,7 +218,7 @@ async function scrape(doc, url = doc.location.href) { extra.set('ISRC', labels.get('ISRC')); extra.set('barcode', labels.get('条形码')); labels.get('表演者').split(' / ').forEach(performer => creators.push(processName(performer, 'performer'))); - let contents = doc.querySelector('.track-list'); + const contents = doc.querySelector('.track-list'); if (contents) { newItem.notes.push(`

《${newItem.title}》 - 目录

` + contents.innerHTML.replace(/ · · · [\s\S]*$/, '').replace(/展开全部$/, '')); } @@ -295,30 +294,28 @@ class Labels { constructor(doc, selector) { this.data = []; this.emptyElm = doc.createElement('div'); - Array.from(doc.querySelectorAll(selector)) + const nodes = doc.querySelectorAll(selector); + for (const node of nodes) { // avoid nesting - .filter(element => !element.querySelector(selector)) // avoid empty - .filter(element => !/^\s*$/.test(element.textContent)) - .forEach((element) => { - const elmCopy = element.cloneNode(true); - // avoid empty text - while (/^\s*$/.test(elmCopy.firstChild.textContent)) { - // Z.debug(elementCopy.firstChild.textContent); - elmCopy.removeChild(elmCopy.firstChild); - // Z.debug(elementCopy.firstChild.textContent); - } - if (elmCopy.childNodes.length > 1) { - const key = elmCopy.removeChild(elmCopy.firstChild).textContent.replace(/\s/g, ''); - this.data.push([key, elmCopy]); - } - else { - const text = ZU.trimInternal(elmCopy.textContent); - const key = tryMatch(text, /^[[【]?.+?[】\]::]/).replace(/\s/g, ''); - elmCopy.textContent = tryMatch(text, /^[[【]?.+?[】\]::]\s*(.+)/, 1); - this.data.push([key, elmCopy]); - } - }); + if (node.querySelector(selector) || !/\S/.test(node.textContent)) continue; + const elmCopy = node.cloneNode(true); + // avoid empty text + while (![1, 3, 4].includes(elmCopy.firstChild.nodeType) || !/\S$/.test(elmCopy.firstChild.textContent)) { + elmCopy.removeChild(elmCopy.firstChild); + if (!elmCopy.firstChild) break; + } + if (elmCopy.childNodes.length > 1) { + const key = elmCopy.removeChild(elmCopy.firstChild).textContent.replace(/\s/g, ''); + this.data.push([key, elmCopy]); + } + else { + const text = ZU.trimInternal(elmCopy.textContent); + const key = tryMatch(text, /^[[【]?.+?[】\]::]/).replace(/\s/g, ''); + elmCopy.textContent = tryMatch(text, /^[[【]?.+?[】\]::]\s*(.+)/, 1); + this.data.push([key, elmCopy]); + } + } } get(label, element = false) { @@ -391,7 +388,7 @@ function tryMatch(string, pattern, index = 0) { } function processName(fullName, defaultType) { - var creatorType, country, original; + let creatorType, country, original; // 当多个人名折叠时,最后一个人名可能带有“更多”。 fullName = fullName.replace(/更多\.\.\.$/, ''); Z.debug(fullName); @@ -425,7 +422,7 @@ function processName(fullName, defaultType) { } } } - creatorType = creatorType || defaultType; + creatorType = defaultType || creatorType; let creator = ZU.cleanAuthor(fullName, creatorType); // https://book.douban.com/subject/26604008/ if (/[\u4e00-\u9fff]/.test(creator.lastName)) { @@ -481,7 +478,6 @@ function toArabicNum(zhNum) { return res; } - /** BEGIN TEST CASES **/ var testCases = [ { @@ -523,15 +519,16 @@ var testCases = [ "fieldMode": 1 } ], - "date": "2015-7-1", + "date": "2015-07-01", "ISBN": "9787111504825", "abstractNote": "《计算机组成与设计:硬件/软件接口》是计算机组成与设计的经典畅销教材,第5版经过全面更新,关注后PC时代发生在计算机体系结构领域的革命性变革——从单核处理器到多核微处理器,从串行到并行。本书特别关注移动计算和云计算,通过平板电脑、云体系结构以及ARM(移动计算设备)和x86(云计算)体系结构来探索和揭示这场技术变革。 与前几版一样,本书采用MIPS处理器讲解计算机硬件技术、汇编语言、计算机算术、流水线、存储器层次结构以及I/O等基本功能。", - "extra": "original-title: Computer Organization and Design: The Hardware/Software Interface (5/e)\noriginal-author: David A.Patterson\noriginal-author: John L.Hennessy\nprice: 99.00元\nrating: 9.3\nratingPeople: 407人评价\ncomments: 114\ncreatorsExt: [{\"firstName\":\"\",\"lastName\":\"戴维·A. 帕特森\",\"creatorType\":\"author\",\"fieldMode\":1,\"country\":\"\",\"original\":\"David A.Patterson\"},{\"firstName\":\"\",\"lastName\":\"约翰·L. 亨尼斯\",\"creatorType\":\"author\",\"fieldMode\":1,\"country\":\"\",\"original\":\"John L.Hennessy\"},{\"firstName\":\"\",\"lastName\":\"王党辉\",\"creatorType\":\"translator\",\"fieldMode\":1,\"country\":\"\",\"original\":\"\"},{\"firstName\":\"\",\"lastName\":\"康继昌\",\"creatorType\":\"translator\",\"fieldMode\":1,\"country\":\"\",\"original\":\"\"},{\"firstName\":\"\",\"lastName\":\"安建峰\",\"creatorType\":\"translator\",\"fieldMode\":1,\"country\":\"\",\"original\":\"\"}]", + "extra": "original-title: Computer Organization and Design: The Hardware/Software Interface (5/e)\noriginal-author: David A.Patterson\noriginal-author: John L.Hennessy\nprice: 99.00元\nrating: 9.2\nratingPeople: 418人评价\ncomments: 119\ncreatorsExt: [{\"firstName\":\"\",\"lastName\":\"戴维·A. 帕特森\",\"creatorType\":\"author\",\"fieldMode\":1,\"country\":\"\",\"original\":\"David A.Patterson\"},{\"firstName\":\"\",\"lastName\":\"约翰·L. 亨尼斯\",\"creatorType\":\"author\",\"fieldMode\":1,\"country\":\"\",\"original\":\"John L.Hennessy\"},{\"firstName\":\"\",\"lastName\":\"王党辉\",\"creatorType\":\"translator\",\"fieldMode\":1,\"country\":\"\",\"original\":\"\"},{\"firstName\":\"\",\"lastName\":\"康继昌\",\"creatorType\":\"translator\",\"fieldMode\":1,\"country\":\"\",\"original\":\"\"},{\"firstName\":\"\",\"lastName\":\"安建峰\",\"creatorType\":\"translator\",\"fieldMode\":1,\"country\":\"\",\"original\":\"\"}]", "language": "zh-CN", "libraryCatalog": "Douban", "numPages": "536", "publisher": "机械工业出版社", "series": "计算机科学丛书", + "shortTitle": "计算机组成与设计", "url": "https://book.douban.com/subject/26604008/", "attachments": [], "tags": [], @@ -663,7 +660,7 @@ var testCases = [ }, { "firstName": "", - "lastName": "威廉姆·赛德勒", + "lastName": "威廉·桑德勒", "creatorType": "contributor", "fieldMode": 1 }, @@ -796,7 +793,7 @@ var testCases = [ ], "date": "1994-09-10", "abstractNote": "一场谋杀案使银行家安迪(蒂姆•罗宾斯 Tim Robbins 饰)蒙冤入狱,谋杀妻子及其情人的指控将囚禁他终生。在肖申克监狱的首次现身就让监狱“大哥”瑞德(摩根•弗里曼 Morgan Freeman 饰)对他另眼相看。瑞德帮助他搞到一把石锤和一幅女明星海报,两人渐成患难 之交。很快,安迪在监狱里大显其才,担当监狱图书管理员,并利用自己的金融知识帮助监狱官避税,引起了典狱长的注意,被招致麾下帮助典狱长洗黑钱。偶然一次,他得知一名新入狱的小偷能够作证帮他洗脱谋杀罪。燃起一丝希望的安迪找到了典狱长,希望他能帮自己翻案。阴险伪善的狱长假装答应安迪,背后却派人杀死小偷,让他唯一能合法出狱的希望泯灭。沮丧的安迪并没有绝望,在一个电闪雷鸣的风雨夜,一场暗藏几十年的越狱计划让他自我救赎,重获自由!老朋友瑞德在他的鼓舞和帮助下,也勇敢地奔向自由。 本片获得1995年奥斯卡10项提名,以及金球奖、土星奖等多项提名。", - "extra": "original-title: The Shawshank Redemption\noriginal-author: Frank Darabont\noriginal-author: Frank Darabont\noriginal-author: Stephen King\noriginal-author: Tim Robbins\noriginal-author: Morgan Freeman\noriginal-author: Bob Gunton\noriginal-author: William Sadler\noriginal-author: Clancy Brown\noriginal-author: Gil Bellows\noriginal-author: Mark Rolston\noriginal-author: James Whitmore\noriginal-author: Jeffrey DeMunn\noriginal-author: Larry Brandenburg\noriginal-author: Neil Giuntoli\noriginal-author: Brian Libby\noriginal-author: David Proval\noriginal-author: Joseph Ragno\noriginal-author: Jude Ciccolella\noriginal-author: Paul McCrane\noriginal-author: Renee Blaine\noriginal-author: Alfonso Freeman\noriginal-author: V.J. Foster\noriginal-author: Frank Medrano\noriginal-author: Mack Miles\noriginal-author: Neil Summers\noriginal-author: Ned Bellamy\noriginal-author: Brian Delate\noriginal-author: Don McManus\nplace: 美国\nalias: 月黑高飞(港) / 刺激1995(台) / 地狱诺言 / 铁窗岁月 / 消香克的救赎\nIMDb: tt0111161\nstyle: 剧情 / 犯罪\nrating: 9.7\nratingPeople: 3012219人评价\ncomments: 587961\ncreatorsExt: [{\"firstName\":\"\",\"lastName\":\"弗兰克·德拉邦特\",\"creatorType\":\"director\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Frank Darabont\"},{\"firstName\":\"\",\"lastName\":\"弗兰克·德拉邦特\",\"creatorType\":\"scriptwriter\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Frank Darabont\"},{\"firstName\":\"\",\"lastName\":\"斯蒂芬·金\",\"creatorType\":\"scriptwriter\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Stephen King\"},{\"firstName\":\"\",\"lastName\":\"蒂姆·罗宾斯\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Tim Robbins\"},{\"firstName\":\"\",\"lastName\":\"摩根·弗里曼\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Morgan Freeman\"},{\"firstName\":\"\",\"lastName\":\"鲍勃·冈顿\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Bob Gunton\"},{\"firstName\":\"\",\"lastName\":\"威廉姆·赛德勒\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"William Sadler\"},{\"firstName\":\"\",\"lastName\":\"克兰西·布朗\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Clancy Brown\"},{\"firstName\":\"\",\"lastName\":\"吉尔·贝罗斯\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Gil Bellows\"},{\"firstName\":\"\",\"lastName\":\"马克·罗斯顿\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Mark Rolston\"},{\"firstName\":\"\",\"lastName\":\"詹姆斯·惠特摩\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"James Whitmore\"},{\"firstName\":\"\",\"lastName\":\"杰弗里·德曼\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Jeffrey DeMunn\"},{\"firstName\":\"\",\"lastName\":\"拉里·布兰登伯格\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Larry Brandenburg\"},{\"firstName\":\"\",\"lastName\":\"尼尔·吉恩托利\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Neil Giuntoli\"},{\"firstName\":\"\",\"lastName\":\"布赖恩·利比\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Brian Libby\"},{\"firstName\":\"\",\"lastName\":\"大卫·普罗瓦尔\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"David Proval\"},{\"firstName\":\"\",\"lastName\":\"约瑟夫·劳格诺\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Joseph Ragno\"},{\"firstName\":\"\",\"lastName\":\"祖德·塞克利拉\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Jude Ciccolella\"},{\"firstName\":\"\",\"lastName\":\"保罗·麦克兰尼\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Paul McCrane\"},{\"firstName\":\"\",\"lastName\":\"芮妮·布莱恩\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Renee Blaine\"},{\"firstName\":\"\",\"lastName\":\"阿方索·弗里曼\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Alfonso Freeman\"},{\"firstName\":\"\",\"lastName\":\"V·J·福斯特\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"V.J. Foster\"},{\"firstName\":\"\",\"lastName\":\"弗兰克·梅德拉诺\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Frank Medrano\"},{\"firstName\":\"\",\"lastName\":\"马克·迈尔斯\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Mack Miles\"},{\"firstName\":\"\",\"lastName\":\"尼尔·萨默斯\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Neil Summers\"},{\"firstName\":\"\",\"lastName\":\"耐德·巴拉米\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Ned Bellamy\"},{\"firstName\":\"\",\"lastName\":\"布赖恩·戴拉特\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Brian Delate\"},{\"firstName\":\"\",\"lastName\":\"唐·麦克马纳斯\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Don McManus\"}]", + "extra": "original-title: The Shawshank Redemption\noriginal-author: Frank Darabont\noriginal-author: Frank Darabont\noriginal-author: Stephen King\noriginal-author: Tim Robbins\noriginal-author: Morgan Freeman\noriginal-author: Bob Gunton\noriginal-author: William Sadler\noriginal-author: Clancy Brown\noriginal-author: Gil Bellows\noriginal-author: Mark Rolston\noriginal-author: James Whitmore\noriginal-author: Jeffrey DeMunn\noriginal-author: Larry Brandenburg\noriginal-author: Neil Giuntoli\noriginal-author: Brian Libby\noriginal-author: David Proval\noriginal-author: Joseph Ragno\noriginal-author: Jude Ciccolella\noriginal-author: Paul McCrane\noriginal-author: Renee Blaine\noriginal-author: Alfonso Freeman\noriginal-author: V.J. Foster\noriginal-author: Frank Medrano\noriginal-author: Mack Miles\noriginal-author: Neil Summers\noriginal-author: Ned Bellamy\noriginal-author: Brian Delate\noriginal-author: Don McManus\nplace: 美国\nalias: 月黑高飞(港) / 刺激1995(台) / 地狱诺言 / 铁窗岁月 / 消香克的救赎\nIMDb: tt0111161\nstyle: 剧情 / 犯罪\nrating: 9.7\nratingPeople: 3064804人评价\ncomments: 598175\ncreatorsExt: [{\"firstName\":\"\",\"lastName\":\"弗兰克·德拉邦特\",\"creatorType\":\"director\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Frank Darabont\"},{\"firstName\":\"\",\"lastName\":\"弗兰克·德拉邦特\",\"creatorType\":\"scriptwriter\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Frank Darabont\"},{\"firstName\":\"\",\"lastName\":\"斯蒂芬·金\",\"creatorType\":\"scriptwriter\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Stephen King\"},{\"firstName\":\"\",\"lastName\":\"蒂姆·罗宾斯\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Tim Robbins\"},{\"firstName\":\"\",\"lastName\":\"摩根·弗里曼\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Morgan Freeman\"},{\"firstName\":\"\",\"lastName\":\"鲍勃·冈顿\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Bob Gunton\"},{\"firstName\":\"\",\"lastName\":\"威廉·桑德勒\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"William Sadler\"},{\"firstName\":\"\",\"lastName\":\"克兰西·布朗\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Clancy Brown\"},{\"firstName\":\"\",\"lastName\":\"吉尔·贝罗斯\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Gil Bellows\"},{\"firstName\":\"\",\"lastName\":\"马克·罗斯顿\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Mark Rolston\"},{\"firstName\":\"\",\"lastName\":\"詹姆斯·惠特摩\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"James Whitmore\"},{\"firstName\":\"\",\"lastName\":\"杰弗里·德曼\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Jeffrey DeMunn\"},{\"firstName\":\"\",\"lastName\":\"拉里·布兰登伯格\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Larry Brandenburg\"},{\"firstName\":\"\",\"lastName\":\"尼尔·吉恩托利\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Neil Giuntoli\"},{\"firstName\":\"\",\"lastName\":\"布赖恩·利比\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Brian Libby\"},{\"firstName\":\"\",\"lastName\":\"大卫·普罗瓦尔\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"David Proval\"},{\"firstName\":\"\",\"lastName\":\"约瑟夫·劳格诺\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Joseph Ragno\"},{\"firstName\":\"\",\"lastName\":\"祖德·塞克利拉\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Jude Ciccolella\"},{\"firstName\":\"\",\"lastName\":\"保罗·麦克兰尼\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Paul McCrane\"},{\"firstName\":\"\",\"lastName\":\"芮妮·布莱恩\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Renee Blaine\"},{\"firstName\":\"\",\"lastName\":\"阿方索·弗里曼\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Alfonso Freeman\"},{\"firstName\":\"\",\"lastName\":\"V·J·福斯特\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"V.J. Foster\"},{\"firstName\":\"\",\"lastName\":\"弗兰克·梅德拉诺\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Frank Medrano\"},{\"firstName\":\"\",\"lastName\":\"马克·迈尔斯\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Mack Miles\"},{\"firstName\":\"\",\"lastName\":\"尼尔·萨默斯\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Neil Summers\"},{\"firstName\":\"\",\"lastName\":\"耐德·巴拉米\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Ned Bellamy\"},{\"firstName\":\"\",\"lastName\":\"布赖恩·戴拉特\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Brian Delate\"},{\"firstName\":\"\",\"lastName\":\"唐·麦克马纳斯\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Don McManus\"}]", "language": "zh-CN", "libraryCatalog": "Douban", "runningTime": "142 min", @@ -882,6 +879,18 @@ var testCases = [ "creatorType": "contributor", "fieldMode": 1 }, + { + "firstName": "", + "lastName": "伊芙·爱德华兹", + "creatorType": "contributor", + "fieldMode": 1 + }, + { + "firstName": "", + "lastName": "莎凡娜·魏尔奇", + "creatorType": "contributor", + "fieldMode": 1 + }, { "firstName": "", "lastName": "胡安尼·费利兹", @@ -895,14 +904,14 @@ var testCases = [ }, { "firstName": "", - "lastName": "莎凡娜·魏尔奇", + "lastName": "索耶·弗雷泽", "creatorType": "contributor", "fieldMode": 1 } ], "date": "2022-10-03", "abstractNote": "ABC续订弗莱迪·海默主演《良医》第6季。", - "extra": "original-title: The Good Doctor Season 6\noriginal-author: David Shore\noriginal-author: Freddie Highmore\noriginal-author: Fiona Gubelmann\noriginal-author: Will Yun Lee\noriginal-author: Christina Chang\noriginal-author: Bria Henderson\noriginal-author: Noah Galvin\noriginal-author: Hill Harper\noriginal-author: Richard Schiff\noriginal-author: Brandon Larracuente\noriginal-author: Juani Feliz\noriginal-author: Savannah Welch\nplace: 美国\nalias: 好医生 / 仁医 / 良医心 / 良医墨非\nIMDb: tt19267596\nstyle: 剧情\nrating: 8.7\nratingPeople: 2843人评价\ncomments: 687\ncreatorsExt: [{\"firstName\":\"\",\"lastName\":\"大卫·肖\",\"creatorType\":\"scriptwriter\",\"fieldMode\":1,\"country\":\"\",\"original\":\"David Shore\"},{\"firstName\":\"\",\"lastName\":\"弗莱迪·海默\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Freddie Highmore\"},{\"firstName\":\"\",\"lastName\":\"菲奥娜·嘉伯曼\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Fiona Gubelmann\"},{\"firstName\":\"\",\"lastName\":\"李威尹\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Will Yun Lee\"},{\"firstName\":\"\",\"lastName\":\"克里斯蒂娜·张\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Christina Chang\"},{\"firstName\":\"\",\"lastName\":\"布里亚·亨德森\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Bria Henderson\"},{\"firstName\":\"\",\"lastName\":\"诺亚·盖尔文\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Noah Galvin\"},{\"firstName\":\"\",\"lastName\":\"希尔·哈勃\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Hill Harper\"},{\"firstName\":\"\",\"lastName\":\"理查德·希夫\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Richard Schiff\"},{\"firstName\":\"\",\"lastName\":\"布兰登·拉瑞昆特\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Brandon Larracuente\"},{\"firstName\":\"\",\"lastName\":\"胡安尼·费利兹\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Juani Feliz\"},{\"firstName\":\"Jennifer\",\"lastName\":\"Tong\",\"creatorType\":\"contributor\",\"country\":\"\",\"original\":\"\"},{\"firstName\":\"\",\"lastName\":\"莎凡娜·魏尔奇\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Savannah Welch\"}]", + "extra": "original-title: The Good Doctor Season 6\noriginal-author: David Shore\noriginal-author: Freddie Highmore\noriginal-author: Fiona Gubelmann\noriginal-author: Will Yun Lee\noriginal-author: Christina Chang\noriginal-author: Bria Henderson\noriginal-author: Noah Galvin\noriginal-author: Hill Harper\noriginal-author: Richard Schiff\noriginal-author: Brandon Larracuente\noriginal-author: Eve Edwards\noriginal-author: Savannah Welch\noriginal-author: Juani Feliz\noriginal-author: Sawyer Fraser\nplace: 美国\nalias: 好医生 / 仁医 / 良医心 / 良医墨非\nIMDb: tt19267596\nstyle: 剧情\nrating: 8.7\nratingPeople: 3458人评价\ncomments: 804\ncreatorsExt: [{\"firstName\":\"\",\"lastName\":\"大卫·肖\",\"creatorType\":\"scriptwriter\",\"fieldMode\":1,\"country\":\"\",\"original\":\"David Shore\"},{\"firstName\":\"\",\"lastName\":\"弗莱迪·海默\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Freddie Highmore\"},{\"firstName\":\"\",\"lastName\":\"菲奥娜·嘉伯曼\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Fiona Gubelmann\"},{\"firstName\":\"\",\"lastName\":\"李威尹\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Will Yun Lee\"},{\"firstName\":\"\",\"lastName\":\"克里斯蒂娜·张\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Christina Chang\"},{\"firstName\":\"\",\"lastName\":\"布里亚·亨德森\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Bria Henderson\"},{\"firstName\":\"\",\"lastName\":\"诺亚·盖尔文\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Noah Galvin\"},{\"firstName\":\"\",\"lastName\":\"希尔·哈勃\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Hill Harper\"},{\"firstName\":\"\",\"lastName\":\"理查德·希夫\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Richard Schiff\"},{\"firstName\":\"\",\"lastName\":\"布兰登·拉瑞昆特\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Brandon Larracuente\"},{\"firstName\":\"\",\"lastName\":\"伊芙·爱德华兹\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Eve Edwards\"},{\"firstName\":\"\",\"lastName\":\"莎凡娜·魏尔奇\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Savannah Welch\"},{\"firstName\":\"\",\"lastName\":\"胡安尼·费利兹\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Juani Feliz\"},{\"firstName\":\"Jennifer\",\"lastName\":\"Tong\",\"creatorType\":\"contributor\",\"country\":\"\",\"original\":\"\"},{\"firstName\":\"\",\"lastName\":\"索耶·弗雷泽\",\"creatorType\":\"contributor\",\"fieldMode\":1,\"country\":\"\",\"original\":\"Sawyer Fraser\"}]", "language": "zh-CN", "libraryCatalog": "Douban", "url": "https://movie.douban.com/subject/35840681/", @@ -941,7 +950,7 @@ var testCases = [ ], "date": "2014-02-27", "audioRecordingFormat": "CD", - "extra": "genre: Album\nstyle: 流行\nalias: Kepler\nbarcode: 0602488970204\nrating: 8.7\nratingPeople: 34029人评价\ncomments: 11488", + "extra": "genre: Album\nstyle: 流行\nalias: Kepler\nbarcode: 0602488970204\nrating: 8.7\nratingPeople: 34505人评价\ncomments: 11629", "label": "环球唱片", "language": "zh-CN", "libraryCatalog": "Douban", @@ -949,7 +958,7 @@ var testCases = [ "attachments": [], "tags": [], "notes": [ - "

《克卜勒》 - 目录

\n
\n
\n 01. 克卜勒
02. 渴
03. 无限大
04. 尚好的青春
05. 天使的指纹
06. 银泰
07. 围绕
08. 错觉
09. 比较幸褔
10. 雨还是不停地落下\n
\n
\n " + "

《克卜勒》 - 目录

\n \n \n " ], "seeAlso": [] }