2009-10-13 3 views
1

Используя следующий код:Youtube XML ASP классическая проблема

<% 


    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 

%> 

Я получаю следующее сообщение об ошибке:

Microsoft VBScript ошибка времени выполнения '800a01a8'

Требуется объект

/романс/admin_youtube_detail.asp, строка 31

который: Dim ti tle: title = entry.SelectSingleNode («a: title»). Текст

Может ли кто-нибудь помочь?

XML Feed:

<?xml version='1.0' encoding='UTF-8'?> 
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:yt='http://gdata.youtube.com/schemas/2007'> 
    <id>http://gdata.youtube.com/feeds/api/videos/d8nxjUlbKJA</id> 
    <published>2009-08-01T00:07:02.000Z</published> 
    <updated>2009-08-31T22:21:46.000Z</updated> 
    <category scheme='http://schemas.google.com/g/2005#kind' term='http://gdata.youtube.com/schemas/2007#video'/> 
    <category scheme='http://gdata.youtube.com/schemas/2007/categories.cat' term='Education' label='Education'/> 
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='ToditoFree'/> 
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='freebies'/> 
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='gelattina'/> 
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='gelattinatv'/> 
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='free'/> 
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='stuff'/> 
    <title type='text'>ToditoFree: Gratis!!</title> 
    <content type='text'/> 
    <link rel='alternate' type='text/html' href='http://www.youtube.com/watch?v=d8nxjUlbKJA&amp;feature=youtube_gdata'/> 
    <link rel='http://gdata.youtube.com/schemas/2007#video.responses' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/d8nxjUlbKJA/responses'/> 
    <link rel='http://gdata.youtube.com/schemas/2007#video.related' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/d8nxjUlbKJA/related'/> 
    <link rel='http://gdata.youtube.com/schemas/2007#mobile' type='text/html' href='http://m.youtube.com/details?v=d8nxjUlbKJA'/> 
    <link rel='self' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/d8nxjUlbKJA'/> 
    <author> 
    <name>gelattinatv</name> 
    <uri>http://gdata.youtube.com/feeds/api/users/gelattinatv</uri> 
    </author> 
    <gd:comments> 
    <gd:feedLink href='http://gdata.youtube.com/feeds/api/videos/d8nxjUlbKJA/comments' countHint='0'/> 
    </gd:comments> 
    <media:group> 
    <media:category label='Education' scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>Education</media:category> 
    <media:content url='http://www.youtube.com/v/d8nxjUlbKJA?f=videos&amp;app=youtube_gdata' type='application/x-shockwave-flash' medium='video' isDefault='true' expression='full' duration='45' yt:format='5'/> 
    <media:content url='rtsp://rtsp2.youtube.com/CiILENy73wIaGQmQKFtJjfHJdxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp' type='video/3gpp' medium='video' expression='full' duration='45' yt:format='1'/> 
    <media:content url='rtsp://rtsp2.youtube.com/CiILENy73wIaGQmQKFtJjfHJdxMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp' type='video/3gpp' medium='video' expression='full' duration='45' yt:format='6'/> 
    <media:description type='plain'/> 
    <media:keywords>ToditoFree, freebies, gelattina, gelattinatv, free, stuff</media:keywords> 
    <media:player url='http://www.youtube.com/watch?v=d8nxjUlbKJA&amp;feature=youtube_gdata'/> 
    <media:thumbnail url='http://i.ytimg.com/vi/d8nxjUlbKJA/2.jpg' height='90' width='120' time='00:00:22.500'/> 
    <media:thumbnail url='http://i.ytimg.com/vi/d8nxjUlbKJA/1.jpg' height='90' width='120' time='00:00:11.250'/> 
    <media:thumbnail url='http://i.ytimg.com/vi/d8nxjUlbKJA/3.jpg' height='90' width='120' time='00:00:33.750'/> 
    <media:thumbnail url='http://i.ytimg.com/vi/d8nxjUlbKJA/0.jpg' height='240' width='320' time='00:00:22.500'/> 
    <media:title type='plain'>ToditoFree: Gratis!!</media:title> 
    <yt:duration seconds='45'/> 
    </media:group> 
    <yt:statistics favoriteCount='0' viewCount='46'/> 
</entry> 

ответ

1

Ваши переменные все кажется перепутались: -

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 

Я подозреваю, что вы на самом деле предназначены: -

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

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

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

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

xhr.Open "GET", feedUrl, False 

Ключ здесь именования , Назовите свои переменные хорошо, и ошибки легче увидеть. Однако, говорит, что полученный URL «http://gdata.youtube.com/feeds/api/videos/d8nxjUlbKJA» возвращает 404.

(кстати все это чувствует себя очень хорошо знакомы, есть я имел дело с этим, прежде чем где-то на SO?)

Редактировать

истинная проблема с этим конкретным фидом заключается в том, что заголовок Content-Type указывает содержимое, которое должно быть: «application/atom + xml». К сожалению, старый объект MSXML3 ServerXMLHTTP не распознает этот тип содержимого как XML и, следовательно, не заполняет объект ResponseXML.

У вас есть два варианта: сначала, если у вас есть контроль над сервером или вы знаете, что MSXML6 установлен, вы можете это сделать. Измените ProgID в CreateObject на «MSXML2.ServerXMLHTTP.6.0» (вы также можете удалить параметр SelectionLanguage, поскольку XPATH по умолчанию используется в MSXML6).

Другой вариант заключается в загрузке ResponseStream в экземпляр DOM самостоятельно: -

Вместо: -

Dim xml : Set xml = xhr.ResponseXML 

использования: -

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

Да, но я новичок в SO и не мог видеть, где я мог бы PM или добавить ответ на вопрос.Я изменил код на один вы предложили, но все-таки получить: ошибка времени выполнения Microsoft VBScript «800a01a8» Требуется объект admin_youtube_detail.asp, строка 29 который: Dim название: название = entry.SelectSingleNode («a: title»). Текст – 2009-10-13 14:26:50

+0

Это помогло бы, если бы я сам видел фид, но я просто получил 404. Однако, если ваш код получает 404, вы не достигнете строки, которая является ошибкой. Так что либо у меня неправильный URL-адрес, либо ваш код по-прежнему не так, как я считаю. – AnthonyWJones

+0

Отправленный XML-канал, который я получил, выше. – 2009-10-13 15:27:41

0

Я пытался использовать MSXML2.ServerXMLHTTP.3.0 на моем сервере.
У меня было слишком много проблем, поэтому теперь я использую Microsoft.XMLHTTP, и все работает нормально.

Больше никаких ошибок.

Смежные вопросы