Parse Server.XMLHTTP Ответ YouTube с ASP Classic - PullRequest
1 голос
/ 26 августа 2009

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

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

<%

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

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 26 августа 2009

В этом коде предполагается, что XmlHttp распознает application / atom + xml как тип mime XML и, следовательно, 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 голосов
/ 26 августа 2009

Сначала вам нужно настроить пространство имен, так как вы не сможете выполнять запросы 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!

...