Ruby: скрипт не будет корректно захватывать URL-адрес с YouTube

#ruby #youtube #bots

#ruby #YouTube #боты

Вопрос:

Я нашел этот скрипт на pastebin, который является IRC-ботом, который найдет для вас видео на YouTube. Я вообще не трогал его (отключите настройки канала), он работает хорошо, однако он не будет захватывать URL-адрес видео, в котором был выполнен поиск. Этот код не мой! Я просто хотел бы заставить его работать, так как это было бы весьма полезно!

 #!/usr/bin/env ruby

require 'rubygems'
require 'cinch'
require 'nokogiri'
require 'open-uri'
require 'cgi'

bot = Cinch::Bot.new do
  configure do |c|
    c.server = "irc.freenode.net"
    c.nick = "YouTubeBot"
    c.channels = ["#test"]
  end

  helpers do

    #Grabs the first result and returns the TITLE,LINK,DESCRIPTION

    def youtube(query)

      doc = Nokogiri::HTML(open("http://www.youtube.com/results?q=#{CGI.escape(query)}"))

      result = doc.css('div#search-results div.result-item-main-content')[0]

      title = result.at('h3').text
      link = "www.youtube.com" "#{result.at('a')[:href]}"
      desc = result.at('p.description').text

    rescue
        "No results found"
    else
      CGI.unescape_html "#{title} - #{desc} - #{link}"

    end
  end

  on :channel, /^!youtube (. )/ do |m, query|
      m.reply youtube(query)
  end

  on :channel, "polkabot quit" do |m|
    m.channel.part("bye")
  end
end

bot.start
  

В настоящее время, если я использую команду

!youtube asdf

Я получаю это возвращенное:

19:25 < YouTubeBot> asdfmovie — Мировой магазин www.cafepress.com … asdfmovie cakebomb tomska epikkufeiru asdf фильм … томска … [Детское хихиканье] Мужчина: У тебя нос! [Детка… — www.youtube.com#

Как вы можете видеть, URL-адрес просто www.youtube.com # не URL-адрес видео.

Большое спасибо!

Ответ №1:

Это проблема xpath. Похоже, что третий «a» имеет нужный вам href, так что попробуйте:

 link = "www.youtube.com#{result.css('a')[2][:href]}"