Skip to content

hsmaocn/random_image_api

Repository files navigation

random_image_api

该项目的主要功能是实现从一个包含多个 URL 的文本文件中随机选择一个 URL 并进行重定向。以下是该脚本各部分的详细解析:

文件与缓存设置

  • 文件路径: file = 'images.txt' 指定了包含 URL 列表的文本文件。
  • 缓存文件路径: cache_file = 'cache.txt' 指定了用于存储文件内容缓存的文件。
  • 缓存时间: cache_time = 3600 设置了缓存的有效时间(以秒为单位),默认为 1 小时。

错误处理函数

  • handle_error 函数: 接受错误代码和错误信息作为参数,设置 HTTP 响应状态码并输出错误信息,之后终止脚本执行。

缓存生成函数

  • generate_cache 函数:
    • 使用 @file() 函数读取文件内容,忽略空行和新行。
    • 如果读取失败或文件为空,调用 handle_error 函数返回 500 错误。
    • 否则,将文件内容编码为 JSON 格式并写入缓存文件。

缓存检查与使用

  • 检查缓存文件是否存在且未过期(当前时间减去缓存文件修改时间小于缓存时间)。
  • 如果缓存有效,直接从缓存文件中解码获取 URL 列表。
  • 否则,调用 generate_cache 函数生成新的缓存文件并获取 URL 列表。

随机 URL 选择与重定向

  • 使用 array_rand 函数从 URL 列表中随机选择一个 URL。
  • 使用 filter_var 函数验证所选 URL 是否符合 URL 格式。
    • 如果不符合格式,调用 handle_error 函数返回 500 错误。
  • 使用 header 函数设置 HTTP Location 头部,实现对随机选择 URL 的重定向。
  • 最后,使用 exit 函数确保脚本在重定向后立即终止执行。

关于Python详解:文件重命名与URL列表生成

1. calculate_crc32(file_path)函数

  • 功能: 计算给定文件的CRC32校验和。
  • 参数:
    • file_path: 字符串类型,表示要计算CRC32的文件的绝对路径。
  • 内部工作流程:
    • 使用with open(file_path, 'rb') as f:语句以二进制模式打开文件,确保文件正确关闭。
    • 读取整个文件内容到file_data变量中。
    • 使用zlib.crc32(file_data)计算文件的CRC32校验和。
    • 由于zlib.crc32返回的是一个有符号32位整数,通过& 0xFFFFFFFF操作将其转换为无符号32位整数。
    • 最终结果使用format函数转换为8位十六进制字符串,格式化为'08x',即保证字符串长度至少为8位,不足部分用0填充。
  • 返回值: 字符串类型的CRC32校验和。

2. rename_files_and_save_to_txt(directory, base_url, output_file)函数

  • 功能: 在指定目录下遍历所有文件,计算每个文件的CRC32值,重命名文件,并将重命名后的文件对应的URL保存到指定的文本文件中。
  • 参数:
    • directory: 字符串类型,表示要遍历的目录路径。
    • base_url: 字符串类型,表示URL的基础部分,用于拼接重命名后的文件名。
    • output_file: 字符串类型,表示保存URL列表的输出文本文件路径。
  • 内部工作流程:
    • 使用with open(output_file, 'w', encoding='utf-8') as txt_file:语句以写入模式打开输出文件。
    • 使用os.walk(directory)遍历directory目录下的所有文件和子目录。
    • 对于每个文件:
      • 获取文件的完整路径。
      • 调用calculate_crc32函数计算文件的CRC32值。
      • 将CRC32值与文件的扩展名组合成新的文件名。
      • 检查新文件名是否已存在,如果存在,则在CRC32值后添加递增计数器,直到找到一个唯一的文件名。
      • 使用os.rename函数将文件重命名为新文件名。
      • 拼接base_url和新文件名,形成完整的URL。
      • 将完整的URL写入txt_file
      • 打印重命名前后文件的信息和保存的URL。

总结

此脚本主要用于批量重命名目录下的所有文件,重命名规则为文件的CRC32校验和加原始文件扩展名,同时将重命名后的文件URL保存到一个文本文件中。这在文件管理、数据备份或需要唯一标识符的场景中非常有用。