Skip to content

Commit b52a9b6

Browse files
committed
chore: add 11anim crawler
1 parent 0edd4c3 commit b52a9b6

3 files changed

Lines changed: 67 additions & 0 deletions

File tree

src/app/crawlers/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,4 @@ export { VoirAnimeCrawler } from './vostfr/voiranime.crawler';
3030
export { VoirAnimeOrgCrawler } from './vostfr/voiranimeorg.crawler';
3131
export { VostFreeCrawler } from './vostfr/vostfree.crawler';
3232
export { WacVostfrCrawler } from './vostfr/wacvostfr.crawler';
33+
export { ElevenAnimCrawler } from './vostfr/11anim.crawler';
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { LatestEpisodesCrawler } from '../abstract/latest-episodes.crawler';
2+
import { ScraperService } from '../../services/scraper.service';
3+
import { Episode } from '../../models/episode';
4+
import { frenchDays, frenchMonths } from '../../helpers/date.helper';
5+
import { Observable } from 'rxjs';
6+
7+
export class ElevenAnimCrawler extends LatestEpisodesCrawler {
8+
constructor(private scraper: ScraperService) {
9+
super('11Anim', 'https://11anim.net/');
10+
this.filters = {
11+
...this.filters,
12+
title: (text: string) => {
13+
return text
14+
.replace('VOSTFR', '')
15+
.replace(/(.*) Episode (\d+)/i, '$1')
16+
.replace(/ $/, '');
17+
},
18+
number: (text: string) => {
19+
const num = text.replace('VOSTFR', '').match(/(.*) Episode (\d+)/i);
20+
return num?.length ? +num[2] : 1;
21+
},
22+
subtitles: (text: string) => {
23+
return 'vostfr';
24+
},
25+
date: (text: string) => {
26+
let date = text.replace('Ajouté le ', '').toLowerCase();
27+
date = date.replace(
28+
new RegExp('^(' + frenchDays.join('|') + ')', 'g'),
29+
''
30+
);
31+
date = date
32+
.replace(
33+
new RegExp('(' + Object.keys(frenchMonths).join('|') + ')', 'g'),
34+
(month) => frenchMonths[month]
35+
)
36+
.trim();
37+
date = date.split(' ').reverse().join('-');
38+
return new Date(date)?.getTime();
39+
},
40+
};
41+
}
42+
43+
_getLatestEpisodes(): Observable<Episode[]> {
44+
return this.scraper.scrape(
45+
`${this.baseUrl}`,
46+
'#main .loop > article',
47+
{
48+
anime: {
49+
title: 'div > a > span | title',
50+
cover: 'div img@src | concatUrl',
51+
},
52+
number: 'div > a > span | number',
53+
streamLinks: [
54+
{
55+
url: 'div > a@href',
56+
lang: '| subtitles',
57+
},
58+
],
59+
releaseDate: '.entry-meta > span > small | date',
60+
},
61+
this.filters
62+
);
63+
}
64+
}

src/app/services/crawlers.service.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
AnimixPlayCrawler,
2525
WacVostfrCrawler,
2626
GogoPlayCrawler,
27+
ElevenAnimCrawler,
2728
} from '../crawlers';
2829

2930
@Injectable({
@@ -41,6 +42,7 @@ export class CrawlersService {
4142
this.add(new NekoSamaCrawler(this.scraper));
4243
this.add(new VoirAnimeCrawler(this.scraper));
4344
this.add(new VoirAnimeOrgCrawler(this.scraper));
45+
this.add(new ElevenAnimCrawler(this.scraper));
4446
this.add(new MavAnimesCrawler(this.scraper));
4547
this.add(new AnimeResistanceCrawler(this.scraper));
4648
this.add(new OtakuFrCrawler(this.scraper));

0 commit comments

Comments
 (0)