Save the Planet
For the past couple of months, I have been rebuilding an internal tool we use at SEP called Planet.
This tool aggregates blog posts from many sources, including our official SEP blog, personal blogs, and internal SharePoint blogs. After a recent upgrade to our SharePoint instance, Planet was in trouble! The SharePoint blogs were no longer able to be fetched, and that’s when I decided it was time for a re-write.
I built out most of the functionality during my evenings, only leaving the hardest part for this summer’s SEP: Makes hackathon, integrating with SharePoint!
Now follow me on a guided tour of my fantastically ridiculous solution. ????
Accessing SharePoint
Having spent a few hours failing to authenticate with SharePoint via its NTLM authentication scheme, I figured that since Google Chrome already knows how to do that handshake, why should I learn?
After spinning up a headless browser, it wasn’t difficult to get logged into SharePoint. Chrome makes it easy to accomplish this kind of authentication by allowing you to format the URL with the login credentials included, like so https://username:[email protected]
.
Chrome will extract the credentials from this URL and then perform the authentication handshake for you, allowing you to log in without having to fill in any prompts!
Downloading the feed
Now having easy access to SharePoint, let’s download the page! Sounds easy enough, right? Well, SharePoint loves to make our lives difficult and it hasn’t failed to disappoint.
It turns out that SharePoint RSS feeds come with an Extensible Stylesheet Language Transformation(XSLT), which will actually manipulate the DOM, as opposed to CSS, which is purely presentational.
Luckily, I realized that Chrome had stored this web request in its disk cache, allowing me to fetch the page again with JavaScript. Since this second request doesn’t get rendered by a web browser, we actually get the content that we want!
But. There’s always a but.
Due to a limitation with the headless Chrome library I was using, I wasn’t able to return the asynchronous response to my application code.
As a workaround, I discovered I could replace the contents of the DOM with the response, essentially accomplishing what I wanted in the first place!
With the DOM now in the desired format, I simply downloaded the page source and voila! I had (mostly) what I wanted.
Source Code
In the end, this is the function that got the job done.
Wrapping Up
These 32 lines took me about 15 hours to write, but in the end I was able to accomplish my goal: retrieving RSS feeds from SharePoint.
Experiences like this remind me that no matter how hopeless a situation feels, with enough creative thinking and perseverance, you can solve any problem that you put your mind to!
Feel free to browse the source code to see the entire application!
Build awesome things for fun.
Check out our current openings for your chance to make awesome things with creative, curious people.
You Might Also Like