2009-08-25 4 views
1

YouTubeからのXMLレスポンスを解析しようとしていますが、私は完全にブロックされています。Parse Server.XMLHTTP ASPレスポンスによる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 

%> 

[OK]を、ここから、私は応答を解析する方法がわかりません。私が何をしたいか

などのタイトル、アップロードされた日付、評価、などの変数

にノードを保存することです、私はこの問題を解決するために、この1 http://www.aspmessageboard.com/showthread.php?t=230539を試してみましたが、私が取得することができませんでしたすべてのノードを変数に変換します。

ありがとうございました!

答えて

0

まず、名前空間を使用せずにXpathクエリを実行できないように、名前空間を設定する必要があります。 これは、サーバーにインストールされているMSXMLのバージョンによって異なります。

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

これはあなたを動作しない場合は、おそらく私はあなたがのDOMDocumentと名前空間マネージャを関連付けるかどうかはわかりませんMXNamespaceManager

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

を作成する必要があります。多分あなたはする必要はありません!

データにアクセスするには、新しいプレフィックスを使用して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

私はまだ50万行のVB6コードをサポートしています。私はその人を軽くしようとしていませんでした。彼らのペットプロジェクトがすでに知っている言語を使用していた場合には、ちょっと優しくしてください! 私はVB6と.Netの両方でXMLで十分な作業をしています.Netライブラリがかなり優れていることを知りました。 –

+0

@ダレル:十分に公正。あなたが新しいLinq-To-XMLのものを参照しているなら、私はあなたに同意するでしょう。しかし、標準的なDOMの実装は。NETは、すでに掲載されている非常に似たコードになります。実際、これは既存の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エラー '80004005' 必要な空白がありません。 何ができますか? ありがとうございます! –

+0

余分なスペースでns変数を終了する必要があるので、私は答えを微調整しました。 – AnthonyWJones

関連する問題