Ruby:Script不会正确地从youtube获取URL

时间:2011-10-13 18:27:12

标签: ruby youtube bots

我在pastebin上找到了这个脚本,这是一个可以为你找到youtube视频的IRC机器人。我根本没有触及它(禁止频道设置),它运行良好,但它不会抓取已搜索视频的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 movie ... tomska ... [Baby Giggling]男人:有你的鼻子! [宝贝......                        - www.youtube.com#

正如您所看到的,网址只是www.youtube.com#而不是视频的网址。

非常感谢!

1 个答案:

答案 0 :(得分:1)

这是一个xpath问题。看起来第三个'a'有你想要的href,所以尝试:

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