Last active
February 5, 2018 06:59
-
-
Save billy3321/0d20b186f2649a0e9f0d8f3c8546f0f9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# usage: ./rwd-tester.rb FILE | |
# the file is a url list | |
# install mechanize by `gem install mechanize`. | |
# require 'rubygems' | |
require 'mechanize' | |
def get_page(url) | |
agent = Mechanize.new | |
agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE | |
page = agent.get(url) | |
return page | |
end | |
def get_css_urls(page) | |
result = [] | |
page.css('link').each do |link| | |
href = link.attr('href').to_s | |
if href.match(/\.css$/) | |
href = page.mech.resolve(href).to_s | |
result << href | |
end | |
end | |
return result | |
end | |
def get_css_url(url) | |
css = "" | |
begin | |
page = get_page(url) | |
css = page.body.to_s | |
end | |
return css | |
end | |
def parse_css(css) | |
css = css.gsub(/\/\*.*\*\//, '') | |
result = false | |
if css.match(/@media/) | |
result = true | |
end | |
return result | |
end | |
def parse_css_in_html(page) | |
result = false | |
page.css('style').each do |style| | |
css = style.text | |
result = parse_css(css) | |
if result == true | |
break | |
end | |
end | |
return result | |
end | |
def find_device_width(page) | |
viewport = page.at('meta[name="viewport"]') | |
return false unless viewport | |
content = viewport.attr('content').to_s | |
if content.match(/width=device-width/) | |
return true | |
else | |
return false | |
end | |
end | |
def detect_rwd(url) | |
begin | |
page = get_page(url) | |
device_width = find_device_width(page) | |
media = parse_css_in_html(page) | |
if not media | |
css_urls = get_css_urls(page) | |
css_urls.each do |css_url| | |
css = get_css_url(css_url) | |
if parse_css(css) | |
media = true | |
break | |
end | |
end | |
end | |
puts "#{url},#{device_width},#{media},\n" | |
rescue => error | |
error_line = nil | |
error.backtrace.each do |backtrace| | |
if backtrace.match(/rwd-tester\.rb/) | |
error_line = backtrace | |
break | |
end | |
end | |
error = "#{error_line} #{error.to_s}" | |
puts "#{url},n/a,n/a,\"#{error}\"\n" | |
end | |
end | |
def main | |
puts "url,viewport,media,error\n" | |
urls = File.readlines(ARGV[0]).map {|i| i.strip } | |
urls.each do |url| | |
detect_rwd(url) | |
end | |
end | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment