123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));
- const fs = require('fs')
- const path = require('path')
- const util = require('util')
- const streamPipeline = util.promisify(require('stream').pipeline)
- const stat = util.promisify(fs.stat)
- // const relationship = fs.createWriteStream('./scripts/colexiu-xmls/index.json')
- const xmlResult = fs.createWriteStream('./scripts/xmlresult.txt')
- const relationshipJSON = fs.readFileSync('./scripts/colexiu-xmls/index.json')
- const Authorization = 'bearer 54fa202e-3b32-40e5-b463-3d277f3f82d0'
- const LIST_URL = 'https://dev.colexiu.com/api-admin/music/sheet/list'
- const FetchList = async (page = 1, pageSize = 100) => {
- const response = await fetch(LIST_URL, {
- method: 'POST',
- headers: {
- Authorization,
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({
- page,
- limit: pageSize,
- })
- })
- const json = await response.json()
- console.log(json)
- return json
- }
- let page = 1
- let errortimes = 0
- /**
- * 从接口读取所有数据信息
- */
- const start = async () => {
- console.log(page)
- try {
- const json = await FetchList(page)
- for (const item of json.data.rows) {
- relationship.write(JSON.stringify(item) + '\n')
- }
- if (json.data.totalPage > page) {
- page++
- await start()
- }
- errortimes = 0
- } catch (error) {
- if (errortimes < 3) {
- await start()
- }
- console.log(error)
- }
- }
- // start()
- const getFilename = url => {
- return decodeURI(new URL(url).pathname).replace(/\//ig, ' ').trim().split(' ').join('-')
- }
- const FetchXml = async url => {
- const filename = getFilename(url)
- const response = await fetch(url, {
- method: 'GET',
- })
- console.log(url, response)
- if (response.status !== 200) throw new Error(`unexpected response ${response.statusText}`)
- await streamPipeline(response.body, fs.createWriteStream(path.join(__dirname, 'colexiu-xmls', filename)))
- }
- const ids = ['2366', '2365', '2364', '2363', '2353', '2279', '2223', '2178', '2162', '1822', '1127', '959', '942', '809', '798', '790', '726', '722', '21', '9', '6', '5', '4']
- /**
- * 验证数据
- */
- const errorlist = {}
- const verification = async () => {
- const list = await relationshipJSON.toString()
- const items = list.split('\n')
- for (const item of items) {
- try {
- const json = JSON.parse(item)
- // if (!ids.includes(json.id + '')) {
- // continue
- // }
- const txt = ['曲目id:' + json.id,'曲目名称:' + json.musicSheetName, '音频类型:' + json.audioType].join(' ')
- // xmlResult.write(txt + '\n')
- if (!json.xmlFileUrl) {
- errorlist[json.id] = '错误原因:没有xml文件'
- console.log(errorlist[json.id])
- }
- const subfixname = json.xmlFileUrl.split('.').pop()
- if (subfixname !== 'xml') {
- errorlist[json.id] = '错误原因:xml文件格式不对,文件是:' + subfixname
- }
- // console.log(json.xmlFileUrl)
- // try {
- // const filestat = fs.statSync(path.join(__dirname, 'colexiu-xmls', getFilename(json.xmlFileUrl)))
- // console.log(filestat)
- // } catch (error) {
- // console.log(error)
- // }
- if (!errorlist[json.id]) {
- try {
- // await FetchXml(json.xmlFileUrl)
- fs.statSync(path.join(__dirname, 'colexiu-xmls', getFilename(json.xmlFileUrl)))
- } catch (error) {
- console.log(error)
- errorlist[json.id] = '错误原因:文件下载失败'
- }
- }
- if (errorlist[json.id]) {
- xmlResult.write([json.id, json.musicSheetName, errorlist[json.id]].join(' ') + '\n')
- }
- } catch (error) {
- console.log('解析错误:' + item)
- }
- }
- // xmlResult.write('\n\n\n')
- // xmlResult.write(JSON.stringify(errorlist) + '\n')
- }
- // verification()
- const isXmlFile = async filepath => {
- try {
- const readerfile = util.promisify(fs.readFile)
- const xml = await readerfile(filepath)
- return xml.indexOf('<?xml ') === 0
- } catch (error) {
- return false
- }
- }
- /**
- * 验证是否是xml文件
- */
- const xmlVerification = async () => {
- const xmls = fs.readdirSync(path.join(__dirname, 'colexiu-xmls'))
- for (const xml of xmls) {
- const filepath = path.join(__dirname, 'colexiu-xmls', xml)
- const fileStat = await stat(filepath)
- if (xml.split('.').pop() !== 'xml' || !fileStat.isFile()) {
- continue
- }
- const isxml = await isXmlFile(filepath)
- if(!isxml) {
- console.log(xml)
- }
- }
- }
- xmlVerification()
- const overlay = async () => {
- const xmlinfo = {}
- const xmlstring = fs.readFileSync(path.join(__dirname, 'colexiu-xmls', 'index.json'))
- const list = xmlstring.toString().split('\n')
- for (const item of list) {
- try {
- const json = JSON.parse(item)
- if (!xmlinfo[json.xmlFileUrl]) {
- xmlinfo[json.xmlFileUrl] = 0
- }
- xmlinfo[json.xmlFileUrl] = xmlinfo[json.xmlFileUrl] + 1
- } catch (error) {}
- }
- console.log(xmlinfo)
- }
- // overlay()
|