Youtube Data API seems to allow you to get the embeddable status of the video: https://developers.google.com/resources/api-libraries/documentation/youtube/v3/java/latest/com/google/api/services/youtube/model/VideoStatus.html#getEmbeddable()
But there is also a feature in youtube where the content owners can set the video to be embeddable (or not embeddable) on certain domains: https://support.google.com/youtube/answer/6301625
In this case, the embeddable status returned by the YouTube API is insufficient and can be misleading. For a video id (example: TZ82ZR70vcc) which seems to have domain based embeddable settings, the embeddable status returns true, however, it not true for all domain.
Is there a way to retrieve the embed domain settings? Or to check if the video is embeddable on a given domain or not?
The Youtube blog on Understanding Playback Restrictions states that
if you’d like to only search for videos that are embeddable, add
format=5 to your query.
So add a &format=5 to your Youtube Data URL.
You may also read this SO thread for additional insight.
Related
I'm using youtube v3 API to publish videos on my channel. I want to moderate all comments made on my videos so I've selected the following in my channel setting. Note that I've chosen for all comments to be held for review by default.
Now I proceed to publish a video via API. But, it was observed that my video settings were set to Allow all comments instead of Hold all comments for review as is evident from the below image.
I've gone through the video insert API and did not find any parameter that would configure comment settings for each video. I'm failing to understand why the channel default setting is not selected for videos published via API. Is there any way through which I can change the video comment setting via API?
There is no way to specify comment options via the Data v3 API. This has been a long standing feature request. See the IssueTracker thread.
Using the YouTube Data API v3, is it actually able to return to me the URL for a video (by ID) of all the available video and audio streams? I have the YouTube video ID. I want to choose a video stream to play in a client app. I've read all the YouTube Data API documentation on this site:
https://developers.google.com/youtube/v3
And this question is not answered; in fact it seems to intentionally avoid this whole topic.
Sorry for having to give you a negative response:
As far as I know, the answer to your question is no, there's no such API (and API endpoint for that matter) that will provide the URLs of the streams that YouTube does yield to its video players (embedded or not).
Of course, one may scrape this kind of info out of the YouTube's Web UI (like many tools available on the Internet do), but, if one does observe the DTOS specifications, will eventually come across the paragraph E.6 of section III. General Developer Policies, that explicitly forbids this activity.
An argument against the existence of such a API can also be derived from the DTOS document, same section III. General Developer Policies, but, in this case, from paragraph E.1:
E. Handling YouTube Data and Content
Aside from the permissions and rights granted in this section, you and your API Clients have no further permissions or rights to API Data, including to temporarily stored API Data.
Audiovisual Content
You and your API Clients must not, and must not encourage, enable, or require others to:
a. download, import, backup, cache, or store copies of YouTube audiovisual content without YouTube's prior written approval,
b. make content available for offline playback
c. [...]
Since is illegal to download video content from YouTube, it follows by simple formal logic, that it cannot exist an API that would provide URLs to the video content itself (under the assumption that the official APIs are formally consistent with the DTOS specifications).
No the YouTube API doesn't give you the video url, otherwise it would be too easy to copy the file.
Also, YouTube videos can only be played inside the YouTube iFrame player and you can't have access to the HTML5 video object (to retrieve the video url) because of cross-domain policy.
Every time a user starts a live stream on YouTube, a new ID is generated for the stream, along with the corresponding video and URL. Currently, if I want to embed a live stream, I can use YouTube's sharing functions to add the video to my page in an iFrame.
When the user stops streaming, embeds of the live stream automatically switch to showing a recording of that stream. However, if the user starts broadcasting again later on, the embed will continue to show the old recording instead of switching to the new stream. This is because the video ID in the embed is hard-coded and each stream generates a new video ID.
My goal is to create an embed that will automatically display a user's live stream whenever they are streaming, and show an indication of whether they're online or offline. Is there an embed URL that would allow me to do this, or is there something in the API that might help?
I want to embed other streams that aren't just my own, so I need to do this in a way that doesn't require the streamer to log in or authenticate on my site.
If you know the ID of a YouTube channel, and if that channel streams a livestream set to Public, an iframe with this URL will show it:
https://www.youtube.com/embed/live_stream?channel=YOUR_CHANNEL_ID_HERE
See https://stackoverflow.com/a/39582176/470749
Unfortunately I haven't found a similarly simple way to permanently embed the YouTube chat for that livestream.
As far as I can tell, there's nothing built into the YouTube API that would allow you to embed a channel's current live stream automatically without knowing its ID. That said, it's possible to implement this yourself by writing a custom API and hosting it on your own server.
I recognize that this can look like a daunting task, so I've laid out some rough steps below to get you started.
Set up an endpoint on your own server. You could accept a
channelId argument or hard-code one, depending on how extensible
you want this to be.
Query YouTube's search endpoint1 for the specified channelId and eventType=live. An HTTPS request for this will look something like this:https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=[CHANNEL_ID]&eventType=live&maxResults=1&order=date&type=video&key=[YOUR_API_KEY]
Check the search JSON response. If it returns any results (data.pageInfo.totalResults > 0), you know that the channel is live.
If the channel is live, redirect the request to your server directly to the live video's embed URL based on the video's ID in the query response (data.items[0].id.videoId).
If the channel isn't live, create a placeholder as you see fit, or make a second request to search for eventType=completed for past broadcasts, eventType=upcoming for scheduled broadcasts, or remove the eventType parameter to get the most recent video.
Once you have a server that can respond and redirect requests, you can embed an iFrame in your page that points directly to your API URL. Your server will handle the logic and, using the redirect, change the iFrame to a YouTube video player automatically, without requiring you to perform client-side logic or expose your API key2.
1 As with all YouTube API requests, search#list queries will count towards your daily quota. If you intend for this to be a high-traffic endpoint, you could either request an increased quota from YouTube, or implement a caching solution on your end to cut down on the number of requests you make.
2 GCP (Google Cloud Platform), which you'll use to manage your access the YouTube Data API, has pretty good protections against API key theft for times when you do have to expose it on the client side. That being said, best practice is to keep your key secret by storing it only on the server whenever possible.
Is there an API for the Google Play online video playback of content? Would the YouTube API work?
I am wanting to embed Google Play content into a website I am building.
Thank you,
Joseph Irvine
Google Play movie purchases and rentals do also show up as YouTube videos (with a unique YouTube video ID), and so it is possible; obviously, you'd need to use oAuth2 authentication so when a user logs in, YouTube can verify that the user has the permission to see that film/TV show.
The real trick, however, is getting the right YouTube ID. They show up through search results via the search endpoint (so, for example, https://www.googleapis.com/youtube/v3/search?part=snippet&q=Monsters+University&key={YOUR_API_KEY} would be such a search), but that endpoint only gives you access to the "snippet" content type, which doesn't include the parameter "licensedContent" to let you know if it's a for-pay video (that parameter is found in the "contentDetails" type, which is only available from a video list call).
Is there any way to detect if a video was removed or unavailable?
We need to have ability to remove it from the video listing if it has been removed from youtube server.
Hung BUI if you are using youtube API there is a way to filter the video which has been removed or not availble in your locality.
Kindly watch this video and seek it to 2m:03s, The tutor will say how to filter the unavailable and restricted video,..
Youtube Video on YOUTUBE search API
Use a parameter format and restriction along with the youtube api endpoint
https://gdata.youtube.com/feeds/api/videos?q=GoogleDevelopers&max-results=1&v=2.1&alt=jsonc&format=5&restriction=DE
If you hit this endpoint of youtube you can get a set of youtube videos which can be embedded as well as we can check whether the video is restricted in our locality.