好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

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

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

http://HdhCmsTestjqdemo测试数据/927.html

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

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

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

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

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

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

http://kuang.xiami测试数据/app/nineteen/search/key/歌曲名称/diandian/1/page/歌曲当前页?_=当前毫秒&callback=getXiamiData

 

返回是一个getXiamiData(json数据)的回调函数 其中的json如图:

 

我们可以看到我们所查的音乐位于/ results数组里

song_id 就是音乐的ID

song_name就是音乐名称

album_logo就是专辑图片

 

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

?

var   timer;

function   searchMusicList(Page){

     searchMusicLoading( true );

     musicPage = Page;

     var   head = "search_result" ;

     var   src1= " http://kuang.xiami测试数据/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等参数后 我们只需要拼接播放器代码

?

$( ".songLi" ).live( 'click' , function (){

     var   PL =  '<h3>曲名:' +$( this ).attr( "name" )+ '</h3><embed src=" http://HdhCmsTestxiami测试数据/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

IOC容器Autofac的另类使用

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

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

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

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

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

 DAO管理器:

View Code /// <summary>

    /// Dao 管理器

    /// </summary>

    public   class   DaoBag

    {

        #region 防实例静态化

        /// <summary>

        /// 获取实例

        /// </summary>

        public   static   DaoBag Instance

        {

            get

            {

                return   Nested.instance;

            }

        }

        /// <summary>

        /// 密封的内部嵌套辅助类,辅助创建单例对象

        /// </summary>

        sealed   class   Nested

        {

            // 静态钩子

            static   Nested()

            {

            }

            /// <summary>

            /// 只读类型

            /// </summary>

            internal   static   readonly   DaoBag instance = new   DaoBag();

        }

        // 防止直接实例化

        private   DaoBag() {

            builder.RegisterModule( new   ConfigurationSettingsReader( "autofac" ));

        }

        #endregion

 

        ContainerBuilder builder = new   ContainerBuilder();

        IContainer container;

 

        public   T GetDao<T>()

        {

            // 延迟加载,第一次使用时候被调用

            if   (container == null ) container = builder.Build();

 

            return   container.Resolve<T>();

        }

 

        public   void   SetDao<T,I>(T t) where T : class

        {

            builder.RegisterInstance<T>(t).As<I>();           

        }

    }

 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  " );

 

 

分类:  项目管理 ,  C#框架

标签:  autofac ,  ioc ,  配置文件

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于jQuery+JSONP实现虾米音乐的检索、选取和播放的详细内容...

  阅读:38次

上一篇: HTML中拖放介绍

下一篇:jquery笔记