如何解析youtube xml不使用youtube api

本文关键字:youtube api xml 何解析 | 更新日期: 2023-09-27 18:17:55

我想让用户在我的Facebook应用程序发布YouTube视频。任何用户都可以在输入文本框中放入YouTube链接。这种行为就像在他们的Facebook墙上发布视频一样。应用程序从链接中提取视频id,并创建一个不同的YouTube链接。
例如:链接为:http://www.youtube.com/watch?v=JBWd_yJPbr8&feature=related
id为:JBWd_yJPbr8,请求变为 http://gdata.youtube.com/feeds/api/videos/JBWd_yJPbr8

问题是解析返回的XML。这不是标准XML,或者至少我没有使用标准XML解析器使其工作。我如何解析这个XML?我需要一个缩略图,标题和描述…
using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
{
    XmlWriterSettings ws = new XmlWriterSettings();
    ws.Indent = true;
    using (XmlWriter writer = XmlWriter.Create(output, ws))
    {


            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        writer.WriteStartElement(reader.Name);
                        break;
                    case XmlNodeType.Text:
                        writer.WriteString(reader.Value);
                        break;
                    case XmlNodeType.XmlDeclaration:
                    case XmlNodeType.ProcessingInstruction:
                        writer.WriteProcessingInstruction(reader.Name, reader.Value);
                        break;
                    case XmlNodeType.Comment:
                        writer.WriteComment(reader.Value);
                        break;
                    case XmlNodeType.EndElement:
                        writer.WriteFullEndElement();
                        break;
                }
            }
        }
    }

这种情况是抛出异常:

case XmlNodeType.Element:
writer.WriteStartElement(reader.Name);

元素类型无效

如何解析youtube xml不使用youtube api

使用Json。Net中,您可以将返回的json响应解析为:

(我把?alt=json附加到你的url)

System.Net.WebClient wc = new System.Net.WebClient();
string s = wc.DownloadString("http://gdata.youtube.com/feeds/api/videos/JBWd_yJPbr8?alt=json");
JObject JObj = (JObject)JsonConvert.DeserializeObject(s);
var entry = JObj["entry"];
Console.WriteLine("TITLE: " + entry["title"]["$t"]);
Console.WriteLine("DESC : " + entry["media$group"]["media$description"]["$t"]);
foreach (var thumbnail in entry["media$group"]["media$thumbnail"])
{
    Console.WriteLine(thumbnail["url"]);
}

您试过这个吗:http://www.codeproject.com/KB/cs/youmanager.aspx?display=Print这是一个很好的例子

xml没有任何问题-它解析得很好。问题是你写xml的方式。

代码writer.WriteStartElement(reader.Name);不工作,reader.Name返回一个字符串,如"app:control"-你不能在元素名称有冒号。

xml中标记名中有冒号,这是因为冒号前的位表示标记属于哪个名称空间。

如果你替换行:

case XmlNodeType.Element:
    writer.WriteStartElement(reader.Name);
    break;

case XmlNodeType.Element:
    writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
    break;

您的代码应该可以正常运行并解析XML。

您将发现输出的xml不是您想要的,因此代码仍然需要一些工作。