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

本文介绍了如何利用Python SDK轻松连接七牛云平台,实现服务器端对网络文件的保存操作。详细说明了SDK的安装过程,包括通过pip和easy_install进行安装,以及针对SAE环境的特殊安装方式。此外,提供了调用API的示例代码,包括必要的参数说明和函数定义,以及如何处理保存成功与失败的情况。强调了七牛云为个人用户和创业公司提供的免费资源和便捷功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求说明

七牛是个好东西

免费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中的示例
不过七牛真是个好东西。如果你没有七牛账号可以 来这里注册
### 如何使用 Python 调用和风天气 API 为了利用 Python 调用和风天气 API 来获取天气预报数据,开发者需遵循特定流程来设置环境并编写相应的脚本。下面提供了一个详细的指南以及一段用于演示目的的代码片段。 #### 获取 API 密钥 在开始之前,确保已经注册成为和风天气的服务用户,并获得了个人专属的应用程序编程接口密钥 (API Key)[^1]。此密钥对于访问服务至关重要。 #### 安装必要的库 建议安装 `requests` 库以便简化 HTTP 请求操作。可以通过 pip 工具轻松完成安装: ```bash pip install requests ``` #### 编写 Python 代码 这里展示了一段简单的 Python 代码用来查询指定城市的当前天气状况: ```python import requests def fetch_weather(city, key='your_api_key'): url = f"https://free-api.heweather.net/s6/weather/now?location={city}&key={key}" response = requests.get(url).json() if 'HeWeather6' not in response or len(response['HeWeather6']) == 0: print('Error fetching data') return None weather_info = response['HeWeather6'][0]['now'] city_name = response['HeWeather6'][0]['basic']['location'] result = { "City": city_name, "Temperature": weather_info["tmp"], "Status": weather_info["cond_txt"] } return result if __name__ == "__main__": city_of_interest = input("Enter the name of a city:") try: info = fetch_weather(city_of_interest) if info is not None: print(f"In {info['City']}, it's currently {info['Temperature']}°C with conditions being described as '{info['Status']}'") except Exception as e: print(e) ``` 上述代码定义了一个名为 `fetch_weather()` 的函数,该函数接收城市名称作为输入参数,并返回包含温度 (`tmp`) 和描述性状态 (`cond_txt`) 的字典对象[^4]。此外,在主程序部分实现了交互式的命令行界面让用户能够方便地查询任意城市的即时气象资料。 #### 扩展功能 除了基本的实时天气外,还可以进一步探索其他类型的 API 接口,比如日预测或者空气质量报告等功能模块,只需调整 URL 中对应的路径即可满足不同的业务需求[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值