• jQuery+JSONP实现虾米音乐的检索、选取和播放


    jQuery+JSONP实现虾米音乐的检索、选取和播放

    jQuery+JSONP实现虾米音乐的检索、选取和播放

    这篇文章是我自己原创的,所以请各位转载的朋友注意追加本文连接。

    http://www.jqdemo.com/927.html

    很多人都希望能在发帖的时候带上音乐。

    当然你可以去 http://swf123.com/创建一个flash播放器带上音乐,但是这个是需要你追加一个可以用的音乐地址的。

    而虾米不同,你可以直接调用他的widget.最后生成图中展示的播放器。

    这里公布核心代码,提供案例下载。

    在此感谢bejson收集各种免费的json接口

    这里我们要用到的接口是:

    http://kuang.xiami.com/app/nineteen/search/key/歌曲名称/diandian/1/page/歌曲当前页?_=当前毫秒&callback=getXiamiData
     
    返回是一个getXiamiData(json数据)的回调函数 其中的json如图:
     
    我们可以看到我们所查的音乐位于/results数组里
    song_id 就是音乐的ID
    song_name就是音乐名称
    album_logo就是专辑图片
     

    主要步骤:

    1.我们主要是要做一个搜索框并且绑定他的keyup事件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var timer;
    function searchMusicList(Page){
        searchMusicLoading(true);
        musicPage = Page;
        var head = "search_result";
        var src1="http://kuang.xiami.com/app/nineteen/search/key/"+encodeURIComponent($("#search_input").val())+"/diandian/1/page/"+Page+"?_="+new Date().getTime()+"&callback=getXiamiData";
        if(timer!=null) clearTimeout(timer);
             
     
            timer= setTimeout(function(){
                JSONP = $.getScript(src1,  function(result){});
            }, 500);
         
    }

    这段代码其实很简单 就是加载jsonp数据,但是这里增加了一个倒计时函数,目的在于一首歌不可能只有一个字母,你要是没敲一个字母都要去检索一次,浏览器会非常的慢。

    所以我这里定义了一个定时器,如果keyup之后发现当前的timer存在则重置当前timer

     

    2.剩下的就是去解析返回的jsonp了。那个比较简单,不多讲

    3.获取到前面的song_id,song_name等参数后 我们只需要拼接播放器代码

    1
    2
    3
    4
    $(".songLi").live('click',function(){
        var PL =  '<h3>曲名:'+$(this).attr("name")+'</h3><embed src="http://www.xiami.com/widget/470304_' + $(this).attr("id") + '/singlePlayer.swf" type="application/x-shockwave-flash" width="257" height="33" wmode="transparent"></embed> <div><ul><li><div id="divFri"></div></li><li>';
        art.dialog(PL);
    })

    这样就可以在点击歌曲列表时候弹出播放器主键。

     

    原文转自:jQuery+JSONP实现虾米音乐的检索、选取和播放

     
     
     
    标签: jquery

    使用Visual Studio 2010 一步一步创建Powershell Module 和 Cmdlet

    之前写了一个C# 调用PowerShell方法, 那么怎么发过来操作呢,也就是怎么样用C#写一个powershell命令呢?

    现在就用C#写一个超级简单的Module和Cmdlet

    1. 在VS中创建一个Library的项目

    文件->新建->项目->C#->Class Library

     

     

    在这里给我们的Class Library起一个名字”FirstPS”

    2. 添加必要的引用“System.Management”和“System.Management.Automation”

    2.1   添加System.Management

    在新建的项目下面找到引用->添加引用

     

    在.net选项卡下找到System.Management

     

    2.2   添加System.Management.Automation

    可以在C:\windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\下面找到

    在添加引用的窗口选择“浏览”选项卡,找到需要的引用

     

    3. 现在进入今天的一个重要环节,编写业务逻辑

    复制代码
     1 namespace FirstPS
     2 {
     3     [Cmdlet(VerbsCommon.Get, "Greeting")]   //创建get命令,get-Greeting
     4     public class DemoPS : PSCmdlet
     5     {
     6         [Parameter(Mandatory = true)]       //命令行后需要一个参数: get-Greeting -Name 输入一个字符串
     7         public string Name { get;set;}
     8 
     9         protected override void ProcessRecord()
    10         {
    11             WriteObject(string.Format("Hello {0}, 现在是: {1}", Name, Greeting()));
    12         }
    13 
    14         /// <summary>
    15         /// 根据系统时间,判断十二个时辰
    16         /// </summary>
    17         /// <returns>当前时间是那个时辰</returns>
    18         private string Greeting()
    19         {
    20             int hour = DateTime.Now.Hour;
    21             if (hour >= 23)
    22             {
    23                 return "子时\n【子时】夜半,又名子夜、中夜:十二时辰的第一个时辰。(北京时间23时至01时)。";
    24             }
    25             if (hour >= 21)
    26             {
    27                 return "亥时\n【亥时】人定,又名定昏等:此时夜色已深,人们也已经停止活动,安歇睡眠了。人定也就是人静。(北京时间21时至23时)。";
    28             }
    29             if (hour >= 19)
    30             {
    31                 return "戌时\n【戌时】黄昏,又名日夕、日暮、日晚等:此时太阳已经落山,天将黑未黑。天地昏黄,万物朦胧,故称黄昏。(北京时间19时至21时)。";
    32             }
    33             if (hour >= 17)
    34             {
    35                 return "酉时\n【酉时】日入,又名日落、日沉、傍晚:意为太阳落山的时候。(北京时间17是至19时)。";
    36             }
    37             if (hour >= 15)
    38             {
    39                 return "申时\n【申时】哺时,又名日铺、夕食等:(北京时间15食至17时)。";
    40             }
    41             if (hour >= 13)
    42             {
    43                 return "未时\n【未时】日昳,又名日跌、日央等:太阳偏西为日跌。(北京时间13时至15时)。";
    44             }
    45             if (hour >= 11)
    46             {
    47                 return "午时\n【午时】日中,又名日正、中午等:(北京时间11时至13时)。";
    48             }
    49             if (hour >= 9)
    50             {
    51                 return "巳时\n【巳时】隅中,又名日禺等:临近中午的时候称为隅中。(北京时间09 时至11时)。";
    52             }
    53             if (hour >= 7)
    54             {
    55                 return "辰时\n【辰时】食时,又名早食等:古人“朝食”之时也就是吃早饭时间,(北京时间07时至09时)。";
    56             }
    57             if (hour >= 5)
    58             {
    59                 return "卯时\n【卯时】日出,又名日始、破晓、旭日等:指太阳刚刚露脸,冉冉初升的那段时间。(北京时间05时至07时)。";
    60             }
    61             if (hour >= 3)
    62             {
    63                 return "寅时\n【寅时】平旦,又称黎明、早晨、日旦等:时是夜与日的交替之际。(北京时间03时至05时)。";
    64             }
    65             if (hour >= 1)
    66             {
    67                 return "丑时\n【丑时】鸡鸣,又名荒鸡:十二时辰的第二个时辰。(北京时间01时至03时)。";
    68             }
    69             if (hour >= 0)
    70             {
    71                 return "子时\n【子时】夜半,又名子夜、中夜:十二时辰的第一个时辰。(北京时间23时至01时)。";
    72             }
    73             return "二十四个时辰已经不适合这台电脑了, 快回自己的自己的星球!!";
    
    74         }
    75     }
    76 }
    复制代码

    代码大功告成,现在需要把这个Library进行编译,编译好后就可以为powershell用了。

    4. 现在进入今天另外一个重要的环节,导入DLL到powershell并执行Cmdlet

    4.1 使用Import-Module dll的全路径,导入dll

    4.2 现在就是见证奇迹的时刻,输入我们的命令get-Greeking -Name test

    由于我的系统和VS都是英文的,所以输出的是乱码,如果是中文的系统这里输出应该是正常的中文

    这个是我第一次如此认真的写完一篇博客,希望这个对大家有帮助,如果有帮助就推荐一下吧,谢谢支持!

    如有什么纰漏或者不准确的地方请指出。

     
     
    分类: Others
    标签: C# powershell Import-Module Cmdlet

    很少有写博客习惯,看来以后要改下了。

    最近在公司项目中使用了Autofac,本人需要解决的问题比较特别,就是需要在单元测试时候替换实际处理的类,通过模拟数据库操作完成单元测试。

    本人是个懒惰的程序员,因为不想修改autofac的配置文件,又要结合fakes进行模拟,在网上又未发现类似处理方法,所以特把自己的做法共享出来,供大家参考和改进。

    因为实际代码为公司项目,未能尽列代码请见谅,同时认为应该还有更好的改进方案,请有更好想法的朋友分享。

    部分参考代码
    ------------------------------------------------

     DAO管理器:

     Config配置(无论单元测试还是实际项目中,配置文件不变,这也是我非常需要偷懒的地方)

     View Code
    <configuration>
        <configSections>
            <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
        </configSections>
    <autofac defaultAssembly="Model">
        <components>
            <component type="Model.Help.HelpNewsRepository, Model" service="Model.Help.IHelpNewsRepository" />
            <component type="Model.Pri.PriUserRepository, Model" service="Model.Pri.IPriUserRepository" />
        </components>
    </autofac>
    </configuration>

    最终完成后实现的效果如下
    ------------------------------------------------------

    业务类中使用方法:
    private IHelpNewsRepository hnr = DaoBag.Instance.GetDao<IHelpNewsRepository>();

    单元测试中替换方法(注意使用了Fakes,单元测试中的替换将使配置失效,其实不是单元测试和实际项目使用相同配置,应该说是单元测试不用配置):

     View Code
    // 准备测试数据
                var news_id = 1;
                var news_viewNum = 2;
    
                // 准备伪造数据处理类
                StubIHelpNewsRepository stubhnr = new StubIHelpNewsRepository();
                StubIPriUserRepository stubpur = new StubIPriUserRepository();
    
                // 模拟底层数据处理方法
                stubhnr.GetEntityInt64 = (x) =>
                    {
                        return new HelpNews { Title = "新闻测试", Id = 1, ViewNum = 1 };
                    };
                
                stubpur.GetEntityInt64 = (x) =>
                    {
                        return new PriUser { Id = 1, Username = "admin" };
                    };
    
                // 为IOC容器设置新的Dao (注意:必须设置完所有相关Dao映射,才可以进行其他步骤)
                DaoBag.Instance.SetDao<StubIHelpNewsRepository, IHelpNewsRepository>(stubhnr);
                DaoBag.Instance.SetDao<StubIPriUserRepository, IPriUserRepository>(stubpur);
                
                //测试第一个业务类
                var newbus = NewsBus.Instance;            
                var result = newbus.GetNews(news_id).AppendData as HelpNews;
    
                Assert.AreEqual(news_id, result.Id);
                Assert.AreEqual("新闻测试", result.Title);
                Assert.AreEqual(news_viewNum, result.ViewNum);
    
                //测试第二个业务类
                var userbus = UserBus.Instance;
                var user = userbus.GetUser(1).AppendData as PriUser;
                Assert.AreEqual(user.Username, "admin");
     
     
    标签: autofacioc配置文件
  • 相关阅读:
    分布式缓存重建并发冲突和zookeeper分布式锁解决方案
    C# Datatable、DataReader等转化json
    OpenResty部署nginx及nginx+lua
    zookeeper+kafka集群的安装
    缓存数据生产服务的工作流程
    实现缓存与数据库双写一致性保障
    eclipse不提示问题
    Redis 多级缓存架构和数据库与缓存双写不一致问题
    代码这样写更优雅(Python版)
    java string.getBytes(“UTF-8”) javascript equivalent
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3135064.html
Copyright © 2020-2023  润新知