使用合租空间的独立博客,例如本人,有时想在自己的空间上传mp3,又有版权(美国空间要求趋严)、流量(被迅雷爬到后果很严重)的担心。经过比较,觉得skydrive的空间挺不错的,25G空间,可支持外链。{wy}不足之处是操作比较复杂,使用普通的方法不容易批量提取mp3的外链。今天下午做出一种简单易行的方法,可以直接抓取skydrive的公开文件夹里的mp3音乐文件{jd1}地址并生成Google Player播放代码(因此您就不需要再安装播放mp3的wordpress各种插件了)。所写的php源码一并贴出,有兴趣的自行研究。如果是方面的讨论,欢迎跟贴;其它问题恕不回复,见谅。

最终效果如下图:

上传

使用您的liveID在登录,然后新建一个公开的文件夹。之所以要公开,是因为您的mp3是要放在博客上播放的,如果设为私密型,别人就无法欣赏到了。

修改权限的方法见贴图:


上传时,如果是在IE浏览器下,会有提示安装插件,建议安装。这样就可以将待上传的文件批量拖过来上传了。每个文件不超过50M。总文件的大小没有限制。

指定需要外链的文件地址

您可以指定为某个文件夹生成代码,也可以指定文件生成代码。无论哪种方式,都是一个文件对应一段代码,而不是将所有的播放文件生成一个播放列表。您需要先记下该文件的页面地址,然后根据该地址生成代码。

获得单个文件的地址:

获取文件夹的地址:

拷贝好页面地址备用。

生成播放代码

请移步到这里:

输入上一步得到的页面地址,点击OK,大约2秒钟之后,就会看到这样的内容了:

 

将生成的源代码拷贝到wordpress中,就能看到播放器了。

源代码

程序很简单,获得页面地址,使用curl来下载页面,然后使用正则表达式来析取{jd1}地址,然后生成播放代码,如此而已。其中google player的代码,我是在google reader中读《》的海盗电台时发现的。

如果您感兴趣,还可以将此方案扩展,做skydrive图床,原理一致。不赘述。

php代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
//use:  get mp3, wam, wmv direct links from skydrive's public folder, and generate google player code for that.
//author's email&gtalk:   rex [at] zhasm [dot] com
//last edit:    20100110 18:14
 
//get the curl handle
//
function init_curl()
{
	$ch = curl_init(); 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
	curl_setopt($ch, CURLOPT_REFERER,"http://skydrive.live.com/"); 
	//curl_setopt($ch, CURLOPT_POST, 1);
 
	return $ch;
}
// extract mp3 from the given root page;
function get_list($ch,$url)
{
 
    extract_mp3($ch,$url);
 
	//echo $url;
	curl_setopt($ch, CURLOPT_URL, $url);
	$output = curl_exec($ch);
	//trim the unnecessary parts, for safety
 
	$links = preg_replace('/^.*?(?=<div id=[\'"]tileView[\'"] class=[\'"]tvContainer[\'"]>)|<div class="bpViewPermissionsLink".*$/si', '', $output);
        //you can add your own music filter 
	preg_match_all('/(?<=<a class="tvLink")[^<>]+href="([^"]+)(?<=mp3|wav|wmv)"/si', $links, $result, PREG_PATTERN_ORDER);
	$result = $result[1];
	foreach ($result as $r)
	{
	    extract_mp3($ch,$r);
	}
}
 
// extract mp3 from the given sub page, generate output code.
function extract_mp3($ch,$link)
{
    curl_setopt($ch, CURLOPT_URL, $link);
	$output = curl_exec($ch);
//	<a id="spPreviewLink" href=
    preg_match_all('%(?<=<title>)[^><]+(?= - Windows Live</title>)%', $output, $result, PREG_PATTERN_ORDER);
    $title = $result[0];
 
 
    preg_match_all('/(?<=<a\sid="spPreviewLink"\shref=")[^"]+(?=&#63;download")/', $output, $result, PREG_PATTERN_ORDER);
    $result = $result[0]; 
    foreach($result as $r)
    { 
	    $demo= "    <div class=\"audio-player-placeholder\">
    <embed classname=\"audio-player-embed\" type=\"application/x-shockwave-flash\" src=\"https://www.google.com/reader/ui/3247397568-audio-player.swf?audioUrl=".$r."\" allowscriptaccess=\"never\" allowfullscreen=\"true\" quality=\"best\" bgcolor=\"#ffffff\" wmode=\"transparent\" flashvars=\"playerMode=embedded\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" height=\"27px\" width=\"400px\">
    </div>";
        echo "文件:",$title[0],"<br />\n";
        echo "效果:<br />\n";
        echo $demo,"<br />\n";
        echo "代码:<br />\n";
        echo '<textarea cols="50" rows="10">',$demo,'</textarea>',"<br />\n<br />\n";
    }
}
 
//get user input
$url=@$_GET["url"];
 
if (!$url){
	exit();
}
 
 
$ch=init_curl(); 
echo '<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />';
 
$info=get_list($ch,$url); 
 
?>