Asp.net 两个链接实现虾米音乐搜索

起因

暑假刚结束,又要回到学校写代码了,本人写代码的时候特别喜欢听歌,一直使用的是虾米音乐,出于好奇,想给自己的网站集成虾米音乐搜索功能,但是一直找不到虾米开放api,所以只能自己找办法了,之后发现一位大神写的一篇文章,里面介绍了如何用js实现虾米音乐搜索,不过我并没有太多的接触过js语言,所以我打算用c#语言来实现虾米音乐搜索,拾取文中两个重要的json接口,开始我的音乐搜索之旅。

准备

要实现功能,首先要准备好思路,首先我要掌握json最基础的用法,如果提取网页中的json,json本人接触的并不多,所以我也花了一些时间去百度,实现的过程中也出现了什么无效的json基元,反序列化等等的错误(基本功不扎实 = =),页面布局也就用table代替。

实现

首先,两个json接口:

http://songs.sinaapp.com/search/key/搜索名称/page/1
http://songs.sinaapp.com/apiv3.php?id=歌曲ID

先试验下,我们搜索unity这首歌,可以看到页面中的json数据。

我们选择第一条数据进行第二个链接测试

可以获取到这首歌的更多信息,既然有了json数据,那我们解析这些json便可以实现搜索功能。

首先我们要构造两个对象,用来存放歌曲的基本信息。

代码如下

public struct ToJsonMy
        {
            public string total { get; set; }
            public List<JsonData> results;
        }

        public struct JsonData
        {
            public string song_id { get; set; }
            public string song_name { get; set; }
            public string artist_name { get; set; }
            public string song_album { get; set; }
        }

这里面定义的名称要和json里定义的一样。

然后就是点击事件,点击button,搜索textbox里面输入的内容

具体代码如下

 protected void Button1_Click(object sender, EventArgs e)
        {
            var src1 = GetUrlContent("http://songs.sinaapp.com/search/key/" + TextBox1.Text.Trim() + "");//链接
            ToJsonMy json = JsonDeserialize<ToJsonMy>(src1);
            JavaScriptSerializer js = new JavaScriptSerializer();   //实例化一个能够序列化数据的类
            ToJsonMy list = js.Deserialize<ToJsonMy>(src1);
            ListView1.DataSource = json.results;
            ListView1.DataBind();

        }

这里我们用到了两个自定义的方法,一个是提取网页中的json数据,另一个就是反序列化。

方法如下

public static string GetUrlContent(string urladdress)
        {
            WebClient MyWebClient = new WebClient();
            MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
            Byte[] pageData = MyWebClient.DownloadData(urladdress); //从指定网站下载数据
            //string pageHtml = Encoding.Default.GetString(pageData);  //如果获取网站页面采用的是GB2312,则使用这句
            string pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句
            return pageHtml;
        }
        //反序列化
        public static T JsonDeserialize<T>(string jsonString)
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
            T obj = (T)ser.ReadObject(ms);
            return obj;
        }

这里需要添加一个System.Web.Services的引用。

绑定到listview中就可以看看效果图了,如下。

我这边有个链接可以给大家参考下效果

现在需要的数据都有了,歌曲的ID也有了,想获取更多的歌曲信息也不是什么难事,想必大家都应该会的,教程很简单,分享多益处。

时间: 2024-07-29 12:05:39

Asp.net 两个链接实现虾米音乐搜索的相关文章

虾米音乐腾讯视频争好声音版权 阿里数娱音乐布局浮水

进入2014年以来,阿里数娱一直没闲着,刘春宁到处串场为阿里在文化产业的布局摇旗呐喊.过去半年,阿里数娱已经先后完成了在游戏.动漫.影视等领域的布局,这两日在音乐领域的布局也正式浮出水面. 相隔一天时间,阿里巴巴接连拿下<中国好声音>和<中国好歌曲>两档热播音乐节目,借此机会阿里数娱在音乐领域的布局正式浮水.阿里数娱旗下虾米音乐将独家享有第三季<中国好音乐>的音乐版权,同时虾米还将参与到上海灿星旗下另一档音乐节目<中国好歌曲>的筹备工作. 而此前,腾讯以2.

腾讯微信封杀虾米音乐和网易云音乐

