Я использую следующий код, чтобы получить authoriziation и загрузить на YouTube:YouTube API. Validate Refresh Токен перед загрузкой
Я просил мою фишку от Google, и пользователь вошел в системе, и я получил мое разрешение на маркере обратно.
я променял это для маркера обновления и доступа, используя следующие:
using (WebClient client = new WebClient())
{
byte[] response =
client.UploadValues("https://accounts.google.com/o/oauth2/token", new NameValueCollection()
{
{"code", Session["authCode"].ToString()},
{"redirect_uri", "http://YouTubeTest.org/testpage.aspx"},
{
"client_id", clientID
},
{"client_secret", secret},
{"grant_type", "authorization_code"}
});
string result =Encoding.UTF8.GetString(response);
XElement node = XElement.Parse(JsonConvert.DeserializeXNode(result, "Root").ToString());
Session["refreshtoken"] = node.Element("refresh_token").Value;
}
Эти данные затем сохраняются.
Когда пользователь нажимает кнопку, чтобы загрузить видео, которое я Инициализируемы услуги YouTube следующим образом:
ClientSecrets secrets = new ClientSecrets()
{
ClientId = CLIENT_ID,
ClientSecret = CLIENT_SECRET
};
var token = new TokenResponse { RefreshToken = REFRESH_TOKEN };
var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = secrets
}),
"user",
token);
var service = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credentials,
ApplicationName = "TestProject"
});
В этот момент я хотел бы знать, если маркер обновления я послал более справедливо, но Безразлично» Кажется, это какой-то способ рассказать.
Единственный способ, которым я, кажется, знаю, когда я на самом деле попробовать и загрузить видео, выполнив следующие действия:
public String UploadVideo(Stream stream, String title, String desc, String[] tags, String categoryId, Boolean isPublic)
{
var video = new Video();
video.Snippet = new VideoSnippet();
video.Snippet.Title = title;
video.Snippet.Description = desc;
video.Snippet.Tags = tags;
video.Snippet.CategoryId = categoryId; // See https://developers.google.com/youtube/v3/docs/videoCategories/list
video.Status = new VideoStatus();
video.Status.PrivacyStatus = isPublic ? "public" : "private";
var videosInsertRequest = youtube.Videos.Insert(video, "snippet,status", stream, "video/*");
videosInsertRequest.ProgressChanged += insertRequest_ProgressChanged;
videosInsertRequest.ResponseReceived += insertRequest_ResponseReceived;
videosInsertRequest.Upload();
return UploadedVideoId;
}
void insertRequest_ResponseReceived(Video video)
{
UploadedVideoId = video.Id;
}
void insertRequest_ProgressChanged(Google.Apis.Upload.IUploadProgress progress)
{
// You can handle several status messages here.
switch (progress.Status)
{
case UploadStatus.Failed:
UploadedVideoId = "FAILED";
^^ Если маркер является недействительным в данный момент прогресс имеет исключение с " Invalid_grant»
break;
case UploadStatus.Completed:
break;
default:
break;
}
}
Как узнать, прежде чем я попробовать загрузку, если маркер обновления у меня действует?
С этой точки зрения трудно восстановить красиво, поэтому в идеале я хотел бы проверить это, когда или после того, как я инициализирую службу youtube.