Updated README.md
This commit is contained in:
@@ -16,20 +16,125 @@ C# library which is used to extend the abilities of YouTube API v3
|
||||
- User's recommendations listing
|
||||
- User's subscriptions videos listing
|
||||
- Videos' URLs retrieval
|
||||
- UWP authorization helpers
|
||||
|
||||
## Get started
|
||||
- Download and install package from [NuGet](https://www.nuget.org/packages/ExtendedYouTubeAPI/)
|
||||
### Authorization (UWP)
|
||||
```
|
||||
using System;
|
||||
using Google.Apis.Auth.OAuth2;
|
||||
using YouTube.Authorization;
|
||||
using Windows.Security.Authentication.Web;
|
||||
|
||||
## Contribution
|
||||
1. Clone repository
|
||||
2. Build "YouTube.API" project
|
||||
### Configuring tests
|
||||
...
|
||||
|
||||
ClientSecrets secrets = new ClientSecrets // Initialize your project secrets
|
||||
{
|
||||
ClientId = "%CLIENT_ID%",
|
||||
ClientSecret = "%CLIENT_SECRET%"
|
||||
}
|
||||
|
||||
string[] scopes = new string[] // Define scopes you wanna access
|
||||
{
|
||||
Oauth2Service.Scope.UserinfoProfile,
|
||||
Oauth2Service.Scope.UserinfoEmail,
|
||||
YouTubeService.Scope.YoutubeForceSsl
|
||||
};
|
||||
|
||||
Uri requestString = AuthorizationHelpers.FormQueryString(secrets, scopes); // Generate authorization link
|
||||
|
||||
WebAuthenticationResult result = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.UseTitle, requestString, AuthorizationHelpers.Endpoint); // Call authentication broker with generated query string and predefined endpoint. WebAuthenticationOptions.UseTitle is required
|
||||
|
||||
if (result.ResponseStatus == WebAuthenticationStatus.Success) // Process response
|
||||
{
|
||||
string successCode = AuthorizationHelpers.ParseSuccessCode(result.ResponseData); // Retrieve success code
|
||||
YouTube.Authorization.UserCredential credential = await AuthorizationHelpers.ExchangeToken(ClientSecrets, successCode); // Excahnge success token for UserCredential
|
||||
|
||||
// Use UserCredential to create YouTube.ExtendedYouTubeService
|
||||
|
||||
// Save refresh token for future use. Recommended way: PasswordVault
|
||||
PasswordVault passwordVault = new PasswordVault();
|
||||
PasswordCredential tokenData = new PasswordCredential("%ANY_ID%", "%AUTHORIZED_USER_ID%", credential.Token.RefreshToken)
|
||||
passwordVault.Add(tokenData);
|
||||
|
||||
// Update stored refresh token on renew
|
||||
credential.RefreshTokenUpdated += (s, e) =>
|
||||
{
|
||||
tokenData.Password = credential.Token.RefreshToken
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Do something
|
||||
}
|
||||
```
|
||||
### Service retrieval
|
||||
```
|
||||
using YouTube;
|
||||
using YouTube.Authorization;
|
||||
using Google.Apis.Services;
|
||||
|
||||
...
|
||||
|
||||
YouTubeExtendedService GetService(UserCredential credential = null)
|
||||
{
|
||||
BaseClientService.Initializer initializer = new BaseClientService.Initializer
|
||||
{
|
||||
ApplicationName = "%APP_NAME%",
|
||||
ApiKey = "%API_KEY%", // In case there's no UserCredential and usage is anonymous
|
||||
HttpClientInitializer = credential
|
||||
};
|
||||
|
||||
ExtendedYouTubeService service = new ExtendedYouTubeService(initializer);
|
||||
|
||||
returnt service
|
||||
}
|
||||
```
|
||||
|
||||
### DASH manifest retrieval
|
||||
```
|
||||
using YouTube;
|
||||
using YouTube.Models;
|
||||
using System.Collections.Generic;
|
||||
using Windows.Media.Playback;
|
||||
|
||||
...
|
||||
|
||||
ExtendedYouTubeService service = new ExtendedYouTubeService(); // Get the Service
|
||||
var request = service.DashManifests.List("%VIDEO_ID%");
|
||||
// request.Id = "%VIDEO_ID%"; // Change video ID after request initialization
|
||||
|
||||
IReadOnlyList<DashManifest> manifests = await request.ExecuteAsync(); // Execute request. There will be manifests for all available qualities, including "Auto"
|
||||
|
||||
// DashManifest.Label - Quality label
|
||||
// DashManifest.ValidUntil - After this date URLs in the manifest will be invalid
|
||||
// DashManifest.Xml - XmlDocument instance of the manifest
|
||||
|
||||
Uri manifestUri = manifests[0].WriteManifest(TempFileStream); // Save manifest to temporary file to access it with MediaPlayer
|
||||
|
||||
...
|
||||
|
||||
// Play video with manifest
|
||||
MediaPlayer mediaPlayer = new MediaPlayer();
|
||||
mediaPlayer.Source = MediaSource.CreateFromUri(manifestUri);
|
||||
mediaPlayer.Play();
|
||||
```
|
||||
|
||||
### Other data
|
||||
Other resources are retrieved pretty much the same as in the vanilia library
|
||||
|
||||
## TODO
|
||||
- Create API Reference page
|
||||
- Document code
|
||||
- Complete README
|
||||
- Setup CI/CD
|
||||
- Complete library
|
||||
- Add more tests
|
||||
- Implement user history management
|
||||
- Implement search history management
|
||||
- Implement video recommendations/subscirptions listing
|
||||
|
||||
## Special thanks
|
||||
- [Tyrrrz](https://github.com/Tyrrrz) for [YoutubeExplode](https://github.com/Tyrrrz/YoutubeExplode) library which is used in the my one
|
||||
|
||||
## Copyrights
|
||||
> ©2019 Michael "XFox" Gordeev
|
||||
> ©2020 Michael "XFox" Gordeev
|
||||
Reference in New Issue
Block a user