FurAPI 图片接口文档


接口概述

FurAPI 提供了灵活的图片访问接口,支持随机获取图片、分类获取以及指定图片访问。所有接口均支持返回JSON格式数据。

示例

随机图片

接口列表

api基础地址

https://img.furapi.top

1.1 随机获取所有图片

接口地址: /api

请求方式: GET

描述: 从所有图片中随机返回一张图片

示例:

JSON响应示例:

{
    "name": "example.jpg",
    "size": 224251,
    "uploadtime": "2025-06-01 02:34:51",
    "path": "/api/example.jpg",
    "processingTime": 2
}

1.2 随机获取指定目录图片

接口地址: /api/{目录名}

请求方式: GET

描述: 从指定目录中随机返回一张图片

示例:

JSON响应示例:

{
    "name": "random_image.jpg",
    "size": 356789,
    "uploadtime": "2025-05-28 14:22:10",
    "path": "/api/furry/random_image.jpg",
    "processingTime": 3
}

1.3 获取指定图片

接口地址: /api/{目录名}/{图片名}

请求方式: GET

描述: 直接访问指定目录下的指定图片

示例:

JSON响应示例:

{
    "name": "fox.jpg",
    "size": 182456,
    "uploadtime": "2025-05-15 09:15:33",
    "path": "/api/furry/fox.jpg",
    "processingTime": 1
}

1.4 获取文件列表

接口地址: /list.json

请求方式: GET

描述: 获取所有可用的图片目录和文件列表

示例:

JSON响应示例:


    "code": 200,
    "categories": [
    {
        "_root": {
          "810F68CEF6527EA78A4A201CA8293919.png": "2025-05-28 22:39:12",
          "B7D09439CD390C6C9E0764057C3A901E.jpg": "2025-06-19 18:52:37",
          "E8186C0A390401605329B26551D3EDC1.jpg": "2025-06-19 22:22:06",
          "QQ20250524-010001.png": "2025-05-24 01:00:08",
          "QQ20250524-010025.png": "2025-05-24 01:00:27",
          "QQ20250601-023253.png": "2025-06-01 02:32:57",
          "QQ20250601-023446.png": "2025-06-01 02:34:51",
          "QQ20250601-023929.png": "2025-06-01 02:39:33",
          "QQ20250601-041824.png": "2025-06-01 04:18:27",
          "QQ20250602-005904.png": "2025-06-02 00:59:07",
          "QQ20250602-015211.png": "2025-06-02 01:52:13",
          "QQ20250602-020642.png": "2025-06-02 02:06:44"
        }
    ],
    "total_images": 350
}

使用示例

<!-- 随机显示一张图片 -->
<img src="https://img.furapi.top/api" alt="随机图片">

<!-- 显示furry目录的随机图片 -->
<img src="https://img.furapi.top/api/furry" alt="Furry图片">

<!-- 显示指定图片 -->
<img src="https://img.furapi.top/api/furry/fox.jpg" alt="狐狸图片">
<!-- HTML部分 -->
<div id="imageContainer">
    <img id="randomImage" src="" alt="点击按钮获取图片" style="max-width: 500px;">
    <div id="imageInfo"></div>
</div>
<button onclick="getRandomImage()">获取随机图片</button>
<button onclick="getFurryImage()">获取Furry图片</button>
<button onclick="getImageInfo()">获取图片信息(JSON)</button>

<script>
// 获取随机图片
function getRandomImage() {
    const img = document.getElementById('randomImage');
    // 添加时间戳避免缓存
    img.src = 'https://img.furapi.top/api?' + new Date().getTime();
}

// 获取指定目录图片
function getFurryImage() {
    const img = document.getElementById('randomImage');
    img.src = 'https://img.furapi.top/api/furry?' + new Date().getTime();
}

// 获取图片JSON信息
function getImageInfo() {
    fetch('https://img.furapi.top/api?json=1')
        .then(response => response.json())
        .then(data => {
            // 显示图片
            document.getElementById('randomImage').src = 'https://img.furapi.top' + data.path;
            
            // 显示图片信息
            const info = `
                <p>文件名: ${data.name}</p>
                <p>文件大小: ${(data.size / 1024).toFixed(2)} KB</p>
                <p>上传时间: ${data.uploadtime}</p>
                <p>路径: ${data.path}</p>
                <p>处理时间: ${data.processingTime}ms</p>
            `;
            document.getElementById('imageInfo').innerHTML = info;
        })
        .catch(error => {
            console.error('获取失败:', error);
            alert('获取图片信息失败');
        });
}
</script>
<template>
  <div>
    <img :src="imageUrl" v-if="imageUrl" style="max-width: 500px;">
    <div v-if="imageData">
      <p>文件名: {{ imageData.name }}</p>
      <p>大小: {{ (imageData.size / 1024).toFixed(2) }} KB</p>
      <p>上传时间: {{ imageData.uploadtime }}</p>
    </div>
    <button @click="getRandomImage">获取随机图片</button>
    <button @click="getImageWithInfo">获取图片及信息</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      imageUrl: '',
      imageData: null
    }
  },
  methods: {
    getRandomImage() {
      this.imageUrl = `https://img.furapi.top/api?t=${Date.now()}`;
      this.imageData = null;
    },
    async getImageWithInfo() {
      try {
        const response = await fetch('https://img.furapi.top/api?json=1');
        const data = await response.json();
        this.imageData = data;
        this.imageUrl = `https://img.furapi.top${data.path}`;
      } catch (error) {
        console.error('获取失败:', error);
      }
    }
  }
}
</script>
import React, { useState } from 'react';

