用python调用七牛的fetch接口保存网络上的图片

需求说明

七牛是个好东西

免费10G空间10G下载流量10w上传请求100w下载请求 自带CDN和图片处理 对于个人用户和创业公司来说是个很好的平台

本文主要是解决 服务器端请求七牛对网络某文件进行保存这一业务需求

这里是七牛文章中对Fetch API的说明。写的有点复杂,不过用Python sdk比较简单

SDK安装

一般安装

七牛的Python sdk支持 pip 和 easy_install 安装,包名是 qiniu 即:

pip install qiniu
esay_install qiniu

他们也把SDK托管在GitHub
这里是SDK的下载

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函数

调用api需要用到七牛的access_key和secret_key。这两个key可以在七牛后台的账号设置中查到。将自己的key填到下面函数的相应位置就行了

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)

总结

其实是很简单的,不过是翻翻文档的事情而已,Fetch函数也是参考了SDK中的示例

不过七牛真是个好东西。如果你没有七牛账号可以来这里注册

时间: 2024-10-28 06:02:33

用python调用七牛的fetch接口保存网络上的图片的相关文章

nodejs+phantomjs+七牛 实现截屏操作并上传七牛存储

近来研究了下phantomjs,只是初涉,还谈不上深入研究,首先介绍下什么是phantomjs. 官网上的介绍是:”PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.”翻译过来就是:”PhantomJS

使用微信 SDK 上传图片到七牛

总体思路是:在微信下选好图片后将图片上传到微信服务器,在后端使用微信服务器返回的图片 serverId 加上调用接口的 ApiTicket 通过七牛的 fetch 接口向微信服务器下载多媒体文件的接口请求图片的二进制流,然后保存至自己七牛账号内的特定 bucket.大致过程如下: 1.调用微信 chooseImage 接口,成功后调用 uploadImage 接口 wx.chooseImage({ count: 1, sizeType: ['original', 'compressed'], s

七牛的管理凭证怎样自己写--delete接口java实现

Qiniu 七牛问题解答 七牛的管理接口举例,有兴趣的可以自己来写下七牛的管理demao 问题解决方案 delete接口的java代码如下: //ak,sk需要去七牛后台的秘钥中去拿. public string delete(string encodeUrl) { string AccessToken = ""; Stream outstream = null; string getUrl = "http://" + "rs.qiniu.com"

Python在七牛云平台的应用(二)图片瘦身

(一)七牛云平台的图片瘦身功能简介:(引用自官网) 针对jpeg.png格式图片 瘦身后分辨率不变,格式不变. 肉眼画质不变. 图片体积大幅减少,节省 CDN 流量 官网给的图片压缩率很高,官网给的「葡萄」图片瘦身在不改变分辨率和格式的情况下压缩率为65.49%,我自己测试了一张小图在后文中会有,原来的大小在「22kb」压缩后为「18kb」,据一般情况来看,压缩率虽然没有官网给的那么夸张,但是也能基本达到80%左右,所以这个压缩率还是很不错的. (二)需求分析 我们可以设想几个场景 『1:当你在

UEditor+七牛,实现图片直连上传

最近做的项目,涉及到使用富文本编辑器,我选择了百度的UEditor.同时,我们的图片放在七牛云存储上.关于这两者间的集成,我写下一些个人的经验,与大家分享. 图片上传方案 目前来说,Web端基于七牛等云存储的图片上传方式分为以下两种: 1. 上传图片至服务端,再将数据转发至七牛. 通过服务端接受用户上传的内容,同时可以对内容进行有效性审核,拒绝不合规范的内容,然后从服务端将内容上传至七牛. 这种方法可以有效控制并记录用户提交的内容,但同时也增加了服务器的运行压力. 2. 直接上传图片至七牛,然后

第一个go的web程序;调用七牛云存储的音频api问题解决;条件搜寻文件里的内容

package main import ( "html/template" "io" "io/ioutil" "log" "net/http" "os" "path" "runtime/debug" ) const ( ListDir      = 0x0001 UPLOAD_DIR   = "./uploads" TEMPLA

七牛图片云存储 配置及示例

一.七牛自定义配置节点 <configSections> <section name ="QiniuConfig" type="Amy.Toolkit.QiniuStorage.SectionHandler"/> </configSections> <QiniuConfig> <add key="AccessKey" value="自己的accesskey"><

koa-ueditor上传图片到七牛

问题描述:服务器系统架构采用的是koa(并非koa2),客户端富文本编辑器采用的是百度的ueditor控件.现在需要ueditor支持将图片直接上传到七牛云. 前提:百度的ueditor需要在本地配置为可用,图片上传相关的配置可以参考官方文档的描述.由于服务器用的node.js,因此ueditor目录下我们只需要保留nodejs目录,其它部分如php,asp.net等都可以删掉.然后根据自己服务器的环境适当修改config.json文件中的配置. 现有方案:现有npm和github上找到的库有很

七牛的优势和便宜购买方法

既然推荐七牛,那么就得说说七牛的优势,在说之前给大家推荐一个七牛优惠码:61d1fd4d  优惠码是九折,1万以下99折,一万以上95折,目前七牛所有的优惠码都是统一折扣的,建议大家收藏使用,永久有效. 下面进入正题,七牛是目前国内数一数二的云存储厂商了,但不是第一个开始做这个的,既然能超越前人,肯定有其过人之处. 1.免费流量和额度 七牛每月都有一定的免费流量和额度,对于中小网站和个人来说,基本无成本.算是免费使用了,搭建一些中小个人网站完全够用. 2.cdn加速 网页静态资源优化加速分发,对