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管理器:
/// 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实现虾米音乐的检索、选取和播放的详细内容...