serverless函数的开发方式很适合用来实现一些简单的小功能,比如接下来要做的这个,抓取bing搜索的每日壁纸图片,功能非常的简单:
选择使用腾讯云的云函数功能来做开发,所以需要按照腾讯云的文档来安装好相应的工具:
安装和使用过程,官方文档很详细了,这里不再做描述。
python实现,index.py:
# -*- coding: utf8 -*-
from os import getenv
import requests
import json
#此处有坑,云上运行的时候是qcloud_cos_v5
from qcloud_cos_v5 import CosConfig
from qcloud_cos_v5 import CosS3Client
from serverless_db_sdk import database
def main_handler(event, context):
#请求bing的api,获取壁纸信息,参数n=1控制每次只取最近的一条
r = requests.get("https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1")
r = r.json()
for row in r['images']:
print(row)
#先下载
download('https://cn.bing.com{}'.format(row['url']), row['fullstartdate'])
#数据库记录信息
save2db(row)
return("OK")
def download(url, startdate):
# 下载回来
r = requests.get(url)
tmp_file = "/tmp/" + startdate + ".png"
with open(tmp_file, 'wb') as f:
f.write(r.content)
# 上传到cos
secret_id = getenv('COS_SECRETID')
secret_key = getenv('COS_SECRETKEY')
config = CosConfig(Region="ap-guangzhou",
SecretId=secret_id, SecretKey=secret_key)
cos_client = CosS3Client(config)
res_cos = cos_client.put_object_from_local_file(
Bucket="bing-1256668370",
LocalFilePath=tmp_file,
Key='{}.png'.format(startdate))
return res_cos
def save2db(row):
sql_template = """INSERT INTO `bing`.`wallpaper` (`startdate`, `fullstartdate`, `enddate`, `url`,`urlbase`,
`copyright`,`copyrightlink`,`title`,`quiz`,`hsh`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"""
connection = database("BING").connection(autocommit=False)
try:
cursor = connection.cursor()
cursor.execute(sql_template, (row['startdate'], row['fullstartdate'], row['enddate'], row['url'],
row['urlbase'], row['copyright'], row['copyrightlink'], row['title'],
row['quiz'], row['hsh']))
connection.commit()
finally:
connection.close()
云函数的template.yaml,这里配置了数据库和cos的参数
Resources:
default:
Type: TencentCloud::Serverless::Namespace
fetch_bing_wallpicture:
Properties:
CodeUri: .
Description: 抓取bing每日一图
Environment:
Variables:
DB_BING_DATABASE: bing
DB_BING_HOST: ***
DB_BING_PASSWORD: ***
DB_BING_PORT: "***"
DB_BING_USER: bing
DB_DEFAULT: BING
COS_SECRETID: ***
COS_SECRETKEY: ***
Events: {}
Handler: index.main_handler
MemorySize: 128
Runtime: Python3.6
Timeout: 3
VpcConfig:
SubnetId: ***
VpcId: ***
Type: TencentCloud::Serverless::Function
上传到腾讯云之后,在腾讯云的控制台上配置触发方式为每天定时执行,这样就会每天抓取到最新的bing壁纸了
echo '{"test":"value"}' | scf native invoke
2. cos的库版本云端运行的时候是qcloud_cos_v5,所以本地安装的时候需要注意,这里我在本地一开始安装的就不是这个版本,本地调试通过,到云端就会报错。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。