AI智能摘要
本文介绍了一个基于PHP 7+的Bing每日壁纸API接口实现方案,支持批量获取壁纸、JSON格式化输出及图片直显功能。通过调用Bing官方XML接口并使用正则解析,可获取包括图片URL、标题、版权、日期在内的详细信息。接口支持自定义数量与起始位置,兼容现代PHP环境,修复了e修饰符废弃问题,并建议通过缓存、CORS、CURL优化提升稳定性与性能,适用于网站背景、小程序、壁纸站等多种应用场景。
— 此摘要由AI分析文章内容生成,仅供参考。
📝 前言
Bing搜索引擎每天都会更新精美的背景壁纸,这些高质量的图片深受用户喜爱。本文将教你如何使用PHP开发一个Bing每日壁纸API接口,支持批量获取、JSON格式化输出,可直接应用于网站、小程序等项目中。

✨ 功能特性
- ✅ 批量获取:支持一次性获取多张壁纸(默认10张)
- ✅ JSON输出:格式化的JSON数据,方便前端调用
- ✅ 图片直显:支持直接返回图片,无需二次请求
- ✅ 完整信息:包含图片URL、标题、版权、日期等详细信息
- ✅ 灵活参数:自定义获取数量和起始位置
- ✅ PHP 7+兼容:修复了正则表达式过时问题
🎯 接口演示
返回JSON格式
https://your-domain.com/bing.php?format=json
直接显示图片
https://your-domain.com/bing.php
自定义数量
https://your-domain.com/bing.php?format=json&n=5
💻 完整代码
<?php
// 获取参数:n=图片数量(默认10),idx=起始索引(默认0)
$n = isset($_GET['n']) ? intval($_GET['n']) : 10;
$idx = isset($_GET['idx']) ? intval($_GET['idx']) : 0;
$str = file_get_contents("https://cn.bing.com/HPImageArchive.aspx?idx={$idx}&n={$n}");
// 解析所有图片
preg_match_all('/<image>(.*?)<\/image>/is', $str, $imageMatches);
$images = [];
foreach($imageMatches[1] as $imageXml){
$url = '';
$urlBase = '';
$title = '';
$copyright = '';
$copyrightlink = '';
$startdate = '';
$enddate = '';
// 解析各个字段
if(preg_match("/<url>(.+?)<\/url>/is", $imageXml, $matches)){
$url = 'https://cn.bing.com' . html_entity_decode($matches[1]);
}
if(preg_match("/<urlBase>(.+?)<\/urlBase>/is", $imageXml, $matches)){
$urlBase = 'https://cn.bing.com' . html_entity_decode($matches[1]);
}
if(preg_match("/<headline>(.+?)<\/headline>/is", $imageXml, $matches)){
$title = html_entity_decode($matches[1]);
}
if(preg_match("/<copyright>(.+?)<\/copyright>/is", $imageXml, $matches)){
$copyright = html_entity_decode($matches[1]);
}
if(preg_match("/<copyrightlink>(.+?)<\/copyrightlink>/is", $imageXml, $matches)){
$copyrightlink = html_entity_decode($matches[1]);
}
if(preg_match("/<startdate>(.+?)<\/startdate>/is", $imageXml, $matches)){
$startdate = $matches[1];
}
if(preg_match("/<enddate>(.+?)<\/enddate>/is", $imageXml, $matches)){
$enddate = $matches[1];
}
if($url){
$images[] = [
'url' => $url,
'urlBase' => $urlBase,
'title' => $title,
'copyright' => $copyright,
'copyrightlink' => $copyrightlink,
'startdate' => $startdate,
'enddate' => $enddate
];
}
}
// 检查是否返回JSON格式
$format = isset($_GET['format']) ? $_GET['format'] : '';
if($format === 'json'){
// 返回JSON格式
header('Content-Type: application/json; charset=utf-8');
if(!empty($images)){
$response = [
'code' => 200,
'msg' => 'success',
'count' => count($images),
'data' => $images
];
echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
}else{
$response = [
'code' => 500,
'msg' => 'error',
'data' => null
];
echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
}
}else{
// 默认返回第一张图片
if(!empty($images)){
header('Content-Type: image/JPEG');
@ob_end_clean();
@readfile($images[0]['url']);
@flush(); @ob_flush();
exit();
}else{
exit('error');
}
}
?>
🔧 技术要点解析
1. API参数设计
$n = isset($_GET['n']) ? intval($_GET['n']) : 10;
$idx = isset($_GET['idx']) ? intval($_GET['idx']) : 0;
- n:控制获取图片数量,默认10张
- idx:起始索引,0表示今天,1表示昨天,以此类推
- 使用
intval()确保参数安全
2. 正则表达式批量解析
preg_match_all('/<image>(.*?)<\/image>/is', $str, $imageMatches);
使用 preg_match_all 批量匹配所有 <image> 标签,比逐个请求效率更高。
3. HTML实体解码
$url = 'https://cn.bing.com' . html_entity_decode($matches[1]);
Bing返回的XML中包含 & 等HTML实体,需要解码为 & 才能正确访问。
4. JSON格式化输出
echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
- JSON_UNESCAPED_UNICODE:正确显示中文,不转义为
\uxxxx - JSON_UNESCAPED_SLASHES:不转义斜杠,
https://而非https:\/\/ - JSON_PRETTY_PRINT:格式化输出,提高可读性
5. PHP 7+ 兼容性修复
// ❌ 旧版本(PHP 5)
preg_match("/<url>(.+?)<\/url>/ies", $str, $matches)
// ✅ 新版本(PHP 7+)
preg_match("/<url>(.+?)<\/url>/is", $str, $matches)
PHP 7.0+ 移除了正则表达式的 e 修饰符,必须去除才能正常运行。
📊 返回数据格式
JSON响应示例
{
"code": 200,
"msg": "success",
"count": 10,
"data": [
{
"url": "https://cn.bing.com/th?id=OHR.MadgascarAmmonite_ZH-CN6497276091_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
"urlBase": "https://cn.bing.com/th?id=OHR.MadgascarAmmonite_ZH-CN6497276091",
"title": "大自然的秘密代码",
"copyright": "马达加斯加菊石化石 (© ThomasLENNE/Shutterstock)",
"copyrightlink": "https://www.bing.com/search?q=xxx",
"startdate": "20251122",
"enddate": "20251123"
}
// ... 更多图片
]
}
字段说明
| 字段 | 说明 | 示例 |
|---|---|---|
| url | 完整图片地址 | 1920×1080分辨率 |
| urlBase | 图片基础URL | 可拼接不同尺寸 |
| title | 图片标题 | 中文描述 |
| copyright | 版权信息 | 作者和来源 |
| copyrightlink | 版权链接 | Bing搜索链接 |
| startdate | 开始日期 | YYYYMMDD格式 |
| enddate | 结束日期 | YYYYMMDD格式 |
🚀 使用场景
1. 前端网站背景
fetch('https://your-domain.com/bing.php?format=json')
.then(response => response.json())
.then(data => {
document.body.style.backgroundImage = `url(${data.data[0].url})`;
});
2. 微信小程序轮播
wx.request({
url: 'https://your-domain.com/bing.php?format=json&n=5',
success(res) {
this.setData({
swiperList: res.data.data.map(item => item.url)
});
}
});
3. 直接显示图片
<img src="https://your-domain.com/bing.php" alt="Bing每日壁纸">
4. 壁纸下载站
获取历史壁纸:
// 获取最近30天的壁纸
bing.php?format=json&idx=0&n=30
⚠️ 注意事项
- 服务器配置
- 确保PHP已开启
allow_url_fopen - 或使用
curl替代file_get_contents
- 确保PHP已开启
- 错误处理
- 建议添加超时控制
- 处理网络异常情况
- 缓存优化
- Bing每天更新一次,建议添加缓存
- 减少对Bing服务器的请求压力
- 跨域问题
- 如需跨域访问,添加CORS头:
header('Access-Control-Allow-Origin: *');
🔥 进阶优化
添加缓存机制
$cacheFile = 'cache/bing_' . date('Ymd') . '.json';
if(file_exists($cacheFile)){
echo file_get_contents($cacheFile);
exit;
}
// ... 原有代码
file_put_contents($cacheFile, json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
使用CURL(更稳定)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://cn.bing.com/HPImageArchive.aspx?idx={$idx}&n={$n}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$str = curl_exec($ch);
curl_close($ch);
支持不同分辨率
// 添加分辨率参数
$resolution = isset($_GET['resolution']) ? $_GET['resolution'] : '1920x1080';
$url = str_replace('1920x1080', $resolution, $url);
📈 总结
本文实现了一个功能完善的Bing每日壁纸API接口,具有以下优势:
- 🎨 代码简洁,易于理解和维护
- 🚀 性能优良,支持批量获取
- 🔧 灵活扩展,可根据需求定制
- 📱 应用广泛,适用多种场景
希望这个接口能帮助你快速集成Bing每日壁纸功能到你的项目中!
🔗 相关资源
- Bing壁纸API官方文档:https://cn.bing.com/HPImageArchive.aspx
- PHP正则表达式文档:https://www.php.net/manual/zh/book.pcre.php
- JSON编码选项:https://www.php.net/manual/zh/json.constants.php
如果觉得本文对你有帮助,欢迎点赞👍、收藏⭐、评论💬!
© 版权声明
THE END















暂无评论内容