Как разобрать YouTube XML без использования API YouTube YouTube - PullRequest
0 голосов
/ 16 декабря 2011

Я хочу, чтобы пользователи моего приложения Facebook публиковали видео с YouTube. Любой пользователь может поместить ссылку на YouTube в текстовое поле ввода. Поведение идентично размещению видео на их стене в Facebook. Приложение извлекает идентификатор видео из ссылки и создает другую ссылку на YouTube.
Например, если ссылка: http://www.youtube.com/watch?v=JBWd_yJPbr8&feature=related
Идентификатор: 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);

Недопустимый тип элемента

Ответы [ 3 ]

3 голосов
/ 16 декабря 2011

Используя 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"]);
}
1 голос
/ 16 декабря 2011

В 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 не тот, который вам нужен, так что код по-прежнему будет нуждатьсянемного работы.

1 голос
/ 16 декабря 2011

Вы пробовали это: http://www.codeproject.com/KB/cs/youmanager.aspx?display=Print Это очень хороший пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...