Qt做的一个Bing(微软必应)壁纸工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt做的一个Bing(微软必应)壁纸工具相关的知识,希望对你有一定的参考价值。

        微软Bing壁纸是我非常喜欢的壁纸,怎么说呢它的壁纸非常细腻逼真,总是让人心动,我就不安利了,反正比三百六X鸟好多了。不幸的是Win10更新到最新版以后微软bing缤纷桌面不能运行了,失望加无奈。。  难道我就这么的放弃我的壁纸了么,不,党告诉我,你可以靠自己,你可以创新,然后就自己动手做了一款工具来自动下载Bing壁纸工具。 纯。。。纯到没有界面,纯到没有任何提示,纯到24小时自动更换壁纸,纯。

         整体而言,就是用json network slots ,就简单贴下主要代码部分,附件有构建好的应用,win10通过。。。


//bing.cpp
#include "bing.h"
#pragma comment(lib, "user32.lib")

Bing::Bing()
{
    connect(&manager,&QNetworkAccessManager::finished,this,&Bing::downloadFinished);

}

void Bing::execute()
{
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(execute()));
    timer->setInterval(86400000);
    timer->start();

    QUrl url("https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US");

    QNetworkRequest request(url);
    QNetworkReply *reply = manager.get(request);
    currentReplys.append(reply);
    qDebug() <<  "execute ";
}
void Bing::doGetJson(QNetworkReply *reply)
{

    QByteArray byteArray = reply->readAll();

    QJsonParseError jsonError;
    QJsonDocument json = QJsonDocument::fromJson(byteArray,&jsonError);

    if (!json.isNull() && (jsonError.error == QJsonParseError::NoError))
    {

        if(json.isObject())
        {

            QJsonObject obj =json.object();
            if(obj.contains("images"))
            {

                QJsonValue value = obj.value("images");
                if(value.isArray())
                {

                    QJsonArray jsonArray = value.toArray();
                    QJsonValue imageValue = jsonArray.at(0);
                    if(imageValue.isObject())
                    {
                        QString image = imageValue["url"].toString();
                        QString baseUrl = "https://www.bing.com";
                        baseUrl.append(image);
                        QUrl url(baseUrl);
                        QNetworkRequest request(url);
                        QNetworkReply *replyImage = manager.get(request);
                        currentReplys.append(replyImage);
                    }
                }
            }
        }
    }

}

void Bing::downloadFinished(QNetworkReply *reply)
{

    if(reply->url() == QUrl("https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US"))
    {
        doGetJson(reply);
    }
    else
    {
        saveImages(reply);
    }

    currentReplys.removeAll(reply);
    reply->deleteLater();
}

void Bing::saveImages(QNetworkReply *reply)
{

    QDate date = QDate::currentDate();

    QString fileName = "d:\\bingWallPaper\\bing";
    fileName.append(date.toString("yyyyMMdd")).append(".jpg");
    QFile file(fileName);


    if(!file.open(QIODevice::WriteOnly))
    {
        qDebug() << "open failed";
        return;
    }
    file.write(reply->readAll());
    file.close();
    setWallPaper();
}
void Bing::setWallPaper()
{
    //const wchar_t *wimFile =reinterpret_cast<const wchar_t *>(pszWimFile.utf16());
    QDate date = QDate::currentDate();
    QString fileName = "d:\\bingWallPaper\\bing";
    fileName.append(date.toString("yyyyMMdd")).append(".jpg");
    const wchar_t *image =reinterpret_cast<const wchar_t *>(fileName.utf16());
    if( !SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)image, SPIF_UPDATEINIFILE) )//调用windows的API函

        return;

}

源代码:https://github.com/piaodonkey/BingWallPaper  我真是越来越懒了。。

附件:链接:https://pan.baidu.com/s/1XiL4HhluEbPzEcIVo8xhmA 密码:dck1

以上是关于Qt做的一个Bing(微软必应)壁纸工具的主要内容,如果未能解决你的问题,请参考以下文章

必应的两个壁纸接口,可用来获取海量的高质量壁纸和相关故事

python之爬虫-必应壁纸

如何获取 bing 每日壁纸(超高清版)

微软必应Bing搜索引擎这几天无法访问!

必应每日壁纸下载|必应每日壁纸V3.3.1免费下载

win8的bing桌面(9m左右)怎么实现自动更新bing桌面壁纸,壁纸都保存到哪了。求大神解答