akkun3704 commited on
Commit
4ca849c
·
1 Parent(s): 9b34978

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +6 -65
index.js CHANGED
@@ -1,12 +1,9 @@
1
- const fs = require('fs')
2
  const os = require('os')
3
- // const uuid = require('uuid')
4
  const bytes = require('bytes')
5
  const sharp = require('sharp')
6
  const morgan = require('morgan')
7
  const express = require('express')
8
  const PDFDocument = require('pdfkit')
9
- const playwright = require('playwright-extra')
10
 
11
  const app = express()
12
  app.set('json spaces', 4)
@@ -48,31 +45,11 @@ app.post('/imagetopdf', async (req, res) => {
48
  }
49
  })
50
 
51
- app.all('/tgstogif', async (req, res) => {
52
- if (!['GET', 'POST'].includes(req.method)) return res.status(405).end()
53
- try {
54
- let tgsUrl = req.query.url
55
- if (req.method === 'POST') tgsUrl = req.body.url
56
- if (!tgsUrl) return res.json({ success: false, message: 'Required parameter url' })
57
- if (!tgsUrl.endsWith('.tgs')) return res.json({ success: false, message: 'Invalid tgs url' })
58
-
59
- const buffer = await tgsToGif(tgsUrl)
60
- res.setHeader('Content-Disposition', `attachment; filename=${Math.random().toString(36).slice(2)}.gif`)
61
- res.setHeader('Content-Type', 'image/gif')
62
- res.setHeader('Content-Length', buffer.byteLength)
63
- res.send(buffer)
64
- } catch (e) {
65
- console.log(e)
66
- e = String(e)
67
- res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
68
- }
69
- })
70
-
71
  const PORT = process.env.PORT || 7860
72
  app.listen(PORT, () => console.log('App running on port', PORT))
73
 
74
  function formatSize(num) {
75
- return bytes.format(+num || 0, { unitSeparator: ' ' })
76
  }
77
 
78
  function toPDF(urls) {
@@ -82,21 +59,19 @@ function toPDF(urls) {
82
  const doc = new PDFDocument({ margin: 0, size: 'A4' })
83
  const buffers = []
84
 
85
- const promises = urls.map(async (url, index) => {
86
  const response = await fetch(url, { headers: { referer: url }})
87
- if (!response.ok) return
88
 
89
  const type = response.headers.get('content-type')
90
- if (!/image/.test(type)) return reject(`Invalid Type: ${type}`)
91
 
92
  let buffer = Buffer.from(await response.arrayBuffer())
93
  if (/gif|webp/.test(type)) buffer = await sharp(buffer).png().toBuffer()
94
 
95
  doc.image(buffer, 0, 0, { fit: [595.28, 841.89], align: 'center', valign: 'center' })
96
- if (urls.length !== index + 1) doc.addPage()
97
- })
98
-
99
- await Promise.all(promises)
100
 
101
  doc.on('data', (chunk) => buffers.push(chunk))
102
  doc.on('end', () => resolve(Buffer.concat(buffers)))
@@ -109,37 +84,3 @@ function toPDF(urls) {
109
  })
110
  }
111
 
112
- async function tgsToGif(url) {
113
- let page
114
- try {
115
- const browser = await playwright['chromium'].launch({
116
- headless: true,
117
- executablePath: '/usr/bin/chromium',
118
- args: ['--no-sandbox']
119
- })
120
-
121
- page = await browser.newPage()
122
- await page.goto('https://www.emojibest.com/tgs-to-gif')
123
-
124
- const arrayBuffer = await (await fetch(url)).arrayBuffer()
125
- await page.setInputFiles('.el-upload__input', {
126
- name: 'file.tgs', buffer: Buffer.from(arrayBuffer)
127
- })
128
-
129
- const [download] = await Promise.all([
130
- page.waitForEvent('download'),
131
- page.click('.el-button.el-button--primary.el-button--mini'),
132
- page.click('.el-button.el-button--success.el-button--mini')
133
- ])
134
-
135
- const filePath = await download.path()
136
- const fileBuffer = await fs.promises.readFile(filePath)
137
- await fs.promises.unlink(filePath)
138
-
139
- return fileBuffer
140
- } catch (e) {
141
- throw e
142
- } finally {
143
- if (page) await page?.close?.()
144
- }
145
- }
 
 
1
  const os = require('os')
 
2
  const bytes = require('bytes')
3
  const sharp = require('sharp')
4
  const morgan = require('morgan')
5
  const express = require('express')
6
  const PDFDocument = require('pdfkit')
 
7
 
8
  const app = express()
9
  app.set('json spaces', 4)
 
45
  }
46
  })
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  const PORT = process.env.PORT || 7860
49
  app.listen(PORT, () => console.log('App running on port', PORT))
50
 
51
  function formatSize(num) {
52
+ return bytes(+num || 0, { unitSeparator: ' ' })
53
  }
54
 
55
  function toPDF(urls) {
 
59
  const doc = new PDFDocument({ margin: 0, size: 'A4' })
60
  const buffers = []
61
 
62
+ for (let i = 0; i < urls.length; i++) {
63
  const response = await fetch(url, { headers: { referer: url }})
64
+ if (!response.ok) continue
65
 
66
  const type = response.headers.get('content-type')
67
+ if (!/image/.test(type)) continue
68
 
69
  let buffer = Buffer.from(await response.arrayBuffer())
70
  if (/gif|webp/.test(type)) buffer = await sharp(buffer).png().toBuffer()
71
 
72
  doc.image(buffer, 0, 0, { fit: [595.28, 841.89], align: 'center', valign: 'center' })
73
+ if (urls.length !== i + 1) doc.addPage()
74
+ }
 
 
75
 
76
  doc.on('data', (chunk) => buffers.push(chunk))
77
  doc.on('end', () => resolve(Buffer.concat(buffers)))
 
84
  })
85
  }
86