X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftools%2Fimport-youtube.ts;h=ab91afbc060a263932bce94d6f6109a966da0679;hb=02988fdc0bdd345bddf89171d258822cab4229d6;hp=96bce29b5d2a36f3903fdf58ad8a14c629007ae3;hpb=a87d467ad76505312fe63c597ee03a66126d0492;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tools/import-youtube.ts b/server/tools/import-youtube.ts index 96bce29b5..ab91afbc0 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 ( @@ -27,6 +28,10 @@ if ( run().catch(err => console.error(err)) let accessToken: string +const processOptions = { + cwd: __dirname, + maxBuffer: Infinity +} async function run () { const res = await getClient(program['url']) @@ -43,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 @@ -56,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['language']) } console.log('I\'m finished!') @@ -64,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) @@ -79,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() }) @@ -95,10 +102,26 @@ 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) + .map(t => t.normalize()) + .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, @@ -108,14 +131,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) }