最近在前端面试题宝典刷面试题,顺便用ai写一下答案,再发个文章,但是从网页上一个一个复制题目太麻烦了,写文章的时候还不好排版,越写越烦。于是我就去看了一下前端面试题宝典的获取面试题首页的网络接口api,写了一个一键获取所有题目的js文件
import axios from 'axios'
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
let res = await axios.get(
'https://fe.ecool.fun/api/exercise/list?vid=9&tagId=&exerciseCate=0&pageNum=1&pageSize=10000&ignoreMaster=1&difficulty=&orderBy=default&order=desc'
)
let a = res.data.data.list
let total = res.data.data.totalCount
console.log(total)
//获取所有的title
let titleList = res.data.data.list.map((item) => item.title)
console.log(titleList)
const titleall = titleList.map((item, index) => {
return ` *${index + 1}. ${item}*\n`
})
// 将titleall写入titlelist.md中
fs.writeFileSync(path.join(__dirname, 'titlelist.md'), titleall.join(''))
结果是这样
又看了一下他们获取答案的api,顺便把答案也搞出来。
代码
import axios from 'axios'
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
//获取所有问题列表
let res = await axios.get(
'https://fe.ecool.fun/api/exercise/list?vid=9&tagId=&exerciseCate=0&pageNum=1&pageSize=10000&ignoreMaster=1&difficulty=&orderBy=default&order=desc'
)
//面试题列表
let a = res.data.data.list
//总数
let total = res.data.data.totalCount
console.log(total)
//获取所有的title
let titleList = res.data.data.list.map((item) => item.title)
console.log(titleList)
const titleall = titleList.map((item, index) => {
return ` *${index + 1}. ${item}*\n`
})
// 将titleall写入titlelist.md中
fs.writeFileSync(path.join(__dirname, 'titlelist.md'), titleall.join(''))
//获取所有exerciseKey
let exerciseKeys = []
exerciseKeys = a.map((item) => item.exerciseKey)
//封装请求方法 https://fe.ecool.fun/api/exercise/practice/detail?vid=9&difficulty=&exerciseCate=2&ignoreMaster=1&order=desc&orderBy=default&tagId=0&exerciseKey=84265789-cf7a-4d95-b724-665234c6eb10
async function getExerciseDetail(exerciseKey) {
const res = await axios.get(
`https://fe.ecool.fun/api/exercise/practice/detail?vid=9&difficulty=&exerciseCate=2&ignoreMaster=1&order=desc&orderBy=default&tagId=0&exerciseKey=${exerciseKey}`
)
return res.data
}
//通过axois获取所有题目 用for循环将结果res中的title、desc、options、explanation提取出来,对option做一下处理
let exerciseData = []
for (let i = 0; i < exerciseKeys.length; i++) {
const exerciseKey = exerciseKeys[i]
const res = await getExerciseDetail(exerciseKey)
const exercise = res.data
console.log(i)
exerciseData.push({
title: exercise.title,
desc: exercise.desc,
options: exercise.options
? '选项:\n' +
JSON.parse(exercise.options)
.options.map((item, index) => `${index}. ${item}\n`)
.join('') +
`answer: ${JSON.parse(exercise.options).answer}`
: '',
explanation: exercise.explanation
})
}
// 目标文件
const filePath0 = path.join(__dirname, 'test0.md')
const filePath1 = path.join(__dirname, 'test1.md')
const filePath2 = path.join(__dirname, 'test2.md')
const filePath3 = path.join(__dirname, 'test3.md')
const filePath4 = path.join(__dirname, 'test4.md')
const filePath5 = path.join(__dirname, 'test5.md')
const filePath6 = path.join(__dirname, 'test6.md')
const filePath7 = path.join(__dirname, 'test7.md')
// 将exerciseData转成1.xxx 2.xxx 的形式
const content = exerciseData.map((item, index) => {
console.log(index)
return `# *${index + 1}. ${item.title}*\n\n${item.desc || ''}\n\n${item.options || ''}\n\n${item.explanation}`
})
// 将content的每200项写入一个文件,1482条太多了typora会不加载
fs.writeFileSync(filePath0, content.slice(0, 200).join('\n\n---\n\n'))
console.log('1.写入成功')
fs.writeFileSync(filePath1, content.slice(200, 400).join('\n\n---\n\n'))
console.log('2.写入成功')
fs.writeFileSync(filePath2, content.slice(400, 600).join('\n\n---\n\n'))
console.log('3.写入成功')
fs.writeFileSync(filePath3, content.slice(600, 800).join('\n\n---\n\n'))
console.log('4.写入成功')
fs.writeFileSync(filePath4, content.slice(800, 1000).join('\n\n---\n\n'))
console.log('5.写入成功')
fs.writeFileSync(filePath5, content.slice(1000, 1200).join('\n\n---\n\n'))
console.log('6.写入成功')
fs.writeFileSync(filePath6, content.slice(1200, 1400).join('\n\n---\n\n'))
console.log('7.写入成功')
fs.writeFileSync(filePath7, content.slice(1400, 1600).join('\n\n---\n\n'))
console.log('8.写入成功')
ok,暂时就这样吧。
新更改 每十条进行一次写入
import axios from 'axios'
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
let res = await axios.get(
'https://fe.ecool.fun/api/exercise/list?vid=9&tagId=&exerciseCate=0&pageNum=1&pageSize=10000&ignoreMaster=1&difficulty=&orderBy=default&order=desc'
)
let a = res.data.data.list
let total = res.data.data.totalCount
console.log(total)
//获取所有的title
let titleList = res.data.data.list.map((item) => item.title)
console.log(titleList)
const titleall = titleList.map((item, index) => {
return ` ${index + 1}. ${item}\n`
})
// 将titleall写入titlelist.md中
fs.writeFileSync(path.join(__dirname, 'titlelist.md'), titleall.join(''))
//获取所有exerciseKey
let exerciseKeys = []
exerciseKeys = a.map((item) => item.exerciseKey)
console.log(exerciseKeys)
// https://fe.ecool.fun/api/exercise/practice/detail?vid=9&difficulty=&exerciseCate=2&ignoreMaster=1&order=desc&orderBy=default&tagId=0&exerciseKey=84265789-cf7a-4d95-b724-665234c6eb10
// const exerciseKey = '84265789-cf7a-4d95-b724-665234c6eb10'
//使用axios
//封装请求方法 https://fe.ecool.fun/api/exercise/practice/detail?vid=9&difficulty=&exerciseCate=2&ignoreMaster=1&order=desc&orderBy=default&tagId=0&exerciseKey=84265789-cf7a-4d95-b724-665234c6eb10
async function getExerciseDetail(exerciseKey) {
const res = await axios.get(
`https://fe.ecool.fun/api/exercise/practice/detail?vid=9&difficulty=&exerciseCate=2&ignoreMaster=1&order=desc&orderBy=default&tagId=0&exerciseKey=${exerciseKey}`
)
return res.data
}
//通过axois获取所有题目 用for循环将结果res中的title、desc、options、explanation提取出来
let exerciseData = []
for (let i = 0; i < exerciseKeys.length; i++) {
const exerciseKey = exerciseKeys[i]
const res = await getExerciseDetail(exerciseKey)
const exercise = res.data
console.log(i)
exerciseData.push({
title: exercise.title,
desc: exercise.desc,
options: exercise.options
? '选项:\n' +
JSON.parse(exercise.options)
.options.map((item, index) => `${index}. ${item}\n`)
.join('') +
`answer: ${JSON.parse(exercise.options).answer}`
: '',
explanation: exercise.explanation
})
}
// const filePath0 = path.join(__dirname, 'test0.md')
// const filePath1 = path.join(__dirname, 'test1.md')
// const filePath2 = path.join(__dirname, 'test2.md')
// const filePath3 = path.join(__dirname, 'test3.md')
// const filePath4 = path.join(__dirname, 'test4.md')
// const filePath5 = path.join(__dirname, 'test5.md')
// const filePath6 = path.join(__dirname, 'test6.md')
// const filePath7 = path.join(__dirname, 'test7.md')
// 将exerciseData以1.xxx 2.xxx 的形式写入test.md
const content = exerciseData.map((item, index) => {
console.log(index)
return `# *${index + 1}. ${item.title}*\n\n${item.desc || ''}\n\n${item.options || ''}\n\n${item.explanation}`
})
// 循环打印content每十项
// 定义一个函数来分组数据并写入文件
function writeGroupedExercisesToFile(content, groupNamePrefix) {
// 每组包含的题目数量
const itemsPerGroup = 10
// 分组
for (let groupIndex = 0; groupIndex < content.length; groupIndex += itemsPerGroup) {
const end = Math.min(groupIndex + itemsPerGroup, content.length)
const groupContent = content.slice(groupIndex, end).join('\n')
// 构建文件路径
const filePath = path.join(
__dirname,
`${groupNamePrefix}_${Math.floor(groupIndex / itemsPerGroup)}.md`
)
// 写入文件
fs.writeFileSync(filePath, groupContent)
}
}
// 调用函数将数据分组并写入文件
writeGroupedExercisesToFile(content, 'test')
console.log('所有题目已按组写入文件。')
// fs.writeFileSync(filePath0, content.slice(0, 200).join('\n\n---\n\n'))
// console.log('1.写入成功')
// fs.writeFileSync(filePath1, content.slice(200, 400).join('\n\n---\n\n'))
// console.log('2.写入成功')
// fs.writeFileSync(filePath2, content.slice(400, 600).join('\n\n---\n\n'))
// console.log('3.写入成功')
// fs.writeFileSync(filePath3, content.slice(600, 800).join('\n\n---\n\n'))
// console.log('4.写入成功')
// fs.writeFileSync(filePath4, content.slice(800, 1000).join('\n\n---\n\n'))
// console.log('5.写入成功')
// fs.writeFileSync(filePath5, content.slice(1000, 1200).join('\n\n---\n\n'))
// console.log('6.写入成功')
// fs.writeFileSync(filePath6, content.slice(1200, 1400).join('\n\n---\n\n'))
// console.log('7.写入成功')
// fs.writeFileSync(filePath7, content.slice(1400, 1600).join('\n\n---\n\n'))
// console.log('8.写入成功')
新更改 倒序写入
import axios from 'axios'
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
let res = await axios.get(
'https://fe.ecool.fun/api/exercise/list?vid=9&tagId=&exerciseCate=0&pageNum=1&pageSize=10000&ignoreMaster=1&difficulty=&orderBy=default&order=desc'
)
let a = res.data.data.list
let total = res.data.data.totalCount
console.log(total)
//获取所有的title
let titleList = res.data.data.list.map((item) => item.title)
console.log(titleList)
const titleall = titleList.map((item, index) => {
return ` ${index + 1}. ${item}\n`
})
// 将titleall写入titlelist.md中
fs.writeFileSync(path.join(__dirname, 'titlelist.md'), titleall.join(''))
//获取所有exerciseKey
let exerciseKeys = []
exerciseKeys = a.map((item) => item.exerciseKey)
console.log(exerciseKeys)
// https://fe.ecool.fun/api/exercise/practice/detail?vid=9&difficulty=&exerciseCate=2&ignoreMaster=1&order=desc&orderBy=default&tagId=0&exerciseKey=84265789-cf7a-4d95-b724-665234c6eb10
// const exerciseKey = '84265789-cf7a-4d95-b724-665234c6eb10'
//使用axios
//封装请求方法 https://fe.ecool.fun/api/exercise/practice/detail?vid=9&difficulty=&exerciseCate=2&ignoreMaster=1&order=desc&orderBy=default&tagId=0&exerciseKey=84265789-cf7a-4d95-b724-665234c6eb10
async function getExerciseDetail(exerciseKey) {
const res = await axios.get(
`https://fe.ecool.fun/api/exercise/practice/detail?vid=9&difficulty=&exerciseCate=2&ignoreMaster=1&order=desc&orderBy=default&tagId=0&exerciseKey=${exerciseKey}`
)
return res.data
}
//通过axois获取所有题目 用for循环将结果res中的title、desc、options、explanation提取出来
let exerciseData = []
for (let i = 0; i < exerciseKeys.length; i++) {
const exerciseKey = exerciseKeys[i]
const res = await getExerciseDetail(exerciseKey)
const exercise = res.data
console.log(`${i}/${total}`)
exerciseData.push({
title: exercise.title,
desc: exercise.desc,
options: exercise.options
? '选项:\n' +
JSON.parse(exercise.options)
.options.map((item, index) => `${index}. ${item}\n`)
.join('') +
`answer: ${JSON.parse(exercise.options).answer}`
: '',
explanation: exercise.explanation
})
}
// const filePath0 = path.join(__dirname, 'test0.md')
// const filePath1 = path.join(__dirname, 'test1.md')
// const filePath2 = path.join(__dirname, 'test2.md')
// const filePath3 = path.join(__dirname, 'test3.md')
// const filePath4 = path.join(__dirname, 'test4.md')
// const filePath5 = path.join(__dirname, 'test5.md')
// const filePath6 = path.join(__dirname, 'test6.md')
// const filePath7 = path.join(__dirname, 'test7.md')
// 将exerciseData以1.xxx 2.xxx 的形式写入test.md
const content = exerciseData.map((item, index) => {
console.log(index)
return `# *${index + 1}. ${item.title}*\n\n${item.desc || ''}\n\n${item.options || ''}\n\n${item.explanation}`
})
// 将exerciseData以1.xxx 2.xxx 的形式翻转写入contentfz
const contentfz = exerciseData.map((item, index) => {
return `# *${total - index}. ${item.title}*\n\n${item.desc || ''}\n\n${item.options || ''}\n\n${item.explanation}`
})
// 循环打印content每十项
// 定义一个函数来分组数据并写入文件
function writeGroupedExercisesToFile(content, groupNamePrefix) {
// 每组包含的题目数量
const itemsPerGroup = 10
// 分组
for (let groupIndex = 0; groupIndex < content.length; groupIndex += itemsPerGroup) {
const end = Math.min(groupIndex + itemsPerGroup, content.length)
const groupContent = content.slice(groupIndex, end).join('\n')
// 构建文件路径
const filePath = path.join(
__dirname,
`${groupNamePrefix}_${Math.floor(groupIndex / itemsPerGroup)}.md`
)
// 写入文件
fs.writeFileSync(filePath, groupContent)
}
}
function writeGroupedExercisesToFilefz(content, groupNamePrefix) {
// 每组包含的题目数量
const itemsPerGroup = 10
// 先反转整个内容数组
content.reverse()
console.log(content)
// 分组
for (let groupIndex = 0; groupIndex < content.length; groupIndex += itemsPerGroup) {
const end = Math.min(groupIndex + itemsPerGroup, content.length)
const groupContent = content.slice(groupIndex, end).join('\n')
// 构建文件路径
const filePath = path.join(
__dirname,
`${groupNamePrefix}_${Math.floor(groupIndex / itemsPerGroup)}.md`
)
// 写入文件
fs.writeFileSync(filePath, groupContent)
}
}
// 调用函数将数据分组并写入文件
writeGroupedExercisesToFile(content, 'test')
writeGroupedExercisesToFilefz(contentfz, 'testfz')
console.log('所有题目已按组写入文件。')
// fs.writeFileSync(filePath0, content.slice(0, 200).join('\n\n---\n\n'))
// console.log('1.写入成功')
// fs.writeFileSync(filePath1, content.slice(200, 400).join('\n\n---\n\n'))
// console.log('2.写入成功')
// fs.writeFileSync(filePath2, content.slice(400, 600).join('\n\n---\n\n'))
// console.log('3.写入成功')
// fs.writeFileSync(filePath3, content.slice(600, 800).join('\n\n---\n\n'))
// console.log('4.写入成功')
// fs.writeFileSync(filePath4, content.slice(800, 1000).join('\n\n---\n\n'))
// console.log('5.写入成功')
// fs.writeFileSync(filePath5, content.slice(1000, 1200).join('\n\n---\n\n'))
// console.log('6.写入成功')
// fs.writeFileSync(filePath6, content.slice(1200, 1400).join('\n\n---\n\n'))
// console.log('7.写入成功')
// fs.writeFileSync(filePath7, content.slice(1400, 1600).join('\n\n---\n\n'))
// console.log('8.写入成功')