Dieses Modul dient zum Herunterladen jeder MP3-Datei aus einem Patreon-RSS-Feed.
Es befindet sich derzeit im Alpha-Stadium und funktioniert für meinen speziellen Anwendungsfall sehr gut und für andere Anwendungsfälle mit etwas Aufwand. Das nächste Update wird ein besseres Optionsobjekt bieten, mit dem Sie verschiedene Aspekte nach Ihren Wünschen steuern können. Im Moment werden einfach alle Audio-/MPEG-Dateien im RSS-Feed in das aktuelle Verzeichnis heruntergeladen.
Sie müssen Ihren individuellen RSS-Link von der Website der Patreon-Kampagne erhalten (patreon.com -> Seitenleiste unter „Mitgliedschaften“ -> individuelle Kampagne -> Registerkarte „Mitgliedschaft“ -> Schnelllinks -> „In anderen Podcast-Apps anhören“).
import getRssItems from 'patreon-mp3-downloader' ;
const items = await getRssItems ( 'https://www.patreon.com/rss/PATREONCAMPAIGN?auth=PATREON_PROVIDED_AUTH_TOKEN_STRING' ) ;
// this will be an array of Item objects, that has a title and a url
// as well as a download() method that you can use to trigger the download of
// an individual file.
console . log ( items ) ;
// since you have an array of objects that each contains it's own download method,
// you are free to download them as you like.
// download the latest item in the rss feed:
await items [ 0 ] . download ( ) ;
// download each item in sequence, starting with the latest, prepending a number to the file name:
let counter = items . length ;
for ( const item of items ) {
console . log ( `downloading ${ counter } - ${ item . fileName } ` ) ;
await item . download ( ` ${ counter } - ` ) ;
counter -- ;
}
// download every item in the feed at once (do not recommend for larger feeds):
await Promise . all ( items . map ( i => await i . download ( ) ) )
// you could also chunk the array with lodash, and Promise.all each chunk:
import _ from 'lodash' ;
const chunks = _ . chunk ( items , 5 ) ;
for ( const chunk of chunks ) {
await Promise . all ( chunk . map ( i => await i . download ( ) ) ) ;
}
Auch hier wird es im nächsten Update eine benutzerfreundlichere Oberfläche mit den oben genannten Methoden geben.
gemacht mit ? Und ?