[ Vildravn's Logbook ]
~/Posts/Finding "hidden" Blizzard news feeds
Table of Contents

I wanted to have a news feed of just World of Warcraft: Forever news in my Discord server. Turns out, Blizzard makes it more difficult than it ought to be so I had to use Wireshark.

A short rant about RSS

Of course, the first thing I tried was looking for an RSS feed. Unfortunately, fewer and fewer websites are using RSS nowadays, and Blizzard’s games are no exception. I wasn’t able to track down any RSS feed on any page that provides news from Blizzard. I don’t really understand why are websites abandoning RSS feeds, maybe to funnel us all into social media… I miss RSS.

On WoW Fansites

There are fansites that have RSS feeds, even fancy Discord webhooks to make sure you’re always up to date. That’s all very nice, if the fansites weren’t total garbage filled with clickbait, LLM written articles, and over-analyzing and datamining every patch. I want to know what’s going on with Forever, but I don’t want all secrets to be spoiled the minute they land in a public build so fansites are pretty much a no-go.

Digging through the APIs

With an RSS feed out of the question, maybe Blizzard has an API. After-all, they also display the news in their Battle.Net app, both on mobile and desktop. Poking around their websites in Firefox DevTools, I could find requests to an API that contains the articles, success! …but not so fast, says Blizzard. Both endpoints I found return news for all the versions of WoW, but I am not at all interested in hearing about the latest overpriced mount or armor set from Retail.

One of the endpoints is at https://news.blizzard.com/en-us/api/news/world-of-warcraft but no matter what, I could not massage the link into just giving me WoW Forever news, and the entries served by the API are not differentiated by the version of the game either except in the title, but that would be unreliable.

The second endpoint is much more interesting. Much like the first one, it also returns the news for all versions of the game, also with no way to tell them apart easily. However, it contains a parameter https://news.blizzard.com/en-us/api/news/blizzard?feedCxpProductIds[]=blt2caca37e42f19839

Is there a ProductID for WoW: Forever? Unfortunately, the API itself didn’t seem to provide any clues and maybe I was doing something wrong but I couldn’t get anything reasonable out of the WoW Forever page even though it does have a Latest Updates section that seems to filter out the news posts. Maybe it’s some serverside rendering shenanigans, I don’t know :)

Wireshark to the rescue

I was so close, and yet so far and quite stumped. I looked back the Battle.Net app and noticed that actually, the app CAN filter the news just for Forever. How is it doing that? Is it something clientside? All IDs and names in the API are identical and point just to WoW so it must be a different endpoint, right?

After quickly figuring out how to dissect TLS packets in Wireshark, I set the SSLKEYLOGFILE env var, launched Steam and through Steam launched Battle.Net (#justlinuxgamingthings) and got to sniffing packets. It didn’t take very long for me to get exactly what I wanted. An API call to pull the news: https://api.blizzard.com/content-api/v4/feed?offset=0&feedCxpProductIds%5B%5D=world-of-warcraft-forever&feedProductScope=REQUEST_FEED&feedLimit=12

It’s so simple. There is a ProductId for WoW Forever and it’s just… world-of-warcraft-forever. I didn’t even think of trying that! I decided to try that ProductId in the previous endpoint just to have a more “stable” and less internal url, and it works! The following endpoint gives me a list of all the WoW Forever news starting with the most recent one: https://news.blizzard.com/en-us/api/news/blizzard?feedCxpProductIds[]=world-of-warcraft-forever

They must be tagging the posts in some way, they’re just not exposing that tag externally, the bastards. Now I can use this endpoint in my Discord bot to post just the relevant articles without any noise.

Thanks

I want to thank webfussel for reminding me Wireshark is even a thing. It’s been ages since I’ve last used it, and it’s not a regular part of my toolkit. It was immensely helpful for this ultimately quite silly task and I learned some new things!

Post Info

Posted:

Reading Time: 4 min

Tags: