2009-08-25 1 views
1

Я пытаюсь разобрать xml-ответ с YouTube, но я полностью заблокирован, хе-хе.Parse Server.XMLHTTP Ответ на YouTube с ASP Classic

Ну, что я не имею до сих пор это:

<% 

    Option Explicit 
    Response.Buffer = True 

    Dim videoVimeo, videoYoutube 
     videoVimeo = "http://vimeo.com/5866977" 
     videoYoutube = "http://www.youtube.com/watch?v=d8nxjUlbKJA" 

'------------------------------------------------------------------ 
'----------------------- YouTube request -------------------------- 
'------------------------------------------------------------------ 
     ' replacing the url to get the ID from the video 
     videoYoutube = Replace(videoYoutube,"http://www.youtube.com/watch?v=","") 

     ' pasting the ID to the api URL provided from YouTube 
     videoYoutube = "http://gdata.youtube.com/feeds/api/videos/"&videoYoutube 

    Dim xml 
     set xml = Server.CreateObject("Microsoft.XMLHTTP") 
     set xml = Server.CreateObject("MSXML2.ServerXMLHTTP") 

     xml.Open "GET", videoYoutube, False 

     On Error Resume Next 

     xml.Send 

    Dim docXml 
     Set docXml = Server.CreateObject("msxml2.DOMDocument") 
      docXml.loadxml(xml.ResponseText) 

    Set xml = nothing 

%> 

Ок, отсюда я не знаю, как разобрать ответ.

То, что я хочу сделать, это сохранить узлы в переменные, такие как название, дата загруженном, рейтинг и т.д.

Я попытался это один http://www.aspmessageboard.com/showthread.php?t=230539, чтобы решить эту проблему, но я не смог каждый узел в переменные.

Благодарим за помощь!

ответ

0

Сначала вам нужно настроить пространство имен, так как вы не сможете выполнять запросы Xpath без него. Это может работать в зависимости от версии MSXML, установленной на вашем сервере.

oXslt.setProperty "SelectionNamespaces", "xmlns:atom='http://www.w3.org/2005/Atom'" 

Если это не работает, вам, вероятно, нужно создать MXNamespaceManager

Set oNSMgr = Server.CreateObject("MSXML2.MXNamespacemanager") 
oNSMgr.declarePrefix "atom", "http://www.w3.org/2005/Atom" 

Я не знаю, как вы связать пространство имен диспетчера с DOMDocument. Может быть, вам не обязательно!

Чтобы получить доступ к своим данным, теперь вы можете выполнять запросы Xpath, используя новый префикс.

set titlenode = docXml.SelectSingleNode("/atom:entry/atom:title") 
title = titlenode.Text 

set publishednode = docXml.SelectSingleNode("/atom:entry/atom:published") 
publishednode = publishednode .Text 

Чтобы получить в рейтинге вам придется добавить новое пространство имен,

xmlns:gd='http://schemas.google.com/g/2005' 

и получить на него, как этот

set ratingnode = docXml.SelectSingleNode("/atom:entry/gd:rating") 
ratingnode = ratingnode.Text 

Надежда, что помогает, и сделать нас всех пользу и прекратить использование классического ASP!

+1

«сделайте нам все одолжение и прекратите использование классического ASP», не полезно. Он служит только для того, чтобы сделать OP и других нас, которые все еще используют его в различных коммерческих целях, чтобы чувствовать себя плохо. Понятно, что вышеперечисленные пользователи перестанут использовать ASP. В качестве задачи перепишите свой код выше в .NET и продемонстрируйте, как было бы лучше? – AnthonyWJones

+0

Я все еще поддерживаю 500 000 строк кода VB6. Я не пытался уловить человека, просто дайте им нежно подтолкнуть, если их любимый проект использует язык, который они уже знают! Я сделал достаточно работы с XML как в VB6, так и в .NET, чтобы узнать, что библиотеки .Net значительно лучше. –

+0

@Darrel: Достаточно справедливо. Если вы ссылаетесь на новый материал Linq-To-XML, я согласен с вами. Однако стандартная реализация DOM в.NET приведет к очень похожему коду, который уже был опубликован, на самом деле он будет clunkier чем это существующее решение на базе MSXML. – AnthonyWJones

0

Этот код предполагает, что XmlHttp распознает application/atom + xml как тип XML mime и, следовательно, ResponseXML будет загружен DOM.

<% 

    Option Explicit 
    Response.Buffer = True 

    Dim videoVimeo : videoVimeo = "http://vimeo.com/5866977" 

    Dim videoYoutube : videoYoutube = "http://www.youtube.com/watch?v=d8nxjUlbKJA" 

    videoYoutube = Replace(videoYoutube,"http://www.youtube.com/watch?v=","") 

    videoYoutube = "http://gdata.youtube.com/feeds/api/videos/" & videoYoutube 


    Dim xhr: Set xhr= Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") 

    xhr.Open "GET", videoYoutube, False 

    xhr.Send 

    If xhr.Status = 200 Then 
     Dim xml : Set xml = xhr.ResponseXML 
     xml.SetProperty "SelectionLanguage", "XPath" 
     Dim ns : ns = "xmlns:a='http://www.w3.org/2005/Atom' " 
     ns = ns & "xmlns:gd='http://schemas.google.com/g/2005' " 
     xml.SetProperty "SelectionNamespaces", ns 

     Dim entry : Set entry = xml.DocumentElement 

     Dim title : title = entry.SelectSingleNode("a:title").Text 
     Dim published : published = entry.SelectSingleNode("a:published") 
     Dim rating : rating = entry.SelectSingleNode("gd:rating").GetAttribute("average") 


    End If 
%> 

Если тип mime не распознан как xml, свойство ReponseXML будет Nothing. В этом случае свойство ResponseStream можно использовать для загрузки DOM: -

Dim xml : Set xml = Server.CreateObject("MSXML2.DOMDocument.3.0") 
xml.load xhr.ResponseStream 
+0

Привет. Я получаю сообщение об ошибке: msxml3.dll error '80004005' Отсутствует обязательное пробел. Что это может быть? Большое спасибо! – 2009-08-26 17:03:45

+0

Нужно дополнить переменные ns дополнительным пространством, я изменил ответ. – AnthonyWJones