200字
使用PHP抓取必应每日图像
2025-06-19
2025-09-27
API

在网站开发中,经常需要展示动态内容,比如每日更新的背景图像。必应(Bing)搜索引擎每天都会提供一张精美的壁纸,我们可以通过PHP轻松获取并展示这些图像。本文将介绍一个简单的PHP脚本,用于抓取并输出必应的每日图像。

示例:https://api.bleaz.top/bingimages/ (注:这只是一个示例,请不要滥用哈!我保留禁止一切调用的权力!)

脚本功能概述

这个PHP脚本主要实现以下功能:

  1. 从必应API获取当日图片信息

  2. 下载图片并直接输出给浏览器

  3. 设置适当的HTTP头以优化性能

  4. 提供错误处理机制,当主源不可用时显示备用图片

代码解析

<?php
// 设置内容类型为图片
header('Content-Type: image/jpeg');
 
// 设置缓存控制头(缓存1天)
header('Cache-Control: public, max-age=86400');首先,脚本设置HTTP响应头,告诉浏览器这是一个JPEG图片,并且可以缓存1天(86400秒)。这能显著减少服务器负载,因为同一用户一天内多次访问时只需下载一次图片。
// 尝试从Bing获取图片
try {
    // 设置超时时间(秒)
    $context = stream_context_create(['http' => ['timeout' => 5]]);
    $str = @file_get_contents('https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1', false, $context);

使用try-catch块来处理可能的错误。设置5秒超时,防止请求长时间挂起。通过必应提供的API接口获取图片信息,idx=0表示获取当天的图片。

    if ($str === false) {
        throw new Exception('无法从Bing获取数据');
    }
 
    $data = json_decode($str, true);
 
    if (json_last_error() !== JSON_ERROR_NONE || !isset($data['images'][0]['url'])) {
        throw new Exception('无效的Bing API响应');
    }检查API响应是否有效,包括网络请求是否成功和返回的JSON数据是否包含预期的图片URL。
    $imgurl = 'https://cn.bing.com' . $data['images'][0]['url'];
    $image = @file_get_contents($imgurl, false, $context);
 
    if ($image === false) {
        throw new Exception('无法获取Bing图片');
    }
 
    // 输出图片
    echo $image;构造完整的图片URL并下载图片内容,然后直接输出给浏览器。
} catch (Exception $e) {
    // 出错时使用默认图片
    $defaultImage = file_get_contents('https://api.bleaz.top/bingimages/error.webp');
    echo $defaultImage;
}
?>

使用PHP抓取必应每日图像
作者
Bleaz
发表于
2025-06-19
License
CC BY-NC-SA 4.0

评论