.NET Code Samples

The following code samples, which use the Google APIs Client Library for .NET , are available for the YouTube Data API . You can download these code samples from the dotnet folder of the YouTube APIs code sample repository on GitHub .

Create a playlist

The following code sample calls the API's playlists.insert method to create a private playlist owned by the channel authorizing the request.

 using 
  
 System 
 ; 
 using 
  
 System 
 . 
 IO 
 ; 
 using 
  
 System 
 . 
 Reflection 
 ; 
 using 
  
 System 
 . 
 Threading 
 ; 
 using 
  
 System 
 . 
 Threading 
 . 
 Tasks 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Auth 
 . 
 OAuth2 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Services 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Upload 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Util 
 . 
 Store 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 v3 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 v3 
 . 
 Data 
 ; 
 namespace 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 Samples 
 { 
  
 /// 
  
< summary 
>  
 /// 
  
 YouTube 
  
 Data 
  
 API 
  
 v3 
  
 sample 
 : 
  
 create 
  
 a 
  
 playlist 
 . 
  
 /// 
  
 Relies 
  
 on 
  
 the 
  
 Google 
  
 APIs 
  
 Client 
  
 Library 
  
 for 
  
 . 
 NET 
 , 
  
 v1 
 . 
 7.0 
  
 or 
  
 higher 
 . 
  
 /// 
  
 See 
  
 https 
 : 
 // 
 developers 
 . 
 google 
 . 
 com 
 / 
 api 
 - 
 client 
 - 
 library 
 / 
 dotnet 
 / 
 get_started 
  
 /// 
  
< / 
 summary 
>  
 internal 
  
 class 
  
 PlaylistUpdates 
  
 { 
  
 [ 
 STAThread 
 ] 
  
 static 
  
 void 
  
 Main 
 ( 
 string 
 [] 
  
 args 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "YouTube Data API: Playlist Updates" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 "==================================" 
 ); 
  
 try 
  
 { 
  
 new 
  
 PlaylistUpdates 
 () 
 . 
 Run 
 () 
 . 
 Wait 
 (); 
  
 } 
  
 catch 
  
 ( 
 AggregateException 
  
 ex 
 ) 
  
 { 
  
 foreach 
  
 ( 
 var 
  
 e 
  
 in 
  
 ex 
 . 
 InnerExceptions 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Error: " 
  
 + 
  
 e 
 . 
 Message 
 ); 
  
 } 
  
 } 
  
 Console 
 . 
 WriteLine 
 ( 
 "Press any key to continue..." 
 ); 
  
 Console 
 . 
 ReadKey 
 (); 
  
 } 
  
 private 
  
 async 
  
 Task 
  
 Run 
 () 
  
 { 
  
 UserCredential 
  
 credential 
 ; 
  
 using 
  
 ( 
 var 
  
 stream 
  
 = 
  
 new 
  
 FileStream 
 ( 
 "client_secrets.json" 
 , 
  
 FileMode 
 . 
 Open 
 , 
  
 FileAccess 
 . 
 Read 
 )) 
  
 { 
  
 credential 
  
 = 
  
 await 
  
 GoogleWebAuthorizationBroker 
 . 
 AuthorizeAsync 
 ( 
  
 GoogleClientSecrets 
 . 
 Load 
 ( 
 stream 
 ) 
 . 
 Secrets 
 , 
  
 // 
  
 This 
  
 OAuth 
  
 2.0 
  
 access 
  
 scope 
  
 allows 
  
 for 
  
 full 
  
 read 
 / 
 write 
  
 access 
  
 to 
  
 the 
  
 // 
  
 authenticated 
  
 user 
 's account. 
  
 new 
 [] 
  
 { 
  
 YouTubeService 
 . 
 Scope 
 . 
 Youtube 
  
 }, 
  
 "user" 
 , 
  
 CancellationToken 
 . 
 None 
 , 
  
 new 
  
 FileDataStore 
 ( 
 this 
 . 
 GetType 
 () 
 . 
 ToString 
 ()) 
  
 ); 
  
 } 
  
 var 
  
 youtubeService 
  
 = 
  
 new 
  
 YouTubeService 
 ( 
 new 
  
 BaseClientService 
 . 
 Initializer 
 () 
  
 { 
  
 HttpClientInitializer 
  
 = 
  
 credential 
 , 
  
 ApplicationName 
  
 = 
  
 this 
 . 
 GetType 
 () 
 . 
 ToString 
 () 
  
 }); 
  
 // 
  
 Create 
  
 a 
  
 new 
 , 
  
 private 
  
 playlist 
  
 in 
  
 the 
  
 authorized 
  
 user 
 's channel. 
  
 var 
  
 newPlaylist 
  
 = 
  
 new 
  
 Playlist 
 (); 
  
 newPlaylist 
 . 
 Snippet 
  
 = 
  
 new 
  
 PlaylistSnippet 
 (); 
  
 newPlaylist 
 . 
 Snippet 
 . 
 Title 
  
 = 
  
 "Test Playlist" 
 ; 
  
 newPlaylist 
 . 
 Snippet 
 . 
 Description 
  
 = 
  
 "A playlist created with the YouTube API v3" 
 ; 
  
 newPlaylist 
 . 
 Status 
  
 = 
  
 new 
  
 PlaylistStatus 
 (); 
  
 newPlaylist 
 . 
 Status 
 . 
 PrivacyStatus 
  
 = 
  
 "public" 
 ; 
  
 newPlaylist 
  
 = 
  
 await 
  
 youtubeService 
 . 
 Playlists 
 . 
 Insert 
 ( 
 newPlaylist 
 , 
  
 "snippet,status" 
 ) 
 . 
 ExecuteAsync 
 (); 
  
 // 
  
 Add 
  
 a 
  
 video 
  
 to 
  
 the 
  
 newly 
  
 created 
  
 playlist 
 . 
  
 var 
  
 newPlaylistItem 
  
 = 
  
 new 
  
 PlaylistItem 
 (); 
  
 newPlaylistItem 
 . 
 Snippet 
  
 = 
  
 new 
  
 PlaylistItemSnippet 
 (); 
  
 newPlaylistItem 
 . 
 Snippet 
 . 
 PlaylistId 
  
 = 
  
 newPlaylist 
 . 
 Id 
 ; 
  
 newPlaylistItem 
 . 
 Snippet 
 . 
 ResourceId 
  
 = 
  
 new 
  
 ResourceId 
 (); 
  
 newPlaylistItem 
 . 
 Snippet 
 . 
 ResourceId 
 . 
 Kind 
  
 = 
  
 "youtube#video" 
 ; 
  
 newPlaylistItem 
 . 
 Snippet 
 . 
 ResourceId 
 . 
 VideoId 
  
 = 
  
 "GNRMeaz6QRI" 
 ; 
  
 newPlaylistItem 
  
 = 
  
 await 
  
 youtubeService 
 . 
 PlaylistItems 
 . 
 Insert 
 ( 
 newPlaylistItem 
 , 
  
 "snippet" 
 ) 
 . 
 ExecuteAsync 
 (); 
  
 Console 
 . 
 WriteLine 
 ( 
 "Playlist item id {0} was added to playlist id {1}." 
 , 
  
 newPlaylistItem 
 . 
 Id 
 , 
  
 newPlaylist 
 . 
 Id 
 ); 
  
 } 
  
 } 
 } 
  

