侧边栏壁纸
博主头像

我依旧在追寻自由的路上

  • 累计撰写 123 篇文章
  • 累计创建 9 个分类
  • 累计创建 32 个标签

目 录CONTENT

文章目录

随机图API-ProMax

柚子
原创 / 2024-12-02 / 0 评论 / 0 点赞 / 22 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响您的利益,请联系 站长 删除。

前言

前文:

随机图API

随机图API升级版

结合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

评论区