SDK安装
一般安装
七牛的Python sdk支持 pip 和 easy_install 安装,包名是 qiniu 即:
pip install qiniu
esay_install qiniu
SAE环境安装
对于SAE用户,安装好sae python本地环境后在项目目录(就是有config.yaml 和 index.wsgi的目录)运行:
saecloud install qiniu
本地环境就会将七牛SDK下载到项目目录的site-packages文件夹中。
修改index.wsgi文件,添加如下代码到文件开头
import os
import sys
root = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(root, 'site-packages'))
这样就安装完毕了
写Fetch函数
def qiniufetch(url,bucket,filename):
"""调用七牛的fetch API 将url的图片存储到七牛"""
from base64 import urlsafe_b64encode as b64e
from qiniu.auth import digest
access_key = "****************************************"
secret_key = "****************************************"
encoded_url = b64e(url)
dest_entry = "%s:%s" % (bucket, filename)
encoded_entry = b64e(dest_entry.encode('utf-8'))
api_host = "iovip.qbox.me"
api_path = "/fetch/%s/to/%s" % (encoded_url, encoded_entry)
mac = digest.Mac(access=access_key, secret=secret_key)
client = digest.Client(host=api_host, mac=mac)
ret, err = client.call(path=api_path)
if err is not None:
print "Fetch image file\"%s\" failed" % url
print err
return None
else:
print "Fetch \"%s\" to qiniu \"%s\" success!" % (url,dest_entry)
return "http://%s.qiniudn.com/%s" % (bucket,urllib.quote(filename.encode('utf-8')))
url 要保存文件的url
bucket 要保存到的bucket
filename 要保存的文件名*(有时候也被称为key)
* 注意文件名可以包含反斜杠,因此可以实现伪目录结构
返回值:
保存失败会打印失败的url和相应的错误,并返回None
保存成功会返回在文件在七牛的URL(方便入数据库)
调用Fetch函数
你可以通过传进不同的值来实现保存到不同的地方,譬如我实现了保存到七牛和SAE Storage两个不同地方,通过get传入的值不同,保存到不同的地方。这里只是我在一个crawler中的示例,仅供参考
if info['avatr_src']:
if avatar_urlfactory:
info['avatr_src'] = avatar_urlfactory(info['avatr_src'])
if saveto == 'qiniu':
filename = "%s/%s-%s.%s" % (prefix, info['name'], todaystr, info['avatr_src'].split('.')[-1])
info["avatar"] = qiniufetch(info['avatr_src'],'akb-member',filename)
elif saveto == 'storage':
filename = "%s/%s-%s.%s" % (prefix, info['name'], todaystr, info['avatr_src'].split('.')[-1])
info["avatar"] = retrieve(info['avatr_src'],'avatar',filename)