This is a script in Ruby, that I wrote, which use filestube.com to search files on rapidshare (It don’t use filestube API — it just fetch and parse html).
#!/usr/bin/ruby
require 'net/http'
require 'uri'
require 'optparse'
require 'rexml/document'
def get(url, data=nil)
url = URI.parse(url)
http = Net::HTTP.new(url.host)
if data
data = data.map{|k,v| "#{k}=#{url_escape(v)}"}.reduce {|a,b|
"#{a}&#{b}"
}
path = url.path + '?' + data
else
path = url.path
end
res = http.get(path, {'Cookie' => 'usr_timeoffset=0'})
res.body
end
def url_escape(o)
if o.class == ''.class
o.gsub(/([^ a-zA-Z0-9_.-]+)/n) {
'%' + $1.unpack('H2' * $1.size).join('%').upcase
}.tr(' ', '+')
else
return o
end
end
def filestube_urls(query, page=nil, sort=nil, size=nil)
url = "http://www.filestube.com/search.html"
data = {
'q' => query,
'select' => 'All',
'hosting' => 1
}
if size
data['size'] = size
end
if sort
data['sort'] = sort
end
regex = /<a href="([^"]*)" class="resultsLink">.*?<\/a>/
if page
data['page'] = page
end
get(url, data).scan(regex).map {|i| i[0]}
end
def extract_urls(page)
if page =~ /<pre id="copy_paste_links"[^>]*>(.*)<\/pre>/m
$1.strip.split("\n").each{|url|
yield url
}
end
end
def rapidshare_urls(query, num=nil, sort=nil, size=nil)
if num
if num / 10 > 1
result = []
(2..num/10+1).each {|page|
filestube_urls(query, page, sort, size).each {|url|
extract_urls(get(url)) {|url|
yield url
}
}
}
else
filestube_urls(query, nil, sort, size)[0..num-1].each {|url|
extract_urls(get(url)) {|url|
yield url
}
}
end
else
filestube_urls(query, nil, sort, size).each {|page|
extract_urls(get(page)) {|url|
yield url
}
}
end
end
def usage()
puts "usage:"
puts "rapidsearch.rb [-n number] [-o order] [-s size] [-h]"
puts
puts "-n number of url packages"
puts "-h this help screen"
puts "-s size:"
puts " 1 - <20MB"
puts " 2 - 20MB - 200MB"
puts " 3 - 200MB - 1GB"
puts " 4 - >1GB"
puts "-o sort by (default relevance):"
puts " pd - popularity"
puts " dd - date"
puts " sd - size"
end
params = ARGV.getopts('n:o:s:h')
if params['h']
usage
exit
elsif params['o'] and !["pd", "dd", "sd"].include?(params['o'])
puts "Bad parameter -o #{params['o']}"
usage
exit
elsif params['s'] and ![1,2,3,4].include?(params['s'].to_i)
puts "Bad size #{params['s']}"
usage
end
query = ARGV.join(' ')
begin
if params['n']
rapidshare_urls(query, params['n'].to_i, params['o'], params['s']) {|url|
puts url
$stdout.flush
}
else
rapidshare_urls(query, nil, params['o'], params['s']) {|url|
puts url
$stdout.flush
}
end
rescue Interrupt, Errno::EINTR
exit(0)
end
You can use this like this:
rapidsearch.rb -n 10 Matrix
this will display urls for 10 packages containgin word “Matrix”.
-o
option is for size of packages (1 – 4)
-s
option is for sorting it must be one of (dd – by data, pd – by popularity, sd – by size)
You can download this script from here.
You can combine this script with for validating rapidshare links.
rapidsearch.rb -n 5 -s 3 Matrix | rapidtest.rb -f -