[AO] Fix downloading

This commit is contained in:
AnimeDL 2024-04-18 13:36:19 -07:00
parent 39fec7c35c
commit c74e6fcb18
3 changed files with 34 additions and 12 deletions

14
ao.ts
View file

@ -73,6 +73,12 @@ export default class AnimeOnegai implements ServiceClass {
'Doblaje en Portugués',
'Dublagem em português'
];
private defaultOptions: RequestInit = {
'headers': {
'origin': 'https://www.animeonegai.com',
'referer': 'https://www.animeonegai.com/',
}
};
constructor(private debug = false) {
this.cfg = yamlCfg.loadCfg();
@ -124,7 +130,7 @@ export default class AnimeOnegai implements ServiceClass {
}
public async doSearch(data: SearchData): Promise<SearchResponse> {
const searchReq = await this.req.getData(`https://api.animeonegai.com/v1/search/algolia/${encodeURIComponent(data.search)}?lang=${this.locale}`);
const searchReq = await this.req.getData(`https://api.animeonegai.com/v1/search/algolia/${encodeURIComponent(data.search)}?lang=${this.locale}`, this.defaultOptions);
if (!searchReq.ok || !searchReq.res) {
console.error('Search FAILED!');
return { isOk: false, reason: new Error('Search failed. No more information provided') };
@ -163,14 +169,14 @@ export default class AnimeOnegai implements ServiceClass {
}
public async getShow(id: number) {
const getSeriesData = await this.req.getData(`https://api.animeonegai.com/v1/asset/${id}?lang=${this.locale}`);
const getSeriesData = await this.req.getData(`https://api.animeonegai.com/v1/asset/${id}?lang=${this.locale}`, this.defaultOptions);
if (!getSeriesData.ok || !getSeriesData.res) {
console.error('Failed to get Show Data');
return { isOk: false };
}
const seriesData = await getSeriesData.res.json() as AnimeOnegaiSeries;
const getSeasonData = await this.req.getData(`https://api.animeonegai.com/v1/asset/content/${id}?lang=${this.locale}`);
const getSeasonData = await this.req.getData(`https://api.animeonegai.com/v1/asset/content/${id}?lang=${this.locale}`, this.defaultOptions);
if (!getSeasonData.ok || !getSeasonData.res) {
console.error('Failed to get Show Data');
return { isOk: false };
@ -777,7 +783,7 @@ export default class AnimeOnegai implements ServiceClass {
sxData.path = path.join(this.cfg.dir.content, sxData.file);
sxData.language = subLang;
if((options.dlsubs.includes('all') || options.dlsubs.includes(subLang.locale)) && sub.url.includes('.ass')) {
const getSubtitle = await this.req.getData(sub.url);
const getSubtitle = await this.req.getData(sub.url, AuthHeaders);
if (getSubtitle.ok && getSubtitle.res) {
console.info(`Subtitle Downloaded: ${sub.url}`);
const sBody = await getSubtitle.res.text();

View file

@ -421,6 +421,12 @@ const extFn = {
if ((options.url.hostname as string).match('hidive')) {
options.headers['referrer'] = 'https://www.hidive.com/';
options.headers['origin'] = 'https://www.hidive.com';
} else if ((options.url.hostname as string).includes('animecdn')) {
options.headers = {
origin: 'https://www.animeonegai.com',
referer: 'https://www.animeonegai.com/',
range: options.headers['range']
};
}
// console.log(' - Req:', options.url.pathname);
}

View file

@ -63,10 +63,15 @@ export async function parse(manifest: string, language?: LanguageItem, url?: str
if (playlist.sidx && playlist.segments.length == 0) {
const item = await fetch(playlist.sidx.uri, {
'method': 'head'
});
if (!item.ok) console.warn(`Unable to fetch byteLength for audio stream ${Math.round(playlist.attributes.BANDWIDTH/1024)}KiB/s`);
const options: RequestInit = {
method: 'head'
};
if (playlist.sidx.uri.includes('animecdn')) options.headers = {
'origin': 'https://www.animeonegai.com',
'referer': 'https://www.animeonegai.com/',
};
const item = await fetch(playlist.sidx.uri, options);
if (!item.ok) console.warn(`${item.status}: ${item.statusText}, Unable to fetch byteLength for audio stream ${Math.round(playlist.attributes.BANDWIDTH/1024)}KiB/s`);
const byteLength = parseInt(item.headers.get('content-length') as string);
let currentByte = playlist.sidx.map.byterange.length;
while (currentByte <= byteLength) {
@ -133,10 +138,15 @@ export async function parse(manifest: string, language?: LanguageItem, url?: str
ret[host] = { audio: [], video: [] };
if (playlist.sidx && playlist.segments.length == 0) {
const item = await fetch(playlist.sidx.uri, {
'method': 'head'
});
if (!item.ok) console.warn(`Unable to fetch byteLength for video stream ${playlist.attributes.RESOLUTION?.height}x${playlist.attributes.RESOLUTION?.width}@${Math.round(playlist.attributes.BANDWIDTH/1024)}KiB/s`);
const options: RequestInit = {
method: 'head'
};
if (playlist.sidx.uri.includes('animecdn')) options.headers = {
'origin': 'https://www.animeonegai.com',
'referer': 'https://www.animeonegai.com/',
};
const item = await fetch(playlist.sidx.uri, options);
if (!item.ok) console.warn(`${item.status}: ${item.statusText}, Unable to fetch byteLength for video stream ${playlist.attributes.RESOLUTION?.height}x${playlist.attributes.RESOLUTION?.width}@${Math.round(playlist.attributes.BANDWIDTH/1024)}KiB/s`);
const byteLength = parseInt(item.headers.get('content-length') as string);
let currentByte = playlist.sidx.map.byterange.length;
while (currentByte <= byteLength) {