AHdark
一个多语种开发蒟蒻
AHdark Blog

PHP 获取Bing每日壁纸的Class

代码全文

<?php

/**
 * @author AH-dark
 * @version 1.0
 */

namespace Bing;

/**
 * Bing每日壁纸
 * @author AH-dark
 * @version 1.0.0
 */
class Picture
{
    /**
     * Bing官方API
     * @api
     */
    const URL = "https://cn.bing.com/HPImageArchive.aspx";

    /**
     * Bing
     */
    const Bing_URL = "https://cn.bing.com/HPImageArchive.aspx";

    /**
     * 获取指定日期图片
     * @access public
     * @param int $day 日期差
     * @param int $num 数量
     * @return string|array URL
     */
    public function GetPic(int $day = 0, int $num = 1)
    {
        $headerArray = [
            "Content-type:application/json;",
            "Accept:application/json"
        ];
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, self::URL . "?format=js&idx=" . $day . "&n=" . $num . "&mkt=zh-CN");
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
        $output = json_decode(curl_exec($ch), 1);
        curl_close($ch);
        if ($num === 1) {
            return self::URL . $output['images'][0]['url'];
        } else {
            $list = [];
            $images = $output['images'];
            for ($i = 0; $i < $num; $i++) {
                $list[$i] = self::Bing_URL . $images[$i]['url'];
            }
            return $list;
        }
    }

    /**
     * 获取指定日期图片及相关信息
     * @access public
     * @param int $day 日期差
     * @param int $num 数量
     * @return array 信息
     */
    public function GetPicAll(int $day = 0, int $num = 1)
    {
        $headerArray = [
            "Content-type:application/json;",
            "Accept:application/json"
        ];
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, self::URL . "?format=js&idx=" . $day . "&n=" . $num . "&mkt=zh-CN");
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
        $output = json_decode(curl_exec($ch), 1);
        curl_close($ch);

        $response = [];

        /**
         * 图片列表
         * @var array
         */
        $images = $output['images'];

        for ($i = 0; $i < $num; $i++) {

            /**
             * 图片
             * @var array
             */
            $image = $images[$i];

            $response[$i] .= [
                "start" => [
                    "y" => (int)substr($image['startdate'], 0, 4),
                    "m" => (int)substr($image['startdate'], 4, 2),
                    "d" => (int)substr($image['startdate'], 6, 2),
                ],
                "end" => [
                    "y" => (int)substr($image['enddate'], 0, 4),
                    "m" => (int)substr($image['enddate'], 4, 2),
                    "d" => (int)substr($image['enddate'], 6, 2),
                ],
                "title" => $image['title'],
                "description" => $image['copyright'],
                "hash" => $image['hsh'],
                "url" => self::Bing_URL . $image['url'],
                "search" => $image['copyrightlink']
            ];
        }
        return $response;
    }

    /**
     * 下载图片到指定目录
     * @access public
     * @param int $day
     * @param int $num
     * @param string $path
     */
    function DownloadPic(int $day = 0, int $num = 1, string $path = "/tmp/")
    {
        if ($num === 1) {
            $link = $this->GetPic($day);
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_URL, $link);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
            $file = curl_exec($ch);
            curl_close($ch);
            $filename = pathinfo($link, PATHINFO_BASENAME);
            $resource = fopen($path . $filename, 'a');
            fwrite($resource, $file);
            fclose($resource);
            return $path . $filename;
        } else {
            $linklist = $this->GetPic($day, $num);
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
            foreach ($linklist as $id => $link) {
                curl_setopt($ch, CURLOPT_URL, $link);
                $file = curl_exec($ch);
                $filename = pathinfo($link, PATHINFO_BASENAME);
                $resource = fopen($path . $filename, 'a');
                fwrite($resource, $file);
                fclose($resource);
                $return[$id] = $path . $filename;
            }
            curl_close($ch);
            return $return;
        }
    }
}

GitHub

函数作用

GetPic

标记类型变量名默认值意义
参数Int$day0请求的日差
参数Int$num1请求的数量
返回String|Array

Return: $num为1时返回图片链接,$num>1时以数组形式返回带有多个图片链接的数值数组

目前没有加错误参数识别

GetPicAll

标记类型变量名默认值意义
参数Int$day0请求的日差
参数Int$num1请求的数量
返回Array

Return: 包含图片信息的数值数组

结构位置意义样例
id->start->y图片开始使用的年2021
id->start->m图片开始使用的月07
id->start->d图片开始使用的日11
id->end->y图片结束使用的年2021
id->end->m图片结束使用的月07
id->end->d图片结束使用的日12
id->title对应图片的标题Why, aloe there
id->description对应图片的版权信息和描述Spiral aloe (© David Madison/Getty Images)
id->hash对应图片的哈希值a00c0ba33ab71de6edd85ada44bcd5a2
id->url对应图片的链接https://cn.bing.com/th?id=OHR.SpiralAloe_EN-CN7222770215_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp
id->search对应图片的Bing搜索链接https://www.bing.com/search?q=spiral+aloe&form=hpcapt&filters=HpDate%3a%2220210711_0700%22
Return Array 剖析

DownloadPic

下载图片到指定目录

标记类型变量名默认值意义
参数Int$day0请求的日差
参数Int$num1请求的数量
参数String$path"/tmp/"临时目录
返回String|Array图片完整路径
赞赏
本文链接:https://ahdark.com/technology/635.shtml
本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可
欢迎加入Q群交流:654022768

AH Dark

文章作者

本博客的运营者、主要开发者、主要作者 深度学习算法工程师,后端工程师,嵌入式软件开发工程师 Azure认证 运维工程师

发表评论

textsms
account_circle
email

  • chenhans

    能不能出一个windows聚焦(win10锁频壁纸)的php源码,觉得那个质量高点

    3月前 回复

AHdark Blog

PHP 获取Bing每日壁纸的Class
代码全文 <?php /**  * @author AH-dark  * @version 1.0  */ namespace Bing; /**  * Bing每日壁纸  * @author&…
扫描二维码继续阅读
2021-07-12