function ImageGallery() {
  const [imageUrl, setImageUrl] = useState('');
  const [imageInfo, setImageInfo] = useState(null);
  const [loading, setLoading] = useState(false);

  const getRandomImage = () => {
    setImageUrl(`https://img.furapi.top/api?t=${Date.now()}`);
    setImageInfo(null);
  };

  const getImageWithInfo = async () => {
    setLoading(true);
    try {
      const response = await fetch('https://img.furapi.top/api?json=1');
      const data = await response.json();
      setImageInfo(data);
      setImageUrl(`https://img.furapi.top${data.path}`);
    } catch (error) {
      console.error('获取失败:', error);
    } finally {
      setLoading(false);
    }
  };

  return (
    <div>
      {imageUrl && <img src={imageUrl} alt="Random" style={{maxWidth: '500px'}} />}
      
      {imageInfo && (
        <div>
          <p>文件名: {imageInfo.name}</p>
          <p>大小: {(imageInfo.size / 1024).toFixed(2)} KB</p>
          <p>上传时间: {imageInfo.uploadtime}</p>
          <p>处理时间: {imageInfo.processingTime}ms</p>
        </div>
      )}
      
      <button onClick={getRandomImage}>获取随机图片</button>
      <button onClick={getImageWithInfo} disabled={loading}>
        {loading ? '加载中...' : '获取图片及信息'}
      </button>
    </div>
  );
}

export default ImageGallery;

JavaScript中使用

// 获取随机图片的JSON数据
fetch('https://img.furapi.top/api?json=1')
    .then(response => response.json())
    .then(data => {
        console.log('图片名称:', data.name);
        console.log('文件大小:', data.size);
        console.log('上传时间:', data.uploadtime);
        console.log('图片路径:', data.path);
        console.log('处理时间:', data.processingTime + 'ms');
        
        // 使用返回的路径显示图片
        document.getElementById('myImage').src = 'https://img.furapi.top' + data.path;
    });

// 异步函数示例
async function fetchRandomImage() {
    try {
        const response = await fetch('https://img.furapi.top/api/furry?json=1');
        const data = await response.json();
        
        // 创建图片元素
        const img = new Image();
        img.src = 'https://img.furapi.top' + data.path;
        img.onload = () => {
            console.log(`图片 ${data.name} 加载成功`);
            console.log(`图片大小: ${(data.size / 1024).toFixed(2)} KB`);
        };
        
        return data;
    } catch (error) {
        console.error('获取图片失败:', error);
    }
}

// 获取文件列表
fetch('https://img.furapi.top/list.json')
    .then(response => response.json())
    .then(data => {
        console.log('可用目录:', data.categories);
    });
import requests
import json

# 获取随机图片信息
response = requests.get('https://img.furapi.top/api?json=1')
data = response.json()
print(f"图片名称: {data['name']}")
print(f"文件大小: {data['size'] / 1024:.2f} KB")
print(f"上传时间: {data['uploadtime']}")
print(f"图片路径: {data['path']}")
print(f"处理时间: {data['processingTime']}ms")

# 下载图片
image_url = f"https://img.furapi.top{data['path']}"
img_response = requests.get(image_url)
if img_response.status_code == 200:
    with open(data['name'], 'wb') as f:
        f.write(img_response.content)
    print(f"图片已保存为: {data['name']}")

# 获取指定目录的随机图片
response = requests.get('https://img.furapi.top/api/furry?json=1')
data = response.json()
print(f"Furry图片: {data['name']}")

# 批量获取图片
import time

def get_multiple_images(count=5, category=''):
    images = []
    for i in range(count):
        url = f'https://img.furapi.top/api/{category}?json=1' if category else 'https://img.furapi.top/api?json=1'
        response = requests.get(url)
        if response.status_code == 200:
            images.append(response.json())
        time.sleep(0.5)  # 避免请求过快
    return images

# 获取5张随机图片信息
random_images = get_multiple_images(5)
for img in random_images:
    print(f"- {img['name']} ({img['size'] / 1024:.2f} KB)")
<!-- HTML -->
<div id="gallery">
    <img id="displayImage" src="" style="max-width: 500px; display: none;">
    <div id="loading" style="display: none;">加载中...</div>
    <div id="imageDetails"></div>
</div>
<button id="btnRandom">随机图片</button>
<button id="btnFurry">Furry图片</button>
<button id="btnWithInfo">获取详细信息</button>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
    // 随机图片按钮
    $('#btnRandom').click(function() {
        $('#displayImage')
            .attr('src', 'https://img.furapi.top/api?' + Date.now())
            .show();
        $('#imageDetails').empty();
    });
    
    // Furry图片按钮
    $('#btnFurry').click(function() {
        $('#displayImage')
            .attr('src', 'https://img.furapi.top/api/furry?' + Date.now())
            .show();
        $('#imageDetails').empty();
    });
    
    // 获取详细信息按钮
    $('#btnWithInfo').click(function() {
        $('#loading').show();
        
        $.ajax({
            url: 'https://img.furapi.top/api?json=1',
            method: 'GET',
            success: function(data) {
                $('#displayImage')
                    .attr('src', 'https://img.furapi.top' + data.path)
                    .show();
                
                const details = `
                    <h4>图片信息:</h4>
                    <ul>
                        <li>文件名:${data.name}</li>
                        <li>大小:${(data.size / 1024).toFixed(2)} KB</li>
                        <li>上传时间:${data.uploadtime}</li>
                        <li>路径:${data.path}</li>
                        <li>加载耗时:${data.processingTime}ms</li>
                    </ul>
                `;
                $('#imageDetails').html(details);
            },
            error: function(xhr, status, error) {
                alert('获取失败: ' + error);
            },
            complete: function() {
                $('#loading').hide();
            }
        });
    });
});
</script>

注意事项

错误码说明

错误码 说明
200 请求成功
404 图片或目录不存在
500 服务器内部错误