Ruby: Скрипт не будет правильно захватывать URL с YouTube - PullRequest
0 голосов
/ 13 октября 2011

Я нашел этот скрипт на 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 asdfmovie - всемирный магазин![Детка ... - www.youtube.com #

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

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

1 Ответ

1 голос
/ 14 октября 2011

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

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