【问题标题】:Build array of flashvars using hpricot使用 hpricot 构建 flashvars 数组
【发布时间】:2011-04-21 19:31:26
【问题描述】:

我之前使用 hpricot 从一些 HTML 标记内的网站中获取内容,但是我正在尝试构建一个包含此页面上的所有 flashvar 的数组 http://view-source:http://megavideo.com/?v=014U2YO9

require 'hpricot'
require 'open-uri'

flashvars = Array.new
doc = Hpricot(open("http://megavideo.com/?v=014U2YO9"))

for flashvars in (doc/"/param[@name='flashvars']") do
  flashvars << flashvar
end

我一直在尝试使用上面的代码 sn-p,希望我在正确的轨道上,有人可以进一步帮助我吗?

谢谢

【问题讨论】:

    标签: ruby arrays hpricot


    【解决方案1】:

    您使用的语法表明您正在尝试从&lt;param&gt; 元素中获取属性,但该页面上不存在此类标记。 flashvar 对象的属性有大量的 JavaScript 赋值。假设这些是你想要的,你不需要 Hpricot,只需要 JS 的正则表达式。这似乎有效:

    require 'open-uri'
    html = open("http://megavideo.com/?v=014U2YO9").read
    
    flashvars = Hash[ html.scan( /flashvars\.(\w+)\s*=\s*["']?(.+?)["']?;/ ) ]
    
    require 'pp' # Just for pretty output here
    pp flashvars
    
    #=> {"logintxt"=>"Login",
    #=>  "registertxt"=>"Register",
    #=>  "searchtxt"=>"Search videos",
    #=>  "searchrestxt"=>"\"",
    #=>  "useSystemFont"=>"0",
    #=>  "size"=>"17",
    #=>  "loginAct"=>"?c=login%26next%3Dv%253D014U2YO9",
    #=>  "registerAct"=>"?c=signup",
    #=>  "userAct"=>"?c=account",
    #=>  "signoutAct"=>"javascript:signout()",
    #=>  "myvideostxt"=>"My Videos",
    #=>  "videosAct"=>"?c=myvideos",
    #=>  "added"=>"2011-04-14",
    #=>  "username"=>"beenerkeekee19952",
    #=>  etc.
    

    请注意,这会将所有值保留为 Ruby 中的字符串,即使是 JavaScript 中的数字值。由于它去除了 JavaScript 字符串的前导/尾随引号,因此您无法区分 flashvars.foo = 42;flashvars.bar = "42";

    【讨论】:

    • 对不起 Phrogz 那是我的错误,我再次申请了,再次感谢代码!
    猜你喜欢
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2013-07-26
    • 1970-01-01
    相关资源
    最近更新 更多