Ignite 2015 – Download Specific Videos and Slides…

I was unable to attend the Microsoft Ignite event this year, but I wanted to try and get all the value out of the conference that I could from afar.  I knew I needed to get the session videos and slides, similar to the scripted process that I did for TechEd last year

And while I’ve seen a few download scripts out there, I specifically want just my favorite slides and videos, not a whole category.  Plus, I want the lower-quality MP4s so that the download consumes less space.  And since I’m downloading them while they still post them (the week of the event), I need to permit that they may not yet be available, and that I may re-run it until I get everything I want.

And so here it is, for all my Ignite/TechEd peeps…  It’s a “how-to” to help you grab the content you want, and *only* what you want…

Step 1

First, go to the Ignite 2015 Session catalog at Channel 9 and figure out which session Videos and PowerPoints you want.  Look for the little code by each session, for example FND1451, BRK3505 or BRK2306, etc.

Step 2

Next, create a folder.  I created C:TempGetVideos   …Yes, original, I know. 

Step 3

In that folder you created, make a text file called “MySessionIdList.txt”, and paste in a list of the session IDs, one-per-line, like this:

FND1451
BRK3505
BRK2306

…and so on. 

Step 4

Again, in that same folder, create a text file called something like I did, “GetSessionVideos.ps1”, and paste in the following code:

Import-module bitstransfer
$inputFile = "mySessionIdList.txt"
$mySessionList = Get-Content $inputFile
$myUrlPathParent = "http://video.ch9.ms/sessions/ignite/2015"
$myRestPath = "http://s.ch9.ms/Events/Ignite/2015/RSS/slides"
$myRestComparison = "http://channel9.msdn.com/Events/Ignite/2015"
# For pete's sake, do NOT show this to Don Jones! I can't take that level of criticism! ;)
foreach ( $sessionId in $mySessionList )
{
# Check to see if the file is present before attempting to download
if (!(Test-Path "$sessionId.pptx"))
{
# Yep, the dreaded Write-Host, because I actually want to watch the script run...
# I'm crazy like that...
Write-Host -ForegroundColor GREEN "Getting $sessionId.pptx..."
# Get the PPTX
$MyThing = Invoke-RestMethod $myRestPath | Where-Object link -Contains "$myRestComparison/$sessionId"
if ($MyThing -ne $NULL)
{
$MyPptxUrl = $MyThing.getelementsbytagname('enclosure').url
start-bitstransfer -source "$MyPptxUrl" -destination "$sessionId.pptx"
}
else
{
Write-Host -ForegroundColor CYAN "Sorry, the PPTX for $sessionId is not yet available..."
}
}
else
{
write-host "Already have $sessionId.pptx, skipping..."
}
# Check to see if the file is present before attempting to download
if (!(Test-Path "$sessionId-mobile.mp4"))
{
# Go ahead and revoke my MVP, Don...
Write-Host -ForegroundColor GREEN "Getting $sessionId-mobile.mp4..."
# Get the MP4
start-bitstransfer -source "$myUrlPathParent/$sessionId-mobile.mp4" -destination "$sessionId-mobile.mp4"
}
else
{
write-host "Already have $sessionId-mobile.mp4, skipping..."
}
}

…And run that script in a Powershell session to get your videos! It might look something like this, using my examples above (note that some files were downloaded, some skipped, and some not yet available):

Of course,you can modify the code to suit your tastes, but this simple set of instructions should get you going.

Have fun viewing and learning!

Note: This is an update from my TechEd 2014 download script posted here.  And thanks to THIS POST for the clue on the Rest API call, due to the *horrible* naming convention for the slides this year. 

 

2017-07-27T00:01:00+00:00 May 7th, 2015|Uncategorized|

About the Author:

Jeremy is just a regular guy that likes to occasionally tell the world about stuff.

Fatal error: Uncaught exception 'GuzzleHttp\Exception\ClientException' with message 'Client error: `POST https://dc.services.visualstudio.com/v2/track` resulted in a `400 Invalid instrumentation key` response: {"itemsReceived":1,"itemsAccepted":0,"errors":[{"index":0,"statusCode":400,"message":"Invalid instrumentation key"}]} ' in /home/coretek/public_html/wp-content/plugins/application-insights/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113 Stack trace: #0 /home/coretek/public_html/wp-content/plugins/application-insights/vendor/guzzlehttp/guzzle/src/Middleware.php(66): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response)) #1 /home/coretek/public_html/wp-content/plugins/application-insights/vendor/guzzlehttp/promises/src/Promise.php(203): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response)) #2 /home/coretek/public_html/wp-content/plugins/application-insights/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\Promi in /home/coretek/public_html/wp-content/plugins/application-insights/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on line 113