Retrieve my uploads

The following code sample calls the API's playlistItems.list method to retrieve a list of videos uploaded to the channel associated with the request. The code also calls the channels.list method with the mine parameter set to true to retrieve the playlist ID that identifies the channel's uploaded videos.

 using 
  
 System 
 ; 
 using 
  
 System 
 . 
 IO 
 ; 
 using 
  
 System 
 . 
 Reflection 
 ; 
 using 
  
 System 
 . 
 Threading 
 ; 
 using 
  
 System 
 . 
 Threading 
 . 
 Tasks 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Auth 
 . 
 OAuth2 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Services 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Upload 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Util 
 . 
 Store 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 v3 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 v3 
 . 
 Data 
 ; 
 namespace 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 Samples 
 { 
  
 /// 
  
< summary 
>  
 /// 
  
 YouTube 
  
 Data 
  
 API 
  
 v3 
  
 sample 
 : 
  
 retrieve 
  
 my 
  
 uploads 
 . 
  
 /// 
  
 Relies 
  
 on 
  
 the 
  
 Google 
  
 APIs 
  
 Client 
  
 Library 
  
 for 
  
 . 
 NET 
 , 
  
 v1 
 . 
 7.0 
  
 or 
  
 higher 
 . 
  
 /// 
  
 See 
  
 https 
 : 
 // 
 developers 
 . 
 google 
 . 
 com 
 / 
 api 
 - 
 client 
 - 
 library 
 / 
 dotnet 
 / 
 get_started 
  
 /// 
  
< / 
 summary 
>  
 internal 
  
 class 
  
 MyUploads 
  
 { 
  
 [ 
 STAThread 
 ] 
  
 static 
  
 void 
  
 Main 
 ( 
 string 
 [] 
  
 args 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "YouTube Data API: My Uploads" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 "============================" 
 ); 
  
 try 
  
 { 
  
 new 
  
 MyUploads 
 () 
 . 
 Run 
 () 
 . 
 Wait 
 (); 
  
 } 
  
 catch 
  
 ( 
 AggregateException 
  
 ex 
 ) 
  
 { 
  
 foreach 
  
 ( 
 var 
  
 e 
  
 in 
  
 ex 
 . 
 InnerExceptions 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Error: " 
  
 + 
  
 e 
 . 
 Message 
 ); 
  
 } 
  
 } 
  
 Console 
 . 
 WriteLine 
 ( 
 "Press any key to continue..." 
 ); 
  
 Console 
 . 
 ReadKey 
 (); 
  
 } 
  
 private 
  
 async 
  
 Task 
  
 Run 
 () 
  
 { 
  
 UserCredential 
  
 credential 
 ; 
  
 using 
  
 ( 
 var 
  
 stream 
  
 = 
  
 new 
  
 FileStream 
 ( 
 "client_secrets.json" 
 , 
  
 FileMode 
 . 
 Open 
 , 
  
 FileAccess 
 . 
 Read 
 )) 
  
 { 
  
 credential 
  
 = 
  
 await 
  
 GoogleWebAuthorizationBroker 
 . 
 AuthorizeAsync 
 ( 
  
 GoogleClientSecrets 
 . 
 Load 
 ( 
 stream 
 ) 
 . 
 Secrets 
 , 
  
 // 
  
 This 
  
 OAuth 
  
 2.0 
  
 access 
  
 scope 
  
 allows 
  
 for 
  
 read 
 - 
 only 
  
 access 
  
 to 
  
 the 
  
 authenticated 
  
  
 // 
  
 user 
 's account, but not other types of account access. 
  
 new 
 [] 
  
 { 
  
 YouTubeService 
 . 
 Scope 
 . 
 YoutubeReadonly 
  
 }, 
  
 "user" 
 , 
  
 CancellationToken 
 . 
 None 
 , 
  
 new 
  
 FileDataStore 
 ( 
 this 
 . 
 GetType 
 () 
 . 
 ToString 
 ()) 
  
 ); 
  
 } 
  
 var 
  
 youtubeService 
  
 = 
  
 new 
  
 YouTubeService 
 ( 
 new 
  
 BaseClientService 
 . 
 Initializer 
 () 
  
 { 
  
 HttpClientInitializer 
  
 = 
  
 credential 
 , 
  
 ApplicationName 
  
 = 
  
 this 
 . 
 GetType 
 () 
 . 
 ToString 
 () 
  
 }); 
  
 var 
  
 channelsListRequest 
  
 = 
  
 youtubeService 
 . 
 Channels 
 . 
 List 
 ( 
 "contentDetails" 
 ); 
  
 channelsListRequest 
 . 
 Mine 
  
 = 
  
 true 
 ; 
  
 // 
  
 Retrieve 
  
 the 
  
 contentDetails 
  
 part 
  
 of 
  
 the 
  
 channel 
  
 resource 
  
 for 
  
 the 
  
 authenticated 
  
 user 
 's channel. 
  
 var 
  
 channelsListResponse 
  
 = 
  
 await 
  
 channelsListRequest 
 . 
 ExecuteAsync 
 (); 
  
 foreach 
  
 ( 
 var 
  
 channel 
  
 in 
  
 channelsListResponse 
 . 
 Items 
 ) 
  
 { 
  
 // 
  
 From 
  
 the 
  
 API 
  
 response 
 , 
  
 extract 
  
 the 
  
 playlist 
  
 ID 
  
 that 
  
 identifies 
  
 the 
  
 list 
  
 // 
  
 of 
  
 videos 
  
 uploaded 
  
 to 
  
 the 
  
 authenticated 
  
 user 
 's channel. 
  
 var 
  
 uploadsListId 
  
 = 
  
 channel 
 . 
 ContentDetails 
 . 
 RelatedPlaylists 
 . 
 Uploads 
 ; 
  
 Console 
 . 
 WriteLine 
 ( 
 "Videos in list {0}" 
 , 
  
 uploadsListId 
 ); 
  
 var 
  
 nextPageToken 
  
 = 
  
 "" 
 ; 
  
 while 
  
 ( 
 nextPageToken 
  
 != 
  
 null 
 ) 
  
 { 
  
 var 
  
 playlistItemsListRequest 
  
 = 
  
 youtubeService 
 . 
 PlaylistItems 
 . 
 List 
 ( 
 "snippet" 
 ); 
  
 playlistItemsListRequest 
 . 
 PlaylistId 
  
 = 
  
 uploadsListId 
 ; 
  
 playlistItemsListRequest 
 . 
 MaxResults 
  
 = 
  
 50 
 ; 
  
 playlistItemsListRequest 
 . 
 PageToken 
  
 = 
  
 nextPageToken 
 ; 
  
 // 
  
 Retrieve 
  
 the 
  
 list 
  
 of 
  
 videos 
  
 uploaded 
  
 to 
  
 the 
  
 authenticated 
  
 user 
 's channel. 
  
 var 
  
 playlistItemsListResponse 
  
 = 
  
 await 
  
 playlistItemsListRequest 
 . 
 ExecuteAsync 
 (); 
  
 foreach 
  
 ( 
 var 
  
 playlistItem 
  
 in 
  
 playlistItemsListResponse 
 . 
 Items 
 ) 
  
 { 
  
 // 
  
 Print 
  
 information 
  
 about 
  
 each 
  
 video 
 . 
  
 Console 
 . 
 WriteLine 
 ( 
 "{0} ({1})" 
 , 
  
 playlistItem 
 . 
 Snippet 
 . 
 Title 
 , 
  
 playlistItem 
 . 
 Snippet 
 . 
 ResourceId 
 . 
 VideoId 
 ); 
  
 } 
  
 nextPageToken 
  
 = 
  
 playlistItemsListResponse 
 . 
 NextPageToken 
 ; 
  
 } 
  
 } 
  
 } 
  
 } 
 } 
  

