Вы использовали синтаксис, указывающий, что вы пытаетесь извлечь атрибуты из элементов <param>
, но на этой странице нет такой разметки. Существует множество JavaScript-присваиваний свойствам объекта flashvar
. Предполагая, что это то, что вы хотите, вам не нужен 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";
.