c#实现qq音乐爬虫

news/2024/11/25 21:22:34/

c#使用控制台实现QQ音乐爬虫

对于如何分析我没有过程,因为网上很多dalao都有说明,以下是效果图
图例
以下为完整代码

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;namespace ConsoleApp2
{class Program{//QQ音乐private static string m_strGetQQMusicList = "https://c.y.qq.com/soso/fcgi-bin/client_search_cp?new_json=1&w=<<SongName>>&format=json";private static string m_strGetQQMusicVkey = "https://u.y.qq.com/cgi-bin/musicu.fcg?&data={\"req_0\":{\"module\":\"vkey.GetVkeyServer\",\"method\":\"CgiGetVkey\",\"param\":{\"guid\":\"958563768\",\"songmid\":[\"<<mid>>\"],\"uin\":\"291116260\"}}}";private static string m_strGetQQMusicDownloadURL = "http://ws.stream.qqmusic.qq.com/";static void Main(string[] args){string SongName = "";while (SongName != "0"){Console.WriteLine("请输入需要下载的音乐,输入0结束!");SongName = Console.ReadLine();string url = m_strGetQQMusicList.Replace("<<SongName>>", SongName);HttpClient m_htpClient = new HttpClient();HttpResponseMessage m_htpResponse = m_htpClient.GetAsync(new Uri(url)).Result;string strResult = m_htpResponse.Content.ReadAsStringAsync().Result;if (strResult.Substring(1, 8) == "\"code\":0"){JObject jo = (JObject)JsonConvert.DeserializeObject(strResult);string mid = "";for (int i = 0; i < jo["data"]["song"]["list"].Count(); i++){if (i == 0){//下载搜到的第一个mid = jo["data"]["song"]["list"][i]["mid"].ToString();break;}}string loadurl = m_strGetQQMusicVkey.Replace("<<mid>>", mid);m_htpResponse = m_htpClient.GetAsync(new Uri(loadurl)).Result;strResult = m_htpResponse.Content.ReadAsStringAsync().Result;if (strResult.Substring(1, 8) == "\"code\":0"){jo = (JObject)JsonConvert.DeserializeObject(strResult);strResult = jo["req_0"]["data"]["midurlinfo"][0]["flowurl"].ToString();strResult = m_strGetQQMusicDownloadURL + strResult; // 音乐路径string m_strFileFormat = jo["req_0"]["data"]["midurlinfo"][0]["filename"].ToString();m_strFileFormat = m_strFileFormat.Substring(m_strFileFormat.IndexOf(".")); // 音乐后缀名if (strResult != ""){string strFileName = SongName + m_strFileFormat;try{long startPosition = 0; // 上次下载的文件起始位置FileStream writeStream; // 写入本地文件流对象if (File.Exists(strFileName)){writeStream = File.OpenWrite(strFileName);             // 存在则打开要下载的文件startPosition = writeStream.Length;                  // 获取已经下载的长度writeStream.Seek(startPosition, SeekOrigin.Current); // 本地文件写入位置定位}else{writeStream = new FileStream(strFileName, FileMode.Create);// 文件不保存创建一个文件startPosition = 0;}HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(strResult);// 打开网络连接Stream readStream = myRequest.GetResponse().GetResponseStream();// 向服务器请求,获得服务器的回应数据流byte[] btArray = new byte[512];// 定义一个字节数据,用来向readStream读取内容和向writeStream写入内容int contentSize = readStream.Read(btArray, 0, btArray.Length);// 向远程文件读第一次while (contentSize > 0)// 如果读取长度大于零则继续读{writeStream.Write(btArray, 0, contentSize);// 写入本地文件contentSize = readStream.Read(btArray, 0, btArray.Length);// 继续向远程文件读取}}catch (Exception ex){Console.WriteLine(ex.Message.ToString() + "\n下载失败!\n"); ;}Console.WriteLine("下载成功!\n");}}}else{Console.WriteLine("下载失败!\n");}}}}
}

http://www.ppmy.cn/news/790745.html

相关文章

Fedora 安装 QQ音乐

Fedora 安装 QQ音乐 参考&#xff1a; 在Fedora上安装QQ音乐 &#xff08;非wine&#xff09; 非常感谢 xianfengdesign 使用 Fedora 36 安装 QQ Music 1.1.4 Linux 版本 这是使用 Fedora 36 版本 安装 1.1.4 QQ音乐&#xff0c;其他版本不知道&#xff0c;囧 安装 alien …

python爬虫qq付费音乐_Python 应用爬虫下载QQ音乐

Python应用爬虫下载QQ音乐 目录: 1.简介怎样实现下载QQ音乐的过程; 2.代码 1.下载QQ音乐的过程 首先我们先来到QQ音乐的官网: https://y.qq.com/,在搜索栏上输入一首歌曲的名称; 如我在上输入最美的期待,按回车来到这个画面 我们首先要得到这些歌曲名称和其他一些信…

php获取qq音乐的api类,QQ音乐api接口梳理

声明:以下接口仅限于学习使用,严禁用于商业用途 推荐歌单 url: https://u.y.qq.com/cgi-bin/musicu.fcg?callback=recom3477297233556247&g_tk=1278911659&jsonpCallback=recom3477297233556247&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8…

飞轮储能系统的建模与MATLAB仿真(永磁同步电机作为飞轮驱动电机)

简介 飞轮储能系统由于其高储能密度、高效率、轻污染的优点而越来越受到重视。飞轮储能系统以高速旋转的飞轮为依托&#xff0c;通过电力电子设备实现电能与动能的相互转化&#xff0c;从而在负载调峰、功率平抑、不间断电源等多领域都有很好的应用表现。 本文选用永磁同步电机…

linux内核突然崩溃应该怎么检查错误

在对内核做修改时&#xff0c;可能存在直接无法开机或者运行某个应用崩溃的情况&#xff0c;记录一些检查错误的办法。 1. 重新启动系统 首先&#xff0c;尝试重新启动系统&#xff0c;以查看是否可以解决内核崩溃的问题。有时候&#xff0c;崩溃可能是由于暂时的故障或资源问…

NRRD文件格式-NrrdIO库

之前的博客介绍了NRRD文件格式。这篇文章利用Teem提供的NrrdIO库来编译示例程序sampleIO.c。 操作系统&#xff1a;Fedora 30编译器&#xff1a;GCC 9.2.1 打开源代码&#xff0c;可以看到NrrdIO-1.11.0-src-tar.gz和teem-1.110-src.tar.gz两个主要文件。这里我们下载NrrdIO-1…

ORACLE Online Redo Log(ORL)和Standby Redo Log(SRL)

在创建Oracle Dataguard的时候&#xff0c;难免会碰到Standby Redo Log&#xff08;SRL&#xff09;&#xff0c;它和ORL 联机重做日志文件(ONLINE LOG FILE)到底有何不同&#xff0c;下面是我自己的一点理解&#xff0c;大部分都是翻的Oracle官方文档&#xff1a; 1. SRL只有…

Nordic nRF52840 SDK16 RTT Log

一、Firmware 1. sdk_config.h #define NRF_LOG_BACKEND_RTT_ENABLED 1 #define NRF_LOG_ENABLED 12. header files #include "nrf_log.h" #include "nrf_log_ctrl.h" #include "nrf_log_default_backends.h"3. initialization function voi…