| 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 = 1let 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()
 |