https://github.com/npanuhin/bing-wallpaper-archive
Most comprehensive and easy-to-use collection of stunning Bing daily wallpapers 🖼️
https://github.com/npanuhin/bing-wallpaper-archive
archive bing bing-wallpaper wallpapers
Last synced: about 2 months ago
JSON representation
Most comprehensive and easy-to-use collection of stunning Bing daily wallpapers 🖼️
- Host: GitHub
- URL: https://github.com/npanuhin/bing-wallpaper-archive
- Owner: npanuhin
- License: mit
- Created: 2021-12-27T21:46:13.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-10-29T08:23:07.000Z (7 months ago)
- Last Synced: 2024-10-29T09:43:22.502Z (7 months ago)
- Topics: archive, bing, bing-wallpaper, wallpapers
- Language: Python
- Homepage: https://bing.npanuhin.me
- Size: 2.44 MB
- Stars: 11
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Bing Wallpaper Archive
### Usage
All information is stored in "API files"[^1]. They can be obtained by sending a GET request to the following URL:
```haskell
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 data[^2]:
```jsonc
[
// 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:
> ```haskell
> https://bing.npanuhin.me/{country}/{language}.{year}.json
> ```
> For example:US/en.2021
orROW/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 🙂### Version 2 roadmap
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):
- [x] Proper everyday image retrieval from three sources
- [x] Uploading images to external storage (chose ~~Google Cloud Storage~~ Cloudflare R2 for now)
- [x] Removing metadata nonsense — images should be preserved in their original form
- [x] Upload all images to storage
- [x] Replace spaces by `\t` in API to reduce space
- [ ] Fix metadata for all images (currently done: ?/?)
- [x] Finally remove all images from this repo and reduce the size of repo (+ number of commits in repo)
- [x] Remove the `path` key
- [x] Generate API only for website and not store it in Git repo (+ minified)
- [ ] Write a comprehensive README
- [x] Enable other countries
- [x] Rewrite website
- [x] 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](#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.)### TODO
- Ability to download full acrhive from Cloudflare R2 as `.zip`
- **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### Copyright
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.**"
[^1]: These files are not a typical [API](https://en.wikipedia.org/wiki/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)
[^2]: Although the `title` field is optional, de facto every image has a proper title, and this also applies to new images