Doing exactly what it says on the tin
I’ve been playing Hunt: Showdown with friends recently. With these kids of things I like to stream and record the footage of us playing so that others can share our enjoyment — highs and lows! — and so we can watch them back later.
The videos are compiled in a playlist on YouTube, in the order recorded. The tools that I’ve written to help automate the process of getting the videos from a file on a hard drive to a proper YouTube video include numbering.
I realised that I had missed out three videos, which would throw off the numbering. The easy options would be to:
- add them to the end of the playlist; downside: the video number wouldn’t reflect the order and progression
- insert them in the right place manually; downside: it would take a long time to manually renumber subsequent videos (about ~60)
- write a script to do this for me
Guess which one I picked?
Interacting with YouTube programmatically comes in two min forms: APIs or a wrapper like shoogle. The latter is what I am familiar with, and has the benefit o’ being a braw Scottish word to boot!
The list of video files I’ve uploaded is in json format, which makes interaction a cinch. The list is loaded, anything not a Hunt: Showdown video is skipped*, a regex matches the video number, if it’s over a number (59) in this case the number in the title is increased by 4 (I also had a duplicate number in the list!).
This title is then set using shoogle
. The API has certain things it expects, so I had to ‘update’ both the title and the categoryId
, though the latter remained the same. You also have to tell the API which part
s you are updating, which in this case is the snippet
.
As an example, the json passed to shoogle
might look like:
{ "body": {
"id": <ID>,
"snippet": {
"title": "Golden Battle (Hunt: Showdown #103)",
"categoryId": "20"
},
},
"part": "snippet"
}
From here it’s a simple matter to invoke shoogle
(I use subprocess
) to update the video title on YouTube.
The one caveat I would mention is that you only get 10 000 API credits per day by default. Updating the video costs 50 units per update, plus the cost of the resource (for snippet
this is 2), which works out to 192 videos per day, max.
Once the list has been updated, I dump out the new list.
Much quicker than doing it manually, and the videos all have the right number!
Pingback: Rescheduling YouTube Videos using Python – Bertie Baggio's Wonderland