前言
前文:
结合redis添加了api调用次数统计功能。
代码
from flask import Flask, send_file, send_from_directory, jsonify
import os
import random
import redis
app = Flask(__name__)
# 连接 Redis,指定密码
redis_client = redis.StrictRedis(
host='localhost',
port=6379,
db=0,
password='your_redis_password', # 替换为你的 Redis 密码
decode_responses=True
)
# 指定图片文件夹路径
pixiv_images_dir = 'images/pixiv'
pc_images_dir = 'images/pc'
pe_images_dir = 'images/pe'
# 获取随机 Pixiv 图片
@app.route('/images/pixiv', methods=['GET'])
def random_pixiv_image():
update_api_call_count('pixiv')
return get_random_image(pixiv_images_dir)
# 获取随机 PC 图片
@app.route('/images/pc', methods=['GET'])
def random_pc_image():
update_api_call_count('pc')
return get_random_image(pc_images_dir)
# 获取随机 PE 图片
@app.route('/images/pe', methods=['GET'])
def random_pe_image():
update_api_call_count('pe')
return get_random_image(pe_images_dir)
# 更新 API 调用计数
def update_api_call_count(api_name):
redis_client.incr(api_name)
# 获取 API 调用统计信息
@app.route('/images/stats', methods=['GET'])
def get_stats():
stats = {
'pixiv': redis_client.get('pixiv') or 0,
'pc': redis_client.get('pc') or 0,
'pe': redis_client.get('pe') or 0
}
return jsonify(stats)
def get_random_image(images_dir):
try:
images = [f for f in os.listdir(images_dir) if f.endswith(('.jpg', '.jpeg', '.png', '.webp'))]
if not images:
return jsonify({'error': '没有找到图片'}), 404
random_image = random.choice(images)
return send_file(os.path.join(images_dir, random_image), mimetype='image/jpeg')
except Exception as e:
return jsonify({'error': str(e)}), 500
# 提供 favicon.ico
@app.route('/favicon.ico')
def favicon():
return send_from_directory(os.path.join(app.root_path, 'favicon'), 'favicon.ico', mimetype='image/vnd.microsoft.icon')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
体验
地址:
PC随机图
PE随机图
PIXIV随机图
仅用作测试,没做整理、图片不多。
拓展
制作成docker镜像
创建一个app.py
文件
from flask import Flask, send_file, send_from_directory, jsonify
import os
import random
import redis
app = Flask(__name__)
# 连接 Redis,指定密码
redis_client = redis.StrictRedis(
host='localhost',
port=6379,
db=0,
password='your_redis_password', # 替换为你的 Redis 密码
decode_responses=True
)
# 指定图片文件夹路径
pixiv_images_dir = 'images/pixiv'
pc_images_dir = 'images/pc'
pe_images_dir = 'images/pe'
# 获取随机 Pixiv 图片
@app.route('/images/pixiv', methods=['GET'])
def random_pixiv_image():
update_api_call_count('pixiv')
return get_random_image(pixiv_images_dir)
# 获取随机 PC 图片
@app.route('/images/pc', methods=['GET'])
def random_pc_image():
update_api_call_count('pc')
return get_random_image(pc_images_dir)
# 获取随机 PE 图片
@app.route('/images/pe', methods=['GET'])
def random_pe_image():
update_api_call_count('pe')
return get_random_image(pe_images_dir)
# 更新 API 调用计数
def update_api_call_count(api_name):
redis_client.incr(api_name)
# 获取 API 调用统计信息
@app.route('/images/stats', methods=['GET'])
def get_stats():
stats = {
'pixiv': redis_client.get('pixiv') or 0,
'pc': redis_client.get('pc') or 0,
'pe': redis_client.get('pe') or 0
}
return jsonify(stats)
def get_random_image(images_dir):
try:
images = [f for f in os.listdir(images_dir) if f.endswith(('.jpg', '.jpeg', '.png', '.webp'))]
if not images:
return jsonify({'error': '没有找到图片'}), 404
random_image = random.choice(images)
return send_file(os.path.join(images_dir, random_image), mimetype='image/jpeg')
except Exception as e:
return jsonify({'error': str(e)}), 500
# 提供 favicon.ico
@app.route('/favicon.ico')
def favicon():
return send_from_directory(os.path.join(app.root_path, 'favicon'), 'favicon.ico', mimetype='image/vnd.microsoft.icon')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
创建一个rely.txt
文件,添加下面内容
Flask
redis==4.0.2
创建一个favicon
文件夹,将favicon.ico放进去
mkdir favicon
创建dockerfile
文件
# 使用官方 Python 镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /usr/src/app
# 复制项目文件
COPY . .
# 安装依赖
RUN pip install --no-cache-dir -r rely.txt
# 暴露端口
EXPOSE 5000
# 启动应用
CMD ["python", "app.py"]
构建镜像
docker build -t random-image-api .
构建容器
docker run \
-name random-image-api \
-p 5000:5000 \
-v /images-path/pixiv:/usr/src/app/images/pixiv \
-v /images-path/pc:/usr/src/app/images/pc \
-v /images-path/pc:/usr/src/app/images/pc \
random-image-api
评论区