继微信封杀支付宝新春红包服务后,从昨日开始,微信的封杀行为进一步升级.不少用户发现,包括虾米音乐.天天动听.网易云音乐也无法分享至微信朋友圈. 腾讯回应:版权问题 当用户在虾米或天天动听APP上进行分享至微信的操作时,页面显示“由于你当前分享的内容存在安全隐患,无法分享到微信”.同样,与虾米音乐和天天动听分享失败的理由也一致. 虾米音乐和天天动听方面均表示,未进行技术改动操作.网易云音乐则回应称,腾讯单方面禁止了网易云音乐等主流音乐App在微信朋友圈的分享,欢迎大家继续与好友在网易云音乐平台分享

虾米音乐pc端数据库直接可以查看大量账户信息

在虾米音乐pc端有一个问题,就是数据库采用的sqlite,并未进行加密 它将很多账户信息暴露在外,虽然不知道这些信息暴露出来会发生什么,也许什么也不会发生,但是,基本的加密我觉得是必要的. 数据库位置 X:\音乐\虾米音乐\system\xm_data.db 通过管理工具链接,我们将得到5个表 api_cache,global_config,local_music,play_history,xm_user. 1. api_cache 拥有 三个字段 id,apiName,apiData apiN

将 QQ 音乐、网易云音乐和虾米音乐资源「整合」一起的Chrome 扩展Listen 1

原文地址:http://whosmall.com/?post=418 本文标签: Chrome扩展 Chrome浏览器 Chrome扩展Listen1 音乐资源整合 Listen1安装方法 在 Chrome 上安装了这款名为 Listen 1 的插件,妈妈可是再也不用担心你找不到想听的歌了.它将 QQ 音乐.网易云音乐以及虾米音乐的音乐资源「整合」在了一起,你只需要输入音乐关键词,就可以方便地三大曲库中跳转搜索. 安装方法 Listen 1 的安装方法与一般的 Chrome Extension

socket编程之二:两种链接类型upd和upd

前面一篇文章说到了一些计算机网络的基础知识,引入了socket,从这节开始,就进入正题了. 一 概率 TCP:Transimission Control Protocol传输控制协议. UPD:User Datagram Protocol用户数据包协议. 两者都属于上一篇文章说的OSI模型中的第四层--传输层的协议. 两者相比: TCP协议面向连接,UDP协议面向非连接:(链接) TCP协议传输速度慢,UDP协议传输速度快:(速度) TCP有丢包重传机制,UDP没有:(重传) TCP协议保证数据

链接器的“两步链接”

"两部链接"(Two-pass linking),是指链接的过程分为两步:地址分配 -> 重定向. 地址分配:扫描输入的目标文件,分配各目标文件内各段的地址,并收集全局符号定义和引用,放入一个全局符号表.完成这一步后,所有的符号地址都被确定了. 重定向:重定向各输入文件中引用的全局符号到其实际的地址. 参考:<程序员的自我修养>,第 4 章 1 ~ 2 节.

python 下载虾米音乐

#!/usr/bin/env python2 # coding:utf-8 import urllib import re import sys import urllib2 # xml => http://www.xiami.com/widget/xml-single/sid/1769215777 # string = "5h3%..i%2323F27%_3ueb5cc554e525-ntA2fx.2%9F211_5l%ty5d227E4-E8E%ut%FiicF2532759E.3h%

下载虾米音乐的歌词

这个方法比较笨,需要一个个的操作,你也可以试着使用脚本实现自动下载 1. 使用chrome浏览器打开虾米音乐播放界面 2. 右键点开审查元素 3. 点开network标签 4. 点下过滤 5. 如果是静态歌词填入txt,如果是动态歌词,就填入lrc,不过有时候静态歌词也会保存为lrc扩展名 6. 右键最底下的那个txt或者lrc 7. 点击open link in new tab 8. 自己修改下文件名就可以保存了 来自为知笔记(Wiz)

[源码]随机获取虾米音乐song_id API文件

[源码]随机获取虾米音乐song_id API文件 January 11, 2015 注意:此API请放置于国内主机使用,如香港.北京等等,否则会提示:虾米音乐在您所处的国家或地区暂时无法使用 <?php $url = file_get_contents('http://www.xiami.com/search/song/page/'.rand(1,636).'?key=%E5%8A%A8%E6%BC%AB&is_pub=y'); preg_match_all("/\?sid=(\