@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
import fs from 'fs' |
||||
|
||||
let read = './xhs/imgs/' |
||||
let save = "./xhs/imgs2/"; |
||||
|
||||
const dirs = fs.readdirSync(read) |
||||
dirs.forEach(dictName => { |
||||
formatDict(read, dictName) |
||||
}) |
||||
|
||||
function formatDict(dir, name) { |
||||
let filePath = dir + name |
||||
fs.copyFile(filePath, save + name.replace('.webp', '.png'), () => { |
||||
}) |
||||
} |
@ -0,0 +1,90 @@
@@ -0,0 +1,90 @@
|
||||
import fs from 'fs' |
||||
import request from 'request' |
||||
import {nanoid} from 'nanoid' |
||||
|
||||
let fileName = './xhs.json' |
||||
let savefileName = './xhs-save.json' |
||||
let saveFileStr = fs.readFileSync(fileName, "utf8"); |
||||
let inputData = JSON.parse(saveFileStr); |
||||
|
||||
|
||||
const downloadImage = async (src, dest, callback) => { |
||||
console.log('下载:', src, dest, Date.now()) |
||||
return new Promise(resolve => { |
||||
request.head(src, (err, res, body) => { |
||||
if (err) { |
||||
console.log(err); |
||||
return; |
||||
} |
||||
src && |
||||
request(src) |
||||
.pipe(fs.createWriteStream(dest)) |
||||
.on("close", () => { |
||||
setTimeout(resolve, 1500) |
||||
callback && callback(null, dest); |
||||
}); |
||||
}); |
||||
}) |
||||
}; |
||||
|
||||
let saveFilePath = './imgs/' |
||||
|
||||
let imgList = [] |
||||
|
||||
async function test(list) { |
||||
for (let j = 0; j < list.length; j++) { |
||||
let a = list[j] |
||||
let coverUrl = a.info_list[0].url |
||||
|
||||
let rIndex = imgList.findIndex(v => v.url === coverUrl) |
||||
if (rIndex === -1) { |
||||
if (coverUrl.includes('http')) { |
||||
let name = nanoid() + '.png' |
||||
imgList.push({ |
||||
name, |
||||
url: coverUrl |
||||
}) |
||||
await downloadImage(coverUrl, saveFilePath + name, () => { |
||||
// console.log('close', name)
|
||||
list[j] = { |
||||
info_list: [{ |
||||
url: name |
||||
}] |
||||
} |
||||
fs.writeFileSync(savefileName, JSON.stringify(inputData, null, 2)); |
||||
}) |
||||
} |
||||
} else { |
||||
list[j] = { |
||||
info_list: [{ |
||||
url: imgList[rIndex].name |
||||
}] |
||||
} |
||||
console.log('重复') |
||||
fs.writeFileSync(savefileName, JSON.stringify(inputData, null, 2)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
for (let i = 0; i < inputData.slice(0, 111111).length; i++) { |
||||
let v = inputData[i] |
||||
|
||||
if (v.note_card?.cover) { |
||||
let url = v.note_card?.cover?.url_default |
||||
let name = nanoid() + '.png' |
||||
imgList.push({ |
||||
name, |
||||
url: url |
||||
}) |
||||
await downloadImage(url, saveFilePath + name, () => { |
||||
// console.log('close', name)
|
||||
v.note_card.cover = {url_default: name} |
||||
fs.writeFileSync(savefileName, JSON.stringify(inputData, null, 2)); |
||||
}) |
||||
} |
||||
|
||||
if (v.note_card?.image_list) { |
||||
await test(v.note_card.image_list) |
||||
} |
||||
} |
||||
|
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 123 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 131 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 41 KiB |