Search by keyword

The following code sample calls the API's search.list method to retrieve search results associated with a particular keyword.

 using 
  
 System 
 ; 
 using 
  
 System 
 . 
 Collections 
 . 
 Generic 
 ; 
 using 
  
 System 
 . 
 IO 
 ; 
 using 
  
 System 
 . 
 Reflection 
 ; 
 using 
  
 System 
 . 
 Threading 
 ; 
 using 
  
 System 
 . 
 Threading 
 . 
 Tasks 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Auth 
 . 
 OAuth2 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Services 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Upload 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Util 
 . 
 Store 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 v3 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 v3 
 . 
 Data 
 ; 
 namespace 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 Samples 
 { 
  
 /// 
  
< summary 
>  
 /// 
  
 YouTube 
  
 Data 
  
 API 
  
 v3 
  
 sample 
 : 
  
 search 
  
 by 
  
 keyword 
 . 
  
 /// 
  
 Relies 
  
 on 
  
 the 
  
 Google 
  
 APIs 
  
 Client 
  
 Library 
  
 for 
  
 . 
 NET 
 , 
  
 v1 
 . 
 7.0 
  
 or 
  
 higher 
 . 
  
 /// 
  
 See 
  
 https 
 : 
 // 
 developers 
 . 
 google 
 . 
 com 
 / 
 api 
 - 
 client 
 - 
 library 
 / 
 dotnet 
 / 
 get_started 
  
 /// 
  
 /// 
  
 Set 
  
 ApiKey 
  
 to 
  
 the 
  
 API 
  
 key 
  
 value 
  
 from 
  
 the 
  
 APIs 
 & 
 auth 
 > 
 Registered 
  
 apps 
  
 tab 
  
 of 
  
 /// 
  
 https 
 : 
 // 
 cloud 
 . 
 google 
 . 
 com 
 / 
 console 
  
 /// 
  
 Please 
  
 ensure 
  
 that 
  
 you 
  
 have 
  
 enabled 
  
 the 
  
 YouTube 
  
 Data 
  
 API 
  
 for 
  
 your 
  
 project 
 . 
  
 /// 
  
< / 
 summary 
>  
 internal 
  
 class 
  
 Search 
  
 { 
  
 [ 
 STAThread 
 ] 
  
 static 
  
 void 
  
 Main 
 ( 
 string 
 [] 
  
 args 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "YouTube Data API: Search" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 "========================" 
 ); 
  
 try 
  
 { 
  
 new 
  
 Search 
 () 
 . 
 Run 
 () 
 . 
 Wait 
 (); 
  
 } 
  
 catch 
  
 ( 
 AggregateException 
  
 ex 
 ) 
  
 { 
  
 foreach 
  
 ( 
 var 
  
 e 
  
 in 
  
 ex 
 . 
 InnerExceptions 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Error: " 
  
 + 
  
 e 
 . 
 Message 
 ); 
  
 } 
  
 } 
  
 Console 
 . 
 WriteLine 
 ( 
 "Press any key to continue..." 
 ); 
  
 Console 
 . 
 ReadKey 
 (); 
  
 } 
  
 private 
  
 async 
  
 Task 
  
 Run 
 () 
  
 { 
  
 var 
  
 youtubeService 
  
 = 
  
 new 
  
 YouTubeService 
 ( 
 new 
  
 BaseClientService 
 . 
 Initializer 
 () 
  
 { 
  
 ApiKey 
  
 = 
  
 "REPLACE_ME" 
 , 
  
 ApplicationName 
  
 = 
  
 this 
 . 
 GetType 
 () 
 . 
 ToString 
 () 
  
 }); 
  
 var 
  
 searchListRequest 
  
 = 
  
 youtubeService 
 . 
 Search 
 . 
 List 
 ( 
 "snippet" 
 ); 
  
 searchListRequest 
 . 
 Q 
  
 = 
  
 "Google" 
 ; 
  
 // 
  
 Replace 
  
 with 
  
 your 
  
 search 
  
 term 
 . 
  
 searchListRequest 
 . 
 MaxResults 
  
 = 
  
 50 
 ; 
  
 // 
  
 Call 
  
 the 
  
 search 
 . 
 list 
  
 method 
  
 to 
  
 retrieve 
  
 results 
  
 matching 
  
 the 
  
 specified 
  
 query 
  
 term 
 . 
  
 var 
  
 searchListResponse 
  
 = 
  
 await 
  
 searchListRequest 
 . 
 ExecuteAsync 
 (); 
  
 List<string> 
  
 videos 
  
 = 
  
 new 
  
 List<string> 
 (); 
  
 List<string> 
  
 channels 
  
 = 
  
 new 
  
 List<string> 
 (); 
  
 List<string> 
  
 playlists 
  
 = 
  
 new 
  
 List<string> 
 (); 
  
 // 
  
 Add 
  
 each 
  
 result 
  
 to 
  
 the 
  
 appropriate 
  
 list 
 , 
  
 and 
  
 then 
  
 display 
  
 the 
  
 lists 
  
 of 
  
 // 
  
 matching 
  
 videos 
 , 
  
 channels 
 , 
  
 and 
  
 playlists 
 . 
  
 foreach 
  
 ( 
 var 
  
 searchResult 
  
 in 
  
 searchListResponse 
 . 
 Items 
 ) 
  
 { 
  
 switch 
  
 ( 
 searchResult 
 . 
 Id 
 . 
 Kind 
 ) 
  
 { 
  
 case 
  
 "youtube#video" 
 : 
  
 videos 
 . 
 Add 
 ( 
 String 
 . 
 Format 
 ( 
 "{0} ({1})" 
 , 
  
 searchResult 
 . 
 Snippet 
 . 
 Title 
 , 
  
 searchResult 
 . 
 Id 
 . 
 VideoId 
 )); 
  
 break 
 ; 
  
 case 
  
 "youtube#channel" 
 : 
  
 channels 
 . 
 Add 
 ( 
 String 
 . 
 Format 
 ( 
 "{0} ({1})" 
 , 
  
 searchResult 
 . 
 Snippet 
 . 
 Title 
 , 
  
 searchResult 
 . 
 Id 
 . 
 ChannelId 
 )); 
  
 break 
 ; 
  
 case 
  
 "youtube#playlist" 
 : 
  
 playlists 
 . 
 Add 
 ( 
 String 
 . 
 Format 
 ( 
 "{0} ({1})" 
 , 
  
 searchResult 
 . 
 Snippet 
 . 
 Title 
 , 
  
 searchResult 
 . 
 Id 
 . 
 PlaylistId 
 )); 
  
 break 
 ; 
  
 } 
  
 } 
  
 Console 
 . 
 WriteLine 
 ( 
 String 
 . 
 Format 
 ( 
 "Videos: 
 \n 
 {0} 
 \n 
 " 
 , 
  
 string 
 . 
 Join 
 ( 
 " 
 \n 
 " 
 , 
  
 videos 
 ))); 
  
 Console 
 . 
 WriteLine 
 ( 
 String 
 . 
 Format 
 ( 
 "Channels: 
 \n 
 {0} 
 \n 
 " 
 , 
  
 string 
 . 
 Join 
 ( 
 " 
 \n 
 " 
 , 
  
 channels 
 ))); 
  
 Console 
 . 
 WriteLine 
 ( 
 String 
 . 
 Format 
 ( 
 "Playlists: 
 \n 
 {0} 
 \n 
 " 
 , 
  
 string 
 . 
 Join 
 ( 
 " 
 \n 
 " 
 , 
  
 playlists 
 ))); 
  
 } 
  
 } 
 } 
  

