我想从给定的播放列表中检索标题和URL,并将其写入本地csv文件,因此可以在Microsoft excel中使用。到目前为止一切顺利,没有问题,我使用https://developers.google.com/youtube/v3/code_samples/dotnet中的代码制作了一个.Net控制台项目。我的播放列表中的标题有多种语言,例如德语,希伯来语,西班牙语和俄语。要编写csv文件,我在c#中使用CsvHelper。问题是特殊的非英语字符在csv文件中显示为不可读的字符。这是我的德语播放列表代码,但无法正确显示德语特殊字符。
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;
using CsvHelper;
using CsvHelper.Configuration;
using System.Globalization;
namespace Youtube
{
internal class MyUploads
{
[STAThread]
static void Main(string[] args)
{
// Displays several properties of the neutral cultures.
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 = "PLcHIqbEfi5uMC-GtxiSo0kFMF3bh6BQTo"; //eng "PLcHIqbEfi5uMsr-Lx0KT8mjJ-cnNYTzbW";
//channel.ContentDetails.RelatedPlaylists.Uploads;
Console.WriteLine("Videos in list {0}", uploadsListId);
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("de-DE"); //en - GB
CsvConfiguration csvConfiguration = new CsvConfiguration(cultureInfo);
csvConfiguration.Delimiter = ";";
var writer = System.IO.File.CreateText("german_videos.csv");
var csvWriter = new CsvWriter(writer,csvConfiguration);
var nextPageToken = "";
csvWriter.WriteField("Title");
csvWriter.WriteField("URL");
csvWriter.NextRecord();
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);
csvWriter.WriteField(playlistItem.Snippet.Title);
csvWriter.WriteField("https://www.youtube.com/watch?v=" + playlistItem.Snippet.ResourceId.VideoId.ToString());
csvWriter.NextRecord();
}
nextPageToken = playlistItemsListResponse.NextPageToken;
}
csvWriter.Dispose();
writer.Dispose();
}
}
}
}
我想从给定的播放列表中检索标题和URL,并将其写入本地csv文件,因此可以在Microsoft excel中使用。到目前为止一切顺利,没有问题,我使用...
我通过写入SQL Express数据库并定义列nvarchar解决了该问题。这样就解决了语言问题。