@@ -52,18 +52,17 @@ function getProductionYear(retry: boolean) {
5252 const year2 = matchText2 [ 1 ] ;
5353 if ( retry ) {
5454 // 再検索
55- // 前後3年で検索(3年はやりすぎなので保留)
56- // const seasons = ["winter", "spring", "summer", "autumn"];
57- // const result: string[] = [];
58- // const startYear = Number(year2) - 1;
59- // [...Array(3)].forEach((_, i) => {
60- // seasons.forEach(season => {
61- // result.push(`${startYear + i}-${season}`);
62- // });
63- // })
64- createReturnSeason ( year2 ) ;
65- returnSeason . push ( `${ Number ( year2 ) - 1 } -winter` ) ;
66- return returnSeason ;
55+ // 前後3年で検索
56+ const seasons = [ "winter" , "spring" , "summer" , "autumn" ] ;
57+ const result : string [ ] = [ ] ;
58+ const startYear = Number ( year2 ) - 1 ;
59+ [ ...Array ( 3 ) ] . forEach ( ( _ , i ) => {
60+ seasons . forEach ( season => {
61+ result . push ( `${ startYear + i } -${ season } ` ) ;
62+ } ) ;
63+ } )
64+
65+ return result ;
6766 } else {
6867 createReturnSeason ( year2 ) ;
6968 return returnSeason ;
@@ -163,30 +162,45 @@ const query = `
163162// 取得したアニメからタイトルが一致するものを探す
164163// dアニとannictで異なりそうな箇所を徐々に消していく
165164function findCorrectAnime ( titleText : string , data : any [ ] ) {
165+ // removeWords()を行った回数が最もすくないアニメのindexを返す
166+ let index = [ ] ;
167+ let findTime = [ ] ;
166168 for ( let i = 0 ; i < data . length ; i ++ ) {
167169 let annictTitle = data [ i ] . title ;
168170 let dTitle = titleText ;
171+ let added = false ;
169172 for ( let j = 1 ; j <= 5 ; j ++ ) {
170173 annictTitle = removeWords ( annictTitle , j ) ;
171174 dTitle = removeWords ( dTitle , j ) ;
172- if ( annictTitle === dTitle ) {
173- return i ;
175+ if ( annictTitle === dTitle && ! added ) {
176+ added = true ;
177+ index . push ( i )
178+ findTime . push ( j )
174179 }
175180 }
176181 }
177- return - 1 ;
182+ if ( index . length >= 1 ) {
183+ return index [ findTime . indexOf ( Math . min ( ...findTime ) ) ] ;
184+ }
185+
186+
187+ // 見つからなかった場合
188+ // 取得したアニメでエピソード差が小さいもののインデックスを出力
189+ const episodeCounts = document . querySelectorAll ( "a[id].clearfix" ) . length ;
190+ const arrayDiff = data . map ( ( eachAnimeData : any ) => Math . abs ( episodeCounts - eachAnimeData . episodesCount ) ) ;
191+ return arrayDiff . indexOf ( Math . min ( ...arrayDiff ) ) ;
178192}
179193function removeWords ( text : string , count : number ) {
180194 const remakeWords = {
181195 "Ⅰ" : "I" , "Ⅱ" : "II" , "Ⅲ" : "III" , "Ⅳ" : "IV" , "Ⅴ" : "V" , "Ⅵ" : "VI" , "Ⅶ" : "VII" , "Ⅷ" : "VIII" , "Ⅸ" : "IX" , "Ⅹ" : "X"
182196 } ;
183197 switch ( count ) {
184198 case 1 :
185- return text . replace ( / | | \u00A0 / g, "" ) ;
199+ return text . replace ( / | | \u00A0 / g, "" ) . replace ( "OriginalVideoAnimation" , "OVA" ) ;
186200 case 2 :
187201 return text . replace ( / [ A - Z a - z 0 - 9 : & ] / g, s => String . fromCharCode ( s . charCodeAt ( 0 ) - 65248 ) ) ;
188202 case 3 :
189- return text . replace ( / [ \[ [ 《 ( ( 【 < 〈 ~ - ― - ] .+ [ - ― - ~ 〉 > 】 ) ) 》 ] \] ] | [ 「 「 『 」 」 』 ] / g, "" ) ;
203+ return text . replace ( / [ \[ [ 《 【 < 〈 ~ - ― - ] .+ [ - ― - ~ 〉 > 】 》 ] \] ] | [ ( ( 「 「 『 」 」 』 ) ) ] / g, "" ) ;
190204 case 4 :
191205 return text . replace ( / 第 ? \d { 1 , 2 } 期 | S e a s o n \d { 1 } | 映 画 | 劇 場 版 | ( T V | テ レ ビ | 劇 場 ) ( ア ニ メ ー シ ョ ン | ア ニ メ ) | ^ ア ニ メ | O V A / g, "" ) ;
192206 case 5 :
0 commit comments