All information is stored in "API files"1. They can be obtained by sending a GET request to the following URL:
https://bing.npanuhin.me/{country}/{language}.json
The following countries and languages are currently available:
United States | Canada (English) | Italy | Spain | France | Germany |
---|---|---|---|---|---|
US/en
|
CA/en
|
IT/it
|
ES/es
|
FR/fr
|
DE/de
|
United Kingdom | Canada (French) | India | China | Japan | Brazil |
GB/en
|
CA/fr
|
IN/en
|
CN/zh
|
JP/ja
|
BR/pt
|
Rest of The World: ROW/en
|
One API file consists of an array of image data2:
[
// Types and descriptions:
{
"title": "Title" | null,
"caption": "Caption" | null,
"subtitle": "Subtitle" | null,
"copyright": "Copyright" | null,
"description": "Description" | null,
"date": "Date in %Y-%m-%d format with leading zeros",
"bing_url": "Bing URL" | null,
"url": "Storage URL: https://bing.npanuhin.me/{country}/{language}/{date}.jpg"
},
// Example:
{
"title": "Example title",
"caption": "Example caption",
"subtitle": "Example subtitle",
"copyright": "npanuhin/Bing Wallpaper Archive ©",
"description": "Example description\nThat can span multiple lines",
"date": "2009-06-03",
"bing_url": null,
"url": "https://bing.npanuhin.me/US/en/2024-01-16.jpg"
}
]
-
Images are sorted by
date
in ascending order (oldest first, newest last) -
The
bing_url
field contains the original image URL from Bing (Microsoft) servers. Unfortunately, it is not possible to retrieve images from more than a couple of years ago from these URLs (they all point to the same dummy image)
Note
API files tend to be quite large (a couple of MB)
Tip
If you only need images, you can skip loading the API files altogether! Simply make a request to the storage URL using the format specified above (if 404 is returned, then sadly we don't have this image).
If you still need image titles, descriptions, etc., but want to save bandwidth, you can get API files for specific years:
https://bing.npanuhin.me/{country}/{language}.{year}.json
For example: US/en.2021
or ROW/en.2024
These files are minified and typically have a size of 100-500 KB. If 404 is returned, then we don't have any images for that year
Important
Feel free to use the API files and images, but please avoid sending frequent requests (for images this would incur additional costs for me).
If you need to make frequent requests to the API files, I recommend downloading and caching them locally (they are updated only once a day). The same applies to the images (although this will be quite difficult to implement).
Your understanding and cooperation are greatly appreciated 🙂
After two years, I decided to rewrite the entire project and to fix numerous issues, including storage capacity and metadata.
Stages (roughly in order of importance):
- Proper everyday image retrieval from three sources
- Uploading images to external storage (chose
Google Cloud StorageCloudflare R2 for now) - Removing metadata nonsense — images should be preserved in their original form
- Upload all images to storage
- Replace spaces by
\t
in API to reduce space - Fix metadata for all images (currently done: ?/?)
- Finally remove all images from this repo and reduce the size of repo (+ number of commits in repo)
- Remove the
path
key - Generate API only for website and not store it in Git repo (+ minified)
- Write a comprehensive README
- Enable other countries
- Rewrite website
- Website: hold current image when hovering over title
- Website: Maybe show the latest image as the first one + preload it sooner than JS script would do it
- Website: fade-in not just body but all elements
-
Add protection for GCloud (because 5s per image ~= 500'000 images per month if somebody decides to leave the page open for so long xd)Switched to Cloudflare R2 - Deal with integrity errors (see TODO below)
- Update (and upload to storage) videos, if needed
- Find a way to retrieve videos from Bing (identify that today's image is a video, etc.)
- Missing images (!) (
src/check_status.py
shows 4 images) UPD: probably those are videos, need to check - Add more images from 2009
- Videos update
- Multiple months are missing one image on the last day
- Month
2016-02
has two duplicate images and is missing one image
All images are property of their respective owners (Microsoft, Getty Images, etc.), see the copyright
field for more details.
Microsoft's official statement regarding wallpaper downloads is: "Use of this image is restricted to wallpaper only."
Footnotes
-
These files are not a typical API, but they are used to retrieve all valuable information. In some sense they are the Interface of my Application (though not really a Programming Interface) ↩
-
Although the
title
field is optional, de facto every image has a proper title, and this also applies to new images ↩