Add --extid for crunchyroll
Allows downloading or viewing of old Crunchyroll ID's such as: SRZ.282651 VOL.26453 EPI.842919 FLM.268837 Fixes #351 #249
This commit is contained in:
parent
bfe4ae6164
commit
4a135092e9
4 changed files with 63 additions and 3 deletions
49
crunchy.ts
49
crunchy.ts
|
|
@ -144,6 +144,16 @@ export default class Crunchy implements ServiceClass {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
} else if (argv.extid) {
|
||||||
|
await this.refreshToken();
|
||||||
|
const selected = await this.getObjectById(argv.extid, false, true);
|
||||||
|
for (const select of selected as Partial<CrunchyEpMeta>[]) {
|
||||||
|
if (!(await this.downloadEpisode(select as CrunchyEpMeta, {...argv, skipsubs: false }))) {
|
||||||
|
console.error(`Unable to download selected episode ${select.episodeNumber}`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
console.info('No option selected or invalid value entered. Try --help.');
|
console.info('No option selected or invalid value entered. Try --help.');
|
||||||
|
|
@ -852,13 +862,48 @@ export default class Crunchy implements ServiceClass {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getObjectById(e?: string, earlyReturn?: boolean): Promise<ObjectInfo|Partial<CrunchyEpMeta>[]|undefined> {
|
public async getObjectById(e?: string, earlyReturn?: boolean, external_id?: boolean): Promise<ObjectInfo|Partial<CrunchyEpMeta>[]|undefined> {
|
||||||
if(!this.cmsToken.cms){
|
if(!this.cmsToken.cms){
|
||||||
console.error('Authentication required!');
|
console.error('Authentication required!');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const doEpsFilter = parseSelect(e as string);
|
let convertedObjects;
|
||||||
|
if (external_id) {
|
||||||
|
const epFilter = parseSelect(e as string);
|
||||||
|
const objectIds = [];
|
||||||
|
for (const ob of epFilter.values) {
|
||||||
|
const extIdReqOpts = [
|
||||||
|
api.beta_cms,
|
||||||
|
this.cmsToken.cms.bucket,
|
||||||
|
'/channels/crunchyroll/objects',
|
||||||
|
'?',
|
||||||
|
new URLSearchParams({
|
||||||
|
'external_id': ob,
|
||||||
|
'Policy': this.cmsToken.cms.policy,
|
||||||
|
'Signature': this.cmsToken.cms.signature,
|
||||||
|
'Key-Pair-Id': this.cmsToken.cms.key_pair_id,
|
||||||
|
}),
|
||||||
|
].join('');
|
||||||
|
|
||||||
|
const extIdReq = await this.req.getData(extIdReqOpts);
|
||||||
|
if (!extIdReq.ok || !extIdReq.res) {
|
||||||
|
console.error('Objects Request FAILED!');
|
||||||
|
if (extIdReq.error && extIdReq.error.res && extIdReq.error.res.body) {
|
||||||
|
console.info('[INFO] Body:', extIdReq.error.res.body);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const oldObjectInfo = JSON.parse(extIdReq.res.body) as Record<any, any>;
|
||||||
|
for (const object of oldObjectInfo.items) {
|
||||||
|
objectIds.push(object.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
convertedObjects = objectIds.join(',');
|
||||||
|
}
|
||||||
|
|
||||||
|
const doEpsFilter = parseSelect(convertedObjects ?? e as string);
|
||||||
|
|
||||||
if(doEpsFilter.values.length < 1){
|
if(doEpsFilter.values.length < 1){
|
||||||
console.info('\nObjects not selected!\n');
|
console.info('\nObjects not selected!\n');
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ let argvC: {
|
||||||
series: string | undefined;
|
series: string | undefined;
|
||||||
s: string | undefined;
|
s: string | undefined;
|
||||||
e: string | undefined;
|
e: string | undefined;
|
||||||
|
extid: string | undefined;
|
||||||
q: number;
|
q: number;
|
||||||
x: number;
|
x: number;
|
||||||
kstream: number;
|
kstream: number;
|
||||||
|
|
|
||||||
|
|
@ -165,6 +165,17 @@ const args: TAppArg<boolean|number|string|unknown[]>[] = [
|
||||||
usage: '${selection}',
|
usage: '${selection}',
|
||||||
alias: 'episode'
|
alias: 'episode'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'extid',
|
||||||
|
group: 'dl',
|
||||||
|
describe: 'Set the external id to lookup/download',
|
||||||
|
docDescribe: 'Set the external id to lookup/download.'
|
||||||
|
+ '\nAllows you to download or view legacy Crunchyroll Ids ',
|
||||||
|
service: ['crunchy'],
|
||||||
|
type: 'string',
|
||||||
|
usage: '${selection}',
|
||||||
|
alias: 'externalid'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'q',
|
name: 'q',
|
||||||
group: 'dl',
|
group: 'dl',
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,9 @@ const parseSelect = (selectString: string, but = false) : {
|
||||||
if (part.match(/[0-9A-Z]{9}/)) {
|
if (part.match(/[0-9A-Z]{9}/)) {
|
||||||
select.push(part);
|
select.push(part);
|
||||||
return;
|
return;
|
||||||
|
} else if (part.match(/[A-Z]{3}\.[0-9]*/)) {
|
||||||
|
select.push(part);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
const match = part.match(/[A-Za-z]+/);
|
const match = part.match(/[A-Za-z]+/);
|
||||||
if (match && match.length > 0) {
|
if (match && match.length > 0) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue