Spaces:
Running
Running
File size: 1,626 Bytes
9f3217a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | const fs = require('fs');
let code = fs.readFileSync('server.js', 'utf8');
const apiStr = `
/**
* Update YouTube Thumbnail Endpoint
*/
app.post('/api/thumbnail', async (req, res) => {
const auth = getOAuth2Client(req);
if (!auth) {
return res.status(401).json({ success: false, error: 'Google OAuth2 access token missing.' });
}
const { videoId, imageBase64 } = req.body;
if (!videoId || !imageBase64) {
return res.status(400).json({ success: false, error: 'Missing videoId or image data.' });
}
try {
const { google } = require('googleapis');
const youtube = google.youtube({ version: 'v3', auth });
const { Readable } = require('stream');
const base64Data = imageBase64.replace(/^data:image\\/\\w+;base64,/, '');
const buffer = Buffer.from(base64Data, 'base64');
// Guess mime type from base64 header if possible, else default to jpeg
let mimeType = 'image/jpeg';
if (imageBase64.startsWith('data:image/png')) mimeType = 'image/png';
const readable = new Readable();
readable._read = () => {};
readable.push(buffer);
readable.push(null);
const result = await youtube.thumbnails.set({
videoId: videoId,
media: {
mimeType: mimeType,
body: readable
}
});
res.json({ success: true, url: result.data.items[0].default.url });
} catch (err) {
console.error('Thumbnail upload error:', err);
res.status(500).json({ success: false, error: err.message });
}
});
// Start Server`;
code = code.replace('// Start Server', apiStr);
fs.writeFileSync('server.js', code);
console.log('API Added');
|