@xirang.us -> 访问嘻来嚷往中国版

热度:787°C

噪音:21分贝

SkyDrive 外链自动获取插件 WP-Skydrive-Outlink 完善版

分类:信息时代 | 编程开发  标签: | | |

话说为了为本站的视频文件找个家,Tim可是费尽心思,国内外的外链文件存储网站几乎全部注册试用了一遍,到最后还是锁定在了垂手可得的微软 25G 不限流量外链空间 SkyDrive 。一来是微软的服务器那是相当的稳定,二来是在我有生之年估计微软也不会倒闭,那就把视频文件存在 SkyDrive 吧。

不过,天下可以有免费的午餐,但是真的没有又免费又丰盛的午餐……为了防止像本站一样,长期、稳定地外链 SkyDrive 文件,微软可是做足了功夫,某个文件的外链地址随时都在改变。唯一不变的就是下载页面,为的就是让你去看广告。搜了半天,在《Skydrive外链(wp-skydrive-outlink)插件》这里找到了高人编写的,通过分析那个不变的文件下载页面代码找出此时此刻该文件的外链地址的 WordPress 插件。

但是 Tim 在使用的时候发现了不尽人意的地方。原插件是通过搜索页面代码的如下内容:

1
<a href="http&#58;&#47;&#47;zmmbva.bay.livefilestore.com&#47y1pIqCe7pRjb5SoIojzYoEoZwIWrS4ydWQbUfVTc9AzsqDWEPyeTDpBTN2zresvpobyBvHUv1ApuBAcoojvXGkYYg&#47;Breath&#37;20Under&#37;20Water&#37;20HQ.mp4&#63;download" title="Download">

中的 title=”Download” 来截取外链地址。但是 SkyDrive 的页面语言会根据浏览器 Cookie 和浏览者 IP 地址而做出自动选择。如果浏览者的 Windows Live 语言设置为非英文,或者是浏览者从没登录过 Windows Live ,那么他所得到的这个下载页面的 title=”Download” 很可能就变成 title=”下载”、title=”télécharger”、title=”ダウンロードする” 等等等等,那么这个插件也就失效了。

所以,Tim又瞧了瞧 SkyDrive 文件下载页面的源码,发现在靠近底部,有一段 javascript 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var $SelfPage = new function()
{
    var_download = 'http\x3a\x2f\x2fzmmbva.bay.livefilestore.com\x2fy1pIqCe7pRjb5SoIojzYoEoZwIWrS4ydWQbUfVTc9AzsqDWEPyeTDpBTN2zresvpobyBvHUv1ApuBAcoojvXGkYYg\x2fBreath\x2520Under\x2520Water\x2520HQ.mp4\x3fdownload';
    var_demote = 'http\x3a\x2f\x2fzmmbva.bay.livefilestore.com\x2fy1pIqCe7pRjb5SoIojzYoEoZwIWrS4ydWQbUfVTc9AzsqDWEPyeTDpBTN2zresvpobyBvHUv1ApuBAcoojvXGkYYg\x2fBreath\x2520Under\x2520Water\x2520HQ.mp4\x3fdownload';
    var_dirty = false;

    this.MarkDirty = function() { _dirty = true; }
    this.Download = function()
    {
        if (_dirty)
        {
            _dirty = false;
            window.location = _demote;
        }
        else
        {
            window.location = _download;
        }
    }
}

这个地方就是生成链接地址的函数,而且这个函数的内容不随页面语言和访问者 IP 地址的改变而改变。接着Tim就开始修改代码。本人对 PHP 一窍不通,还好 PHP 的字符串操作和 C++ 蛮像的,这里也只用修改一下搜寻字符串的地方,原作者其它那些代码对我来说是一本天书。修改后的地方是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function skydrive_get_outlink($url)
{
    if ( IsAbsoluteUrl($url) === false ) {
        $url = $sdoldefaulturl . $url;
    }
    $body = ffox_get_http_body($url);

    $pos = stripos($body, 'var _demote');
    $body = substr($body, 0, $pos);
    $startstr = 'var _download = \'';//Tim modified in version 0.3: to locate the start position of the outlink
    $endstr = '\\x3f';//Tim modified in version 0.3: to locate the end position of the outlink
    $start = strripos($body, $startstr) + strlen($startstr);
    $end = strripos($body, $endstr);
    $outlink = substr($body,$start, $end-$start);
    $outlink = str_replace('\\x3a', ':', $outlink);//Tim added in version 0.3: to replace \x3a to :
    $outlink = str_replace('\\x2f', '/', $outlink);//Tim added in version 0.3 to replace \x2f to /
    $outlink = str_replace('\\x25', '%', $outlink);//Tim added in version 0.3 to replace \x25 to %
    preg_match_all("/\&amp;\#([0-9]+)\;/", $outlink, $acs);
    $acs = $acs[1];
    foreach($acs as $ac) {
        $outlink = preg_replace("/\&amp;\#([0-9]+)\;/", chr($ac), $outlink,1);
    }
    return $outlink;
}

这么一修改,插件运作地就很良好了,Tim用Firefox、Chrome、Safari、Opera、IE都做了测试,效果非常不错!《Mairé Digby YouTube 官方站高清 MV 合集》中的所有视频都是采用 SkyDrive 存储,此插件获得外链地址的,您可以点过去瞧瞧效果。怎么样,这个插件的确不错吧,那么请

点击下载(2010.1.1更新,请将下载的文件的后缀名改为.zip)

在这里Tim要感谢Flarefox ,他的所做工作是开创性的,我只是站在Flarefox 的肩膀上对插件做了一点小小的修改,让它工作得更棒!请Flarefox看到此修改版、并且觉得Tim修改的还不错后,将我的版本合并到你的官方版本中,以让更多人更好的享受这顿“又免费又丰盛的午餐”!