当前位置: 首页 > news >正文

CloudMusic:免费听歌

本文所涉及所有资源均在   传知代码平台可获取。

目录

概述

演示效果

视频演示

图片展示

核心逻辑

获取歌曲图片

提取搜索结果

使用方式

部署方式

Docker部署1

构建镜像

Web站点部署2

附件下载

概述

CloudMusic是一款全网歌曲免费听的web项目,无需任何数据库,资源不存留在本地,原接口是爬取某XX宝,本项目整合接口实现基本使用,后续可自行对接收藏、登陆以及整改UI

演示效果

视频演示

见视频演示

图片展示

搜索歌曲展示

核心逻辑

获取歌曲图片

libxml_use_internal_errors(true); // Suppress HTML5 parsing errors$dom = new DOMDocument();
$dom->loadHTML($response);$xpath = new DOMXPath($dom);
$meta = $xpath->query('//meta[@property="og:image"]');if ($meta->length > 0) {
    $content = $meta->item(0)->getAttribute('content');
    die(
        json_encode(
            array(
            'code' => 200,
            'data' => $content,
            'msg' => '获取成功'
        ))
);
} else {
    die(
        json_encode(
            array(
            'code' => 100,
            'data' => '',
            'msg' => '获取失败'
        ))
);
}

提取搜索结果

// 提取搜索结果
$results = [];
$search_results = $xpath->query("//div[contains(@class, 'card-text')]//div[contains(@class, 'row')]");
foreach ($search_results as $result) {
    $song_name_node = $xpath->query(".//div[contains(@class, 'col-5')]/a", $result)->item(0);
    $artist_node = $xpath->query(".//div[contains(@class, 'col-4')]", $result)->item(0);
    $action_node = $xpath->query(".//div[contains(@class, 'col-3')]/a", $result)->item(0);    if ($song_name_node && $artist_node && $action_node) {
        $song_info = [
            "song_name" => trim($song_name_node->textContent),
            "artist" => trim($artist_node->textContent),
            "action" => trim($action_node->textContent),
            "link" => $song_name_node->getAttribute('href'),
            "id" => basename($song_name_node->getAttribute('href'))
        ];
        $results[] = $song_info;
    }
}// 提取最新搜索
$latest_search_results = [];
$latest_searches = $xpath->query("//div[contains(@class, 'card shadow-sm')]//p[contains(@class, 'card-text')]/a");
foreach ($latest_searches as $search) {
    $search_info = [
        "search" => trim($search->textContent),
        "link" => $search->getAttribute('href')
    ];
    $latest_search_results[] = $search_info;
}// 构建返回数据结构
$api_response = [
    "search_results" => $results,
    "latest_searches" => $latest_search_results
];// 输出为JSON格式
header('Content-Type: application/json');
echo json_encode($api_response, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

使用方式

部署成功后,打开web站点,搜索歌曲即可加入列表,自动循环列表播放歌曲

部署方式

Docker部署1

构建镜像

将压缩包中的Docker部署文件夹里面的文件全部上传到服务器上,选择构建镜像

镜像构建成功后,创建容器即可访问(可以更改api接口,项目的static中的js 搜索http://即可替换)

Web站点部署2

上传Web站点部署文件夹里面的压缩包到服务器进行解压,环境PHP5.6+,推荐7.0

访问站点即可

附件下载

下载地址见页面附件

感觉不错,点击我,立即使用

相关文章:

  • python功能测试
  • Tableau|一入门
  • error -- unsupported GNU version gcc later than 10 are not supported;(gcc、g++)
  • 网络编程(6)——发送的时序性,全双工通信
  • 一个 Java 语言简化处理 PDF 的框架,提供了一套简单易用的 API 接口,满足多样化需求又能简化开发流程的处理方案(附教程)
  • 【AD那些事 10 】焊盘如何修改为自己想要的形状!!!!! 焊盘设计规则如何更改??????
  • 【架构设计】同步与异步:应用场景与选择指南
  • cpu路、核、线程、主频、缓存
  • 相似度度量方法有哪些?
  • 数据结构--单链表
  • 创建Express后端项目
  • python之装饰器、迭代器、生成器
  • linux ip命令使用
  • npm run build报Cannot find module错误的解决方法
  • 容器技术介绍
  • hexo+github搭建个人博客
  • [译] React v16.8: 含有Hooks的版本
  • If…else
  • javascript从右向左截取指定位数字符的3种方法
  • Javascript弹出层-初探
  • Lucene解析 - 基本概念
  • nfs客户端进程变D,延伸linux的lock
  • vue的全局变量和全局拦截请求器
  • 笨办法学C 练习34:动态数组
  • 分享一份非常强势的Android面试题
  • 让你的分享飞起来——极光推出社会化分享组件
  • 时间复杂度与空间复杂度分析
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • (2)(2.10) LTM telemetry
  • (3)llvm ir转换过程
  • (ZT)薛涌:谈贫说富
  • (八)c52学习之旅-中断实验
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (转)Mysql的优化设置
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .describe() python_Python-Win32com-Excel
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET NPOI导出Excel详解
  • .net Signalr 使用笔记
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NetCore项目nginx发布
  • .NET开发者必备的11款免费工具
  • .NET企业级应用架构设计系列之技术选型
  • .net与java建立WebService再互相调用
  • .NET正则基础之——正则委托
  • @AliasFor注解
  • @Data注解的作用
  • @Responsebody与@RequestBody
  • @selector(..)警告提示