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'

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

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

Который является: Dim title: 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>
13.10.2009 13:29:53
2 ОТВЕТА
РЕШЕНИЕ

Ваши переменные кажутся испорченными: -

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
1
13.10.2009 16:37:16
Да, у вас есть, но я новичок в SO и не мог видеть, где я могу PM или добавить ответ на вопрос. Я изменил код на тот, который вы предложили, но по-прежнему получаете: Ошибка времени выполнения Microsoft VBScript '800a01a8' Требуется объект admin_youtube_detail.asp, строка 29: Dim title: title = entry.SelectSingleNode ("a: title"). Текст
user189072 13.10.2009 14:26:50
Было бы полезно, если бы я сам мог видеть канал, но я просто получил 404. Однако, если ваш код получает 404, вы бы не достигли строки, в которой происходит ошибка. Так что либо у меня неверный URL, либо ваш код все еще не такой, как я думаю.
AnthonyWJones 13.10.2009 14:52:03
Размещенный выше XML-канал, который я получаю.
user189072 13.10.2009 15:27:41
Отредактировал мой ответ с помощью решения
AnthonyWJones 14.10.2009 06:39:28
Спасибо Энтони, что сделал эту работу! Как только я изменил его на MSXML2.ServerXMLHTTP.6.0, он заработал как сон! Еще один вопрос: как мне получить доступ к таким вещам, как медиа: данные миниатюр, так как есть несколько записей? Еще раз спасибо.
user189072 14.10.2009 11:22:49

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

Больше ошибок нет.

0
26.12.2012 20:33:00