当前位置: 主页 > 日志 > Django >

利用Django框架打造一个“盛大网盘”分享文件下载接口

标题有点长。这个程序是用Python的Django框架制作的。功能是:盛大网盘(15G免费空间,文件大小不限制)分享文件直接下载接口。

为什么要做这个接口呢?

看一个盛大网盘分享文件的链接:http://www.everbox.com/f/BB8Y1QZiTHAGqJmIb8J45nClfz,要想下载文件需要点击那个“下载按钮”。

由于我需要经常给国外朋友分享一些商业数据文件,如果直接给他们上面的链接,一方面会显得不正式,另外关键是下载不方便(完全不懂中文的,可能就杯具了)。

于是就想实现这样一个中转接口:打开链接就直接开始下载文件了,用户不用再做任何的操作。

 

分析了一下下载按钮的动作,过程挺简单的:

它从页面meta标签中读取csrf-token值,然后将该值作为POST Entity提交给"/f/download/" + linkid(linkid即BB8Y1QZiTHAGqJmIb8J45nClfz)。服务端返回的数据中就包含了文件的直接下载地址。

要注意的是,服务端会验证Cookie。要先访问下载链接获取到验证Cookie,然后带着这个Cookie再向http://www.everbox.com/f/download/BB8Y1QZiTHAGqJmIb8J45nClfz 发送请求,否则服务器将会返回空数据。

 看一下效果:

 http://django.redicecn.com/everbox/BB8Y1QZiTHAGqJmIb8J45nClfz (点击该链接,文件下载直接开始)

 
希望盛大不要给下载文件这里增加验证码,不然就杯具了。
 

下面是实现代码:

 如果对该程序感兴趣,可以Email获取完整的项目。redice@163.com。也欢迎广大Python爱好者加入我们的QQ群(Pythoner):103441184

# coding: utf-8
# views.py
# by redice 2011.06.04

import cookielib
from django.http import HttpResponse, HttpResponseRedirect
import download as D
import re
import urllib
import urllib2
import xpath

def everbox(request, linkid):
    everbox_link = 'http://www.everbox.com/f/%s' % linkid
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.MozillaCookieJar()))
    html = D.get(everbox_link, opener=opener)
    if html:
        token = xpath.get(html, '//meta[@name="csrf-token"]/@content')
        post_data = 'authenticity_token=%s' % urllib.quote(token)
        html = D.get('http://www.everbox.com/f/download/%s' % linkid, data=post_data, opener=opener)
        if html:
            m = re.compile(r'"dataurl":"([^"]+)"').search(html)
            if m:
                final_url = m.groups()[0].strip()
                return HttpResponseRedirect(final_url)
    
    return HttpResponse('Can not get the final link of %s' % everbox_link)

[日志信息]

该日志于 2011-06-04 18:41 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “利用Django框架打造一个“盛大网盘”分享文件下载接口” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部