发布一个自用的开源小软件,Bing每日壁纸,使用c# winform开发。该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事。

功能特性

  • 自动获取Bing最新图片并设置为壁纸
  • 壁纸故事, 你还可以查看壁纸后面的故事
  • 历史壁纸,支持查看最近两年的壁纸
  • 随机切换,随机获取几年的壁纸,穿梭时光之中
  • 定时切换,开启后每一小时自动切换壁纸

支持中英文,提供桌面widget:

查看壁纸描述:

原理

获取最新壁纸

http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US可以获取最新的壁纸。

 using (var client = new HttpClient())
{
using (var jsonStream = await client.GetStreamAsync("http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US"))
{
var ser = new DataContractJsonSerializer(typeof(Result));
var res = (Result)ser.ReadObject(jsonStream); return new HistoryImage
{
Id = Guid.NewGuid().ToString(),
Title = res.images[0].Copyright,
Description = res.images[0].Copyright,
ImageUrl = "http://www.bing.com" + res.images[0].URL,
Date = DateTime.Now.ToString("yyyy-MM-dd"),
AddDateTime = DateTime.Now.ToString(),
Locate = res.images[0].Copyright.GetBetween(",", "(")
};
}
}

获取历史壁纸

Bing未提供历史壁纸获取接口,https://bing.ioliu.cn/提供了历史数据,我们可以爬取:

 public static List<HistoryImage> LoadLatestDaysImages()
{
var result = new List<HistoryImage>();
try
{
var html = HttpHelper.SendGet("https://bing.ioliu.cn/");
extractImages(result, html);
}
catch
{ }
return result;
} static string SelectTextNode(HtmlDocument htmlDocument,string xpath)
{
var node = htmlDocument.DocumentNode.SelectSingleNode(xpath);
if(node !=null)
{
return node.InnerText.Trim();
}
return string.Empty;
} private static void extractImages(List<HistoryImage> result, string indexPageHtml)
{
var doc = new HtmlDocument();
doc.LoadHtml(indexPageHtml);
var items = doc.DocumentNode.SelectNodes("//div[@class='item']");
//HistoryImageProvider
items.ToList().ForEach(node =>
{
var date = node.SelectSingleNode(".//em[1]").InnerText;
if (!HistoryImageProvider.IsExist(date))
{
try
{
var url = "https://bing.ioliu.cn" + node.SelectSingleNode(".//a[@class='mark']").Attributes["href"].Value;
result.Add(fetchSpecDayWallpaper(date, url));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
});
} private static HistoryImage fetchSpecDayWallpaper(string date, string url)
{
var detailHtml = HttpHelper.SendGet(url);
var detailDoc = new HtmlDocument();
detailDoc.LoadHtml(detailHtml);
var result = new HistoryImage
{
Id = Guid.NewGuid().ToString(),
ImageUrl = detailDoc.DocumentNode.SelectSingleNode("//a[@class='ctrl download']").Attributes["href"].Value,
Title = SelectTextNode(detailDoc, "//p[@class='title']"),
Description = SelectTextNode(detailDoc, "//p[@class='sub']"),
Date = date,
AddDateTime = DateTime.Now.ToLongDateString(),
updateTime = DateTime.Now.ToLongDateString(),
Url = url,
Locate = SelectTextNode(detailDoc, "//p[@class='location']")
}; if(result.Locate.Length == 0)
{
result.Locate = result.Title.GetBetween(",", "(");
} return result;
}

桌面widget

创建一个窗体,设置透明色

之前显示的白色文字存在毛边,可以如下方式解决, 将背景颜色和TransparencyKey 设为和文字颜色不一样即可。

 // 灰色背景,解决白色背景字体毛边问题
this.TransparencyKey = Color.Gray;
this.BackColor = Color.Gray;

主form启动时,显示widget:



            if (_settings.ShowWidget)
{
// open Desk Widget
ShowDeskWidget();
} private void ShowDeskWidget()
{
if (deskWidget == null)
{
deskWidget = new DeskWidget(this);
} deskWidget.Show();
}

下载地址

https://github.com/jadepeng/bing-wallpaper

备注

该项目fork自kompiuter/bing-wallpaper,增加了定时切换、获取历史壁纸等功能。

相关推荐

使用IDEA的同学,这里有彩虹屁插件,写代码时可以疯狂夸你 https://github.com/jadepeng/idea-rainbow-fart

上班从换一张桌面壁纸开始——开源小工具Bing每日壁纸的更多相关文章

  1. 【开源小软件 】Bing每日壁纸 让桌面壁纸保持更新

    发布一个开源小软件,Bing每日壁纸. 该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事. 欢迎大家下载使用,点star!有问题请留言或者提issue. 开源地 ...

  2. DzzOffice添加动态壁纸例子-Bing每日壁纸

    Bing每日壁纸介绍:bing网站每天会更新一张不同的精选图片. 此压缩包内的程序,可以自动同步更新cn.bing.com网站每天更新的图片,作为dzzoffice的壁纸使用.实现自动每天更换不同的云 ...

  3. 【开源小软件 】Bing每日壁纸 V1.2.1

    Bing每日壁纸发布V1.2版本,下载地址Release V1.2.1 该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事. 本次新增国际化支持,以及桌面widg ...

  4. 获取Bing每日壁纸用作首屏大图

    获取Bing每日壁纸用作首屏大图 Bing 搜索每天都会更换一张精美的图片作为壁纸,除了特殊时候不太好看外(比如春节那几天),没多大问题.移动端还有上每日故事,与图片现配.现在我的博客首屏图片就是Bi ...

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

    目录 需求描述 实现方式 简单粗暴 如何下载 如何更高清 排坑指南 初级 优点 给有好奇心的孩子 进阶 接口 自动保存 网站集成 爬虫 需求描述 必应作为一个在壁纸圈做搜索引擎最优秀的站点,其每日壁纸 ...

  6. 一个爬取Bing每日壁纸的python脚本

    1. 背景 Bing搜索每天的背景图片有些比较适合做桌面,但是有的提供下载有的不提供下载.每天去点击下载又不太方便,所以第一次学习了一下python爬虫怎么写,写的很简单. 2. 相关技术 2.1 P ...

  7. Bing每日壁纸API

    懒人直接出图 https://www.shadow-forum.com/api/bing/bing.php API API地址: https://bing.biturl.top 调用方式: HTTP ...

  8. [深入浅出Windows 10]应用实战:Bing在线壁纸

    本章介绍一个使用Bing搜索引擎背景图接口实现的一个应用——Bing在线壁纸,讲解如何使用网络的接口来实现一个壁纸下载,壁纸列表展示和网络请求封装的内容.通过该例子我们可以学习到如何使用网络编程的知识 ...

  9. Bing Test -必应每日壁纸自动换

    今天向大家推荐一个桌面美化类的工具,没错就是自动更换壁纸,而且是精美的必应每日壁纸哦!绿色小巧,开机自启动,设置后每日自动更新你的桌面~ 软件名称:Bing Test 链接: http://pan.b ...

  10. JavaWeb网上图书商城完整项目--26.注册页面之验证码换一张实现

    我们现在要实现点击换一张的时候实现验证码的修改 我们首先在html添加函数点击事件: <%@ page language="java" contentType="t ...

随机推荐

  1. 【spoj8222】Substrings

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  2. [IOS] Storyboard全解析-第一部分

    (Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果,我贴上本教程所完成的Storyboard的截图: 现在,你就可以清楚的看到这 ...

  3. Vim Vundle 插件管理器

    /********************************************************************** * Vim Vundle 插件管理器 * 说明: * 话 ...

  4. 再起航,我的学习笔记之JavaScript设计模式22(访问者模式)

    访问者模式 概念介绍 访问者模式(Visitor): 针对于对象结构中的元素,定义在不改变该对象的前提下访问结构中元素的新方法 解决低版本IE兼容性 我们来看下面这段代码,这段代码,我们封装了一个绑定 ...

  5. ZOJ2105 终于找到错误

    ZOJ2105:点击打开链接 错误代码 #include<stdio.h> #include<stdlib.h> int q[110]; int main() { int a, ...

  6. python抽象篇:面向对象

    1.面向对象概述 面向过程编程:根据操作数据的函数或语句块来设计程序的. 函数式编程:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象编程:数据和功能结合起来,用称为对象的东西包 ...

  7. dedecms织梦判断当前页面是首页、栏目页还是文章页

    根据全局变量$GLOBALS['_sys_globals']['curfile']的值来判断. 首页parview:列表页listview:文章页archives 应用示例: {dede:php}if ...

  8. 2016年年终CSDN博客总结

    2015年12月1日,结束了4个月的尚观嵌入式培训生涯,经过了几轮重重面试,最终来到了伟易达集团.经过了长达3个月的试用期,正式成为了伟易达集团的助理工程师. 回顾一年来的学习,工作,生活.各种酸甜苦 ...

  9. QT windeployqt

    qt发布release版本时需要打包一些dll,需要哪些呢?请看截图: 在qt的安装包下找到这些文件,放在release文件夹下即可,当然有些时候也会需要一些其他的,比如含有串口的程序还需要加入Qt5 ...

  10. JavaEE之JDBC编程[详解]

    1.数据库简介 数据库(DB,Data Base ) 数据库管理系统(DBMS,Data Base Management System) 关系型数据库(RDB) 关系型数据库管理系统(RDBMS) S ...