This was a quick demo built to show how we could mix videos hosted on YouTube with viewer choices at the end of those videos that cause other videos to load. There’s a bit of work around what the visuals would be like for a user but nothing aggressive.1 If you play the first video (around 5 seconds),2 you’ll get a prompt that partially obscures the video and then loads a new video based on the button you click. The people ended up going with Story Line or something like that but I liked this enough to write this post and figure it’ll come up again some day. With interest from someone, it’d be something that could be pretty easily built into WordPress as a plugin. See the Pen youtube end event by Tom (@twwoodward) on CodePen. 1 That means it’s ugly but I don’t want you to judge me. 2 Which is pretty short but I still fast forward it.
I made a little shortcode plugin for making it fairly easy to embed YouTube video snippets. The plugin supports both a start and end time or either a start or end time. It also now allows you to embed multiple videos on a single page. The plugin works like below. Times are in seconds. [yt_video id=”xxxxxxxxx” start=”101″ end=”117″] It’s a slight evolution of the code I found at Amit’s site after a quick Google search. This version obviously ties into WordPress but it also supports multiple videos and stops the video from displaying related videos. The uses for this are pretty wide open. Seems like film studies would have lots of reason to chop up scenes and display them with additional written context.1 Lots of classes would have reasons to chop up YouTube videos to show exactly what they want. Minor Figuring Out of Stuff The only real thing to figure out was how to deal with multiple videos on one page. The original code looked for a single ID on the page. I needed to both generate and find as many unique ideas as people might need. A bit of Google and I found a Stackoverflow bit to create a random string. Then the ID of each div created by the shortcode becomes id=”youtube-player-‘.randId().’ with randId being a 20 […]
I remain kind of amazed with how many little tricks can be done with Google Sheets. After seeing Alan’s post today, I wonder how much of the data I could pull (assuming we had the right user names and knew the services . . . really the harder part) just using Google Sheets. Turns out we could get a pretty good amount. The following is a mix of XPath, regex, and APIs. I started with as little real programming as possible and gradually increased sophistication. The following are just meant to get a rough idea of how much stuff you’ve got in the various spaces. Flickr The URL: http://flickr.com/photos/bionicteaching The function: =IMPORTXML(C2,”//*[@class=’photo-count’]”) This uses a basic Google Sheets function to grab the photo-count content. The function is grabbing the div class with the title photo-count. Vimeo The URL: http://vimeo.com/twwoodward The function: =INDEX(IMPORTXML(C3,”//*[@class=’stat_list_count’]”),1) Pretty similar to the example above but with the addition of INDEX. That solves the problem that there are multiple items that are all in the stat_list_count class and we only want the first matching item. Sound Cloud The URL: http://soundcloud.com/cogdog The function: =REGEXEXTRACT(IMPORTXML(C4,”//*[@name=’description’]/@content”),”([0-9]+) Tracks”) This gets a bit fancier. IMPORTXML brings in a large chunk of content from the page but it wasn’t structured in a way that I could get the exact information I wanted. REGEX […]
Because I love Alan. Here’s the API version in Google Script to grab YouTube stats. It does a bit more than the previous XPath version and you can set it to be triggered repeatedly. I’m going to add a loop to add multiple videos etc. in the near future but it’s a good start for anyone who’s doing research on stuff like this. It is funny what you might notice when you can see the data like this. I triggered it manually twice just to get a few lines in there. Notice that between the first two entries there are no additional views but a chunk more likes/dislikes. Makes me wonder if people are just weighing in without watching or if the data are collected differently resulting in some delay. Here’s the script1 and it’s pretty well commented up. You’ll need an API key. 🙂 You do see some weird stuff in the raw JSON. Like there’s a Favorites field. Does that exist in YouTube? I didn’t really think about it until it came up 0 for every video . . . even Gangnam Style. Here’s the result running every hour on a video that I’m hoping changes a bit. I got it off the trending page so it has to be cool right? 1 It took me a good […]
APIs can give you much more power but they are often overkill for what people are trying to around here- lightweight social media Here’s a lightweight example of how you can use Google Sheets and the IMPORTXML function to grab quite a bit of data from various video pages with no API or technical skills. Straight off, we’re going to want the URL of the video. We’ll put that in column A and we’ll use it as a variable in all our other formulas. Getting the Paths to the Data =IMPORTXML(A2,”(//*[contains(@class, ‘watch-title’)])”) So how’d that come to be? A2 is just asking what URL we want to go to. The XPATH stuff gets a little more interesting. It’s going to look for any class that is named watch-title. I found out the title was in that div by right clicking on the title and choosing inspect in Chrome. The appended  will only give us the first item that meets those qualifications. Otherwise the title shows up twice. The rest of the formulas are pretty much variations on that theme. =IMPORTXML(A2,”//*[contains(@class, ‘watch-view-count’)]”) – View count =IMPORTXML(A2,”(//*[contains(@class, ‘like-button-renderer-like-button’)])”) – Likes count =IMPORTXML(A2,”(//*[contains(@class, ‘like-button-renderer-dislike-button’)])”) – Dislikes count =IMPORTXML(A2,”(//*[contains(@class, ‘yt-user-info’)])”) – User name Throw in a video of your own if you’d like.