如何从Youtube自动完成webclient.DownloadString()?

时间:2018-01-14 20:48:12

标签: c# .net forms encoding

我想在Windows窗体应用程序中获取YouTube搜索自动填充功能,这适用于英语,它对希伯来语不起作用,我应该选择哪种编码?

string s = webClient.DownloadString(
   @"http://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q=" + 
   System.Net.WebUtility.UrlEncode(textBoxMain.Text));

以下是我下载希伯来语时所看到的一个例子:

  

[" \ u05DB",[" \ u05DB \ u05E4 \ u05D5 \ u05DC \ u05D4 \ u05E4 \ u05E8 \ u05E7 8"," \ u05DB \ u05E4 \ u05D5 \ u05DC \ u05D4"," \ u05DB \ u05D9 \ u05E4 \ u05EA \ u05D1 \ u05E8 \ u05D6 \ u05DC"," \ u05DB \ u05D3 \ u05E7 \ u05D8 \ u05DF", " \ u05DB \ u05D \ u05D4 \ u05D0 \ u05D4 \ u05E0 \ u05D5"," \ u05DB \ u05D0 \ u05DF"," \ u05DB \ u05E8 \ u05DE \ u05DC \ u05D4"," \ u05DB \ u05E4 \ u05D5 \ u05DC \ u05D4 \ u05E4 \ u05E8 \ u05E7 1"," \ u05DB \ u05D5 \ u05D5 \ u05E8 \ u05EA",& #34; \ u05DB \ u05E9 \ u05D0 \ u05D7 \ u05E8"]]

1 个答案:

答案 0 :(得分:0)

由于该结果看起来像JSON格式,我应用JSON反序列化器来获取其对象结构,然后处理结果以获取单词列表。碰巧很好地处理了这些字符串的转换。

我使用JsonConvert class来完成繁重的工作。

这是执行该技巧的代码:

var webClient = new WebClient();

string s = webClient.DownloadString(
    @"http://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q="
    + "ירושלים");

// s.Dump("raw"); // LinqPad dump

var words = new List<string>();  // collect all words

// make JObject's out of the string 
var json = JsonConvert.DeserializeObject(s); // using Newtonsoft.Json;

// we got an Array, let's process that
foreach(var item in (JArray)json)
{
   // single value
   if (item is JValue)
   {
       words.Add((string)item);  // add it
   }
   else if (item is JArray) // another array
   {
      foreach(var seconditem in item)
      {
          words.Add((string)seconditem);  // add it
      }
   }
}

您可以将words列表数据绑定到其中一个控件。

以下是LinqPad中的结果:

enter image description here

从NuGet here获取Newtonsoft.Json类。