Upload a video

The following code sample calls the API's videos.insert method to upload a video to the channel associated with the request.

 using 
  
 System 
 ; 
 using 
  
 System 
 . 
 IO 
 ; 
 using 
  
 System 
 . 
 Reflection 
 ; 
 using 
  
 System 
 . 
 Threading 
 ; 
 using 
  
 System 
 . 
 Threading 
 . 
 Tasks 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Auth 
 . 
 OAuth2 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Services 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Upload 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 Util 
 . 
 Store 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 v3 
 ; 
 using 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 v3 
 . 
 Data 
 ; 
 namespace 
  
 Google 
 . 
 Apis 
 . 
 YouTube 
 . 
 Samples 
 { 
  
 /// <summary> 
  
 /// YouTube Data API v3 sample: upload a video. 
  
 /// Relies on the Google APIs Client Library for .NET, v1.7.0 or higher. 
  
 /// See https://developers.google.com/api-client-library/dotnet/get_started 
  
 /// </summary> 
  
 internal 
  
 class 
  
 UploadVideo 
  
 { 
  
 [ 
 STAThread 
 ] 
  
 static 
  
 void 
  
 Main 
 ( 
 string 
 [] 
  
 args 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "YouTube Data API: Upload Video" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 "==============================" 
 ); 
  
 try 
  
 { 
  
 new 
  
 UploadVideo 
 (). 
 Run 
 (). 
 Wait 
 (); 
  
 } 
  
 catch 
  
 ( 
 AggregateException 
  
 ex 
 ) 
  
 { 
  
 foreach 
  
 ( 
 var 
  
 e 
  
 in 
  
 ex 
 . 
 InnerExceptions 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Error: " 
  
 + 
  
 e 
 . 
 Message 
 ); 
  
 } 
  
 } 
  
 Console 
 . 
 WriteLine 
 ( 
 "Press any key to continue..." 
 ); 
  
 Console 
 . 
 ReadKey 
 (); 
  
 } 
  
 private 
  
 async 
  
 Task 
  
 Run 
 () 
  
 { 
  
 UserCredential 
  
 credential 
 ; 
  
 using 
  
 ( 
 var 
  
 stream 
  
 = 
  
 new 
  
 FileStream 
 ( 
 "client_secrets.json" 
 , 
  
 FileMode 
 . 
 Open 
 , 
  
 FileAccess 
 . 
 Read 
 )) 
  
 { 
  
 credential 
  
 = 
  
 await 
  
 GoogleWebAuthorizationBroker 
 . 
 AuthorizeAsync 
 ( 
  
 GoogleClientSecrets 
 . 
 Load 
 ( 
 stream 
 ). 
 Secrets 
 , 
  
 // This OAuth 2.0 access scope allows an application to upload files to the 
  
 // authenticated user's YouTube channel, but doesn't allow other types of access. 
  
 new 
 [] 
  
 { 
  
 YouTubeService 
 . 
 Scope 
 . 
 YoutubeUpload 
  
 }, 
  
 "user" 
 , 
  
 CancellationToken 
 . 
 None 
  
 ); 
  
 } 
  
 var 
  
 youtubeService 
  
 = 
  
 new 
  
 YouTubeService 
 ( 
 new 
  
 BaseClientService 
 . 
 Initializer 
 () 
  
 { 
  
 HttpClientInitializer 
  
 = 
  
 credential 
 , 
  
 ApplicationName 
  
 = 
  
 Assembly 
 . 
 GetExecutingAssembly 
 (). 
 GetName 
 (). 
 Name 
  
 }); 
  
 var 
  
 video 
  
 = 
  
 new 
  
 Video 
 (); 
  
 video 
 . 
 Snippet 
  
 = 
  
 new 
  
 VideoSnippet 
 (); 
  
 video 
 . 
 Snippet 
 . 
 Title 
  
 = 
  
 "Default Video Title" 
 ; 
  
 video 
 . 
 Snippet 
 . 
 Description 
  
 = 
  
 "Default Video Description" 
 ; 
  
 video 
 . 
 Snippet 
 . 
 Tags 
  
 = 
  
 new 
  
 string 
 [] 
  
 { 
  
 "tag1" 
 , 
  
 "tag2" 
  
 }; 
  
 video 
 . 
 Snippet 
 . 
 CategoryId 
  
 = 
  
 "22" 
 ; 
  
 // See https://developers.google.com/youtube/v3/docs/videoCategories/list 
  
 video 
 . 
 Status 
  
 = 
  
 new 
  
 VideoStatus 
 (); 
  
 video 
 . 
 Status 
 . 
 PrivacyStatus 
  
 = 
  
 "unlisted" 
 ; 
  
 // or "private" or "public" 
  
 var 
  
 filePath 
  
 = 
  
 @"REPLACE_ME.mp4" 
 ; 
  
 // Replace with path to actual movie file. 
  
 using 
  
 ( 
 var 
  
 fileStream 
  
 = 
  
 new 
  
 FileStream 
 ( 
 filePath 
 , 
  
 FileMode 
 . 
 Open 
 )) 
  
 { 
  
 var 
  
 videosInsertRequest 
  
 = 
  
 youtubeService 
 . 
 Videos 
 . 
 Insert 
 ( 
 video 
 , 
  
 "snippet,status" 
 , 
  
 fileStream 
 , 
  
 "video/*" 
 ); 
  
 videosInsertRequest 
 . 
 ProgressChanged 
  
 += 
  
 videosInsertRequest_ProgressChanged 
 ; 
  
 videosInsertRequest 
 . 
 ResponseReceived 
  
 += 
  
 videosInsertRequest_ResponseReceived 
 ; 
  
 await 
  
 videosInsertRequest 
 . 
 UploadAsync 
 (); 
  
 } 
  
 } 
  
 void 
  
 videosInsertRequest_ProgressChanged 
 ( 
 Google 
 . 
 Apis 
 . 
 Upload 
 . 
 IUploadProgress 
  
 progress 
 ) 
  
 { 
  
 switch 
  
 ( 
 progress 
 . 
 Status 
 ) 
  
 { 
  
 case 
  
 UploadStatus 
 . 
 Uploading 
 : 
  
 Console 
 . 
 WriteLine 
 ( 
 "{0} bytes sent." 
 , 
  
 progress 
 . 
 BytesSent 
 ); 
  
 break 
 ; 
  
 case 
  
 UploadStatus 
 . 
 Failed 
 : 
  
 Console 
 . 
 WriteLine 
 ( 
 "An error prevented the upload from completing. 
 \n 
 {0}" 
 , 
  
 progress 
 . 
 Exception 
 ); 
  
 break 
 ; 
  
 } 
  
 } 
  
 void 
  
 videosInsertRequest_ResponseReceived 
 ( 
 Video 
  
 video 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Video id '{0}' was successfully uploaded." 
 , 
  
 video 
 . 
 Id 
 ); 
  
 } 
  
 } 
 } 
  
Design a Mobile Site
View Site in Mobile | Classic
Share by: