Ich habe Probleme beim Hinzufügen von Bildunterschriften zu Videos, die auf die Youtube-Kanäle meiner Firma hochgeladen wurden. Ich möchte es mit Googles Youtube Api v3 in .Net machen. Ich bin in der Lage, Videos erfolgreich auf die Kanäle hochzuladen, aber beim Versuch, Untertitel zu senden, erhalte ich den folgenden Fehler: "System.Net.Http.HttpRequestException: Antwortstatuscode zeigt keinen Erfolg an: 403 (Forbidden)."Hinzufügen von Bildunterschriften zu Youtube-Video mit YoutubeApi v3 in .Net
Soweit ich das beurteilen kann, verbieten mir meine Referenzen nicht das Hochladen von Bildunterschriften. Ich kann Videos problemlos hochladen.
habe ich den Aktualisierungs-Token hier die Anweisungen mit: Youtube API single-user scenario with OAuth (uploading videos)
Dies ist der Code Ich bin mit dem YouTubeService Objekt zu erstellen:
private YouTubeService GetYouTubeService()
{
string clientId = "clientId";
string clientSecret = "clientSecret";
string refreshToken = "refreshToken";
try
{
ClientSecrets secrets = new ClientSecrets()
{
ClientId = clientId,
ClientSecret = clientSecret
};
var token = new TokenResponse { RefreshToken = refreshToken };
var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = secrets,
Scopes = new[] { YouTubeService.Scope.Youtube, YouTubeService.Scope.YoutubeUpload, YouTubeService.Scope.YoutubeForceSsl }
}),
"user",
token);
var service = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credentials,
ApplicationName = "TestProject"
});
service.HttpClient.Timeout = TimeSpan.FromSeconds(360);
return service;
}
catch (Exception ex)
{
Log.Error("YouTube.GetYouTubeService() => Could not get youtube service. Ex: " + ex);
return null;
}
}
Und hier ist der Code, den ich für das Hochladen haben Die Untertiteldatei:
private void UploadCaptionFile(String videoId)
{
try
{
Caption caption = new Caption();
caption.Snippet = new CaptionSnippet();
caption.Snippet.Name = videoId + "_Caption";
caption.Snippet.Language = "en";
caption.Snippet.VideoId = videoId;
caption.Snippet.IsDraft = false;
WebRequest req = WebRequest.Create(_urlCaptionPath);
using (Stream stream = req.GetResponse().GetResponseStream())
{
CaptionsResource.InsertMediaUpload captionInsertRequest = _youtubeService.Captions.Insert(caption, "snippet", stream, "*/*");
captionInsertRequest.Sync = true;
captionInsertRequest.ProgressChanged += captionInsertRequest_ProgressChanged;
captionInsertRequest.ResponseReceived += captionInsertRequest_ResponseReceived;
IUploadProgress result = captionInsertRequest.Upload();
}
}
catch (Exception ex)
{
Log.Error("YouTube.UploadCaptionFile() => Unable to upload caption file. Ex: " + ex);
}
}
void captionInsertRequest_ResponseReceived(Caption obj)
{
Log.Info("YouTube.captionInsertRequest_ResponseReceived() => Caption ID " + obj.Id + " was successfully uploaded for this clip.");
Utility.UpdateClip(_videoClip);
}
void captionInsertRequest_ProgressChanged(IUploadProgress obj)
{
switch (obj.Status)
{
case UploadStatus.Uploading:
Console.WriteLine("{0} bytes sent.", obj.BytesSent);
break;
case UploadStatus.Failed:
Log.Error("YouTube.UploadCaptionFile() => An error prevented the upload from completing. " + obj.Exception);
break;
}
}
Ich habe die letzten paar Tage damit verbracht, an diesem Problem zu arbeiten, und ich konnte nicht mak e jeder Fortschritt. YouTubeApi v3 hat nicht viele Informationen zum Hinzufügen von Bildunterschriften. Alles, was ich finden konnte, waren einige alte Informationen für v2, die einige POST-Aufrufe erforderten, die Schlüssel erfordern, die ich nicht habe. Ich würde gerne in der Lage sein, die Bildunterschriften mit den eingebauten Methoden der API dafür hinzuzufügen.
Wenn jemand Erfahrung mit diesem Thema hat, würde ich jede Hilfe, die Sie anbieten können, sehr schätzen.
EDIT:
Hier ist mein Code für die Videos auf YouTube zu senden.
public string UploadClipToYouTube()
{
try
{
var video = new Google.Apis.YouTube.v3.Data.Video();
video.Snippet = new VideoSnippet();
video.Snippet.Title = _videoClip.Name;
video.Snippet.Description = _videoClip.Description;
video.Snippet.Tags = GenerateTags();
video.Snippet.DefaultAudioLanguage = "en";
video.Snippet.DefaultLanguage = "en";
video.Snippet.CategoryId = "22";
video.Status = new VideoStatus();
video.Status.PrivacyStatus = "unlisted";
WebRequest req = WebRequest.Create(_videoPath);
using (Stream stream = req.GetResponse().GetResponseStream())
{
VideosResource.InsertMediaUpload insertRequest = _youtubeService.Videos.Insert(video, "snippet, status", stream, "video/*");
insertRequest.ProgressChanged += videosInsertRequest_ProgressChanged;
insertRequest.ResponseReceived += videosInsertRequest_ResponseReceived;
insertRequest.Upload();
}
return UploadedVideoId;
}
catch (Exception ex)
{
Log.Error("YouTube.UploadClipToYoutube() => Error attempting to authenticate for YouTube. Ex: " + ex);
return "";
}
}
void videosInsertRequest_ProgressChanged(Google.Apis.Upload.IUploadProgress progress)
{
switch (progress.Status)
{
case UploadStatus.Uploading:
Log.Info("YouTube.videosInsertRequest_ProgressChanged() => Uploading to Youtube. " + progress.BytesSent + " bytes sent.");
break;
case UploadStatus.Failed:
Log.Error("YouTube.videosInsertRequest_ProgressChanged() => An error prevented the upload from completing. Exception: " + progress.Exception);
break;
}
}
void videosInsertRequest_ResponseReceived(Google.Apis.YouTube.v3.Data.Video video)
{
Log.Info("YouTube.videosInsertRequest_ResponseReceived() => Video was successfully uploaded to YouTube. The YouTube id is " + video.Id);
UploadedVideoId = video.Id;
UploadCaptionFile(video.Id);
}
Wenige Fragen. In Bezug auf die Authentifizierung verwenden Sie den gleichen Prozess wie beim Upload? Da der Fehler * 403 * nicht erlaubt ist (das ist offensichtlich, aber ich denke, es lohnt sich auch zu fragen), stimmen Ihre Caption-Daten mit [Einschränkungen] überein (https://developers.google.com/youtube/v3/docs/captions/insert) #anfordern). Außerdem habe ich das [ähnliche Beitrag] (http://stackoverflow.com/questions/31823160/uploading-captions-using-youtube-api-v3-dotnet-c-null-error-challenging) gesehen, nur Unterschied ist Der Fehler, den er empfängt, hast du versucht, seine Codes zu überprüfen? :) –
Der Video-Upload-Prozess ist fast identisch mit dem Hochladen von Bildtiteln. Ich werde meinen ursprünglichen Beitrag mit dem Video-Upload-Prozess aktualisieren, den ich verwende. Ich habe "YouTubeService.Scope.YoutubeForceSsl" als einen der Bereiche beim Erstellen der Anmeldeinformationen, also sollte alles den Einschränkungen entsprechen. Ich habe mir diesen ähnlichen Beitrag angesehen; Tatsächlich ist einer der Replikatoren ein ehemaliger Mitarbeiter, der an diesem Projekt arbeitete, bevor er ging und ich übernahm. Leider funktioniert der von ihm gepostete Code nicht. – Chelsea
@Chelsea Dies ist nicht 'v3'. Version 3 verwendet 'GoogleWebAuthorizationBroker' und' FileDataStore' für Oauth ... Es verwendet auch 'warten' und' async' Operationen, die das Sperren der Anwendung verhindern. Erhalten Sie die neue Version möglicherweise mit den alten Versionen gemischt? Ich vermute auch, dass Sie keinen Benutzernamen für Ihre Anfrage angeben, dies ist möglich für die Fehler oder Sie haben dies aus Sicherheitsgründen weggelassen ... – Codexer