2009-08-25 5 views
1

J'essaye d'analyser une réponse XML de YouTube, mais je suis complètement bloqué, hehe.Parse Server.XMLHTTP réponse YouTube avec ASP Classic

Ce que j'ai jusqu'à maintenant est la suivante:

<% 

    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 

%> 

Ok, d'ici, je ne sais pas comment analyser la réponse.

Ce que je veux faire est de sauvegarder les noeuds dans des variables telles que le titre, la date téléchargé, note, etc.

J'ai essayé celui-ci http://www.aspmessageboard.com/showthread.php?t=230539 pour résoudre le problème, mais je n'ai pas pu obtenir chaque noeud dans les variables.

Merci pour votre aide!

Répondre

0

Vous devez d'abord configurer l'espace de noms car vous ne pourrez pas faire de requêtes Xpath sans lui. Cela peut fonctionner selon la version de MSXML installée sur votre serveur.

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

Si cela ne fonctionne pas, vous avez probablement besoin de créer un MXNamespaceManager

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

Je ne sais pas comment vous associez le gestionnaire Namespace avec le DOMDocument. Peut-être que vous ne devez pas!

Pour accéder à vos données, vous pouvez maintenant faire des requêtes Xpath en utilisant votre nouveau préfixe.

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

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

Pour obtenir à la note que vous devrez ajouter un nouvel espace de noms,

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

et nous mettre au travail comme celui-ci

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

Espoir qui aide, et nous faire une favorisez et arrêtez d'utiliser ASP classique!

+1

"faites-nous tous une faveur et arrêtez d'utiliser ASP classique", pas utile. Cela sert seulement à faire en sorte que le PO et les autres qui l'utilisent encore pour diverses bonnes raisons commerciales se sentent mal. Clairement, le supérieur nous aurait cessé d'utiliser ASP. En guise de défi, réécrivez votre code ci-dessus dans .NET et démontrez que ce serait mieux. – AnthonyWJones

+0

Je supporte encore 500 000 lignes de code VB6. Je n'essayais pas d'égayer la personne, juste leur donner un petit coup de coude au cas où leur projet favori utiliserait un langage qu'ils connaissent déjà! J'ai fait assez de travail avec XML dans VB6 et .Net pour savoir que les bibliothèques .Net sont nettement meilleures. –

+0

@Darrel: Assez juste. Si vous vous référez à la nouvelle version de Linq-To-XML, je serais d'accord avec vous. Cependant l'implémentation DOM standard dans.NET se traduirait par un code très similaire qui a déjà été publié, en fait, il serait plus clunkier que cette solution MSXML existante. – AnthonyWJones

0

Ce code suppose que XmlHttp reconnaît application/atom + xml comme étant un type mime XML et donc ResponseXML aura un DOM chargé.

<% 

    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 
%> 

Si le type mime n'est pas reconnu comme xml, la propriété ReponseXML sera Nothing. Dans ce cas, la propriété ResponseStream peut être utilisée pour charger un DOM: -

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

Salut. Je reçois une erreur: Erreur msxml3.dll '80004005' Un espace requis est manquant. Que pourrait-il être? Merci beaucoup! –

+0

Nécessaire pour terminer les variables ns avec un espace supplémentaire, j'ai modifié la réponse. – AnthonyWJones