freesound.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. const axios = require("axios");
  2. const cheerio = require('cheerio');
  3. module.exports = {
  4. platform: "FreeSound", // 插件名
  5. version: "0.0.0", // 版本号
  6. cacheControl: "no-store", // 我们可以直接解析出musicItem的结构,因此选取no-store就好了,当然也可以不写这个字段
  7. async search(query, page, type) {
  8. if (type === "music") {
  9. // 我们能搜索的只有音乐,因此判断下类型
  10. // 获取网站的html
  11. const rawHtml = (
  12. await axios.get("https://freesound.org/search", {
  13. q: query,
  14. page,
  15. })
  16. ).data;
  17. // 接下来解析html
  18. const $ = cheerio.load(rawHtml);
  19. // 存储搜索结果
  20. const searchResults = [];
  21. // 获取所有的结果
  22. const resultElements = $('.bw-search__result');
  23. // 解析每一个结果
  24. resultElements.each((index, element) => {
  25. const playerElement = $(element).find('.bw-player');
  26. // id
  27. const id = playerElement.data('sound-id');
  28. // 音频名
  29. const title = playerElement.data('title');
  30. // 作者
  31. const artist = $(element).find('.col-12.col-lg-12.middle a').text();
  32. // 专辑封面
  33. const artwork = playerElement.data('waveform');
  34. // 音源
  35. const url = playerElement.data('mp3');
  36. // 专辑名,这里就随便写个了,不写也没事
  37. const album = '来自FreeSound的音频';
  38. searchResults.push({
  39. // 一定要有一个 id 字段
  40. id,
  41. title,
  42. artist,
  43. artwork,
  44. album,
  45. url
  46. })
  47. });
  48. return {
  49. isEnd: true,
  50. data: searchResults
  51. }
  52. }
  53. },
  54. };