X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftools%2Fimport-youtube.ts;h=295109cd8d05117dc1f1f7c33851d255c1c2cd79;hb=34cbef8c6cc912143a421413bdd832c4adcc556a;hp=d57798d5b22aa770b197951c85eac792f4bde8f8;hpb=e78720386f9a3187f30c0dc74a27ced837977ca9;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tools/import-youtube.ts b/server/tools/import-youtube.ts index d57798d5b..295109cd8 100644 --- a/server/tools/import-youtube.ts +++ b/server/tools/import-youtube.ts @@ -1,10 +1,10 @@ import * as program from 'commander' -import { createWriteStream } from 'fs' import { join } from 'path' -import { cursorTo } from 'readline' import * as youtubeDL from 'youtube-dl' import { VideoPrivacy } from '../../shared/models/videos' import { unlinkPromise } from '../helpers/core-utils' +import { doRequestAndSaveToFile } from '../helpers/requests' +import { CONSTRAINTS_FIELDS } from '../initializers' import { getClient, getVideoCategories, login, searchVideo, uploadVideo } from '../tests/utils' program @@ -12,6 +12,7 @@ program .option('-U, --username ', 'Username') .option('-p, --password ', 'Password') .option('-y, --youtube-url ', 'Youtube URL') + .option('-l, --language ', 'Language code') .parse(process.argv) if ( @@ -20,12 +21,17 @@ if ( !program['password'] || !program['youtubeUrl'] ) { - throw new Error('All arguments are required.') + console.error('All arguments are required.') + process.exit(-1) } run().catch(err => console.error(err)) let accessToken: string +const processOptions = { + cwd: __dirname, + maxBuffer: Infinity +} async function run () { const res = await getClient(program['url']) @@ -42,7 +48,8 @@ async function run () { const res2 = await login(program['url'], client, user) accessToken = res2.body.access_token - youtubeDL.getInfo(program['youtubeUrl'], [ '-j', '--flat-playlist' ], async (err, info) => { + const options = [ '-j', '--flat-playlist' ] + youtubeDL.getInfo(program['youtubeUrl'], options, processOptions, async (err, info) => { if (err) throw err // Normalize utf8 fields @@ -55,7 +62,7 @@ async function run () { console.log('Will download and upload %d videos.\n', videos.length) for (const video of videos) { - await processVideo(video) + await processVideo(video, program['languageCode']) } console.log('I\'m finished!') @@ -63,7 +70,7 @@ async function run () { }) } -function processVideo (video: { name: string, url: string }) { +function processVideo (video: { name: string, url: string }, languageCode: number) { return new Promise(async res => { const result = await searchVideo(program['url'], video.name) @@ -78,15 +85,16 @@ function processVideo (video: { name: string, url: string }) { console.log('Downloading video "%s"...', video.name) - youtubeDL.exec(video.url, [ '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]', '-o', path ], {}, async (err, output) => { + const options = [ '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]', '-o', path ] + youtubeDL.exec(video.url, options, processOptions, async (err, output) => { if (err) return console.error(err) console.log(output.join('\n')) - youtubeDL.getInfo(video.url, async (err, videoInfo) => { + youtubeDL.getInfo(video.url, undefined, processOptions, async (err, videoInfo) => { if (err) return console.error(err) - await uploadVideoOnPeerTube(normalizeObject(videoInfo), path) + await uploadVideoOnPeerTube(normalizeObject(videoInfo), path, languageCode) return res() }) @@ -94,10 +102,23 @@ function processVideo (video: { name: string, url: string }) { }) } -async function uploadVideoOnPeerTube (videoInfo: any, videoPath: string) { +async function uploadVideoOnPeerTube (videoInfo: any, videoPath: string, language?: number) { const category = await getCategory(videoInfo.categories) const licence = getLicence(videoInfo.license) - const language = 13 + let tags = [] + if (Array.isArray(videoInfo.tags)) { + tags = videoInfo.tags.filter(t => t.length < CONSTRAINTS_FIELDS.VIDEOS.TAG.max).slice(0, 5) + } + + let thumbnailfile + if (videoInfo.thumbnail) { + thumbnailfile = join(__dirname, 'thumbnail.jpg') + + await doRequestAndSaveToFile({ + method: 'GET', + uri: videoInfo.thumbnail + }, thumbnailfile) + } const videoAttributes = { name: videoInfo.title, @@ -107,14 +128,21 @@ async function uploadVideoOnPeerTube (videoInfo: any, videoPath: string) { nsfw: false, commentsEnabled: true, description: videoInfo.description, - tags: videoInfo.tags.slice(0, 5), + tags, privacy: VideoPrivacy.PUBLIC, - fixture: videoPath + fixture: videoPath, + thumbnailfile, + previewfile: thumbnailfile } console.log('\nUploading on PeerTube video "%s".', videoAttributes.name) await uploadVideo(program['url'], accessToken, videoAttributes) + await unlinkPromise(videoPath) + if (thumbnailfile) { + await unlinkPromise(thumbnailfile) + } + console.log('Uploaded video "%s"!\n', videoAttributes.name) }