class PagespeedHelper
Constants
- Pagespeedonline
Public Class Methods
new(key, limit=32, debug=false)
click to toggle source
# File lib/pagespeedhelper.rb, line 9 def initialize(key, limit=32, debug=false) @psservice = Pagespeedonline::PagespeedonlineService.new @psservice.key = key @wait_limit = limit if debug Google::Apis.logger = Logger.new(STDERR) Google::Apis.logger.level = Logger::DEBUG end end
parse(data)
click to toggle source
# File lib/pagespeedhelper.rb, line 41 def self.parse(data) results = Array.new data.each do |result| if !result.is_a?(Hash) result_hash = { "url" => result.id, "score" => result.rule_groups["SPEED"].score, "stats" => Hash[result.page_stats.to_h.map{ |k, v| [k.to_s, { "name" => k.to_s.capitalize.gsub!('_', ' '), "value" => v } ] }], "results" => build_rule_hash(result.formatted_results.rule_results) } else result_hash = result end results.push(result_hash) end results end
Private Class Methods
build_rule_hash(rule_res)
click to toggle source
# File lib/pagespeedhelper.rb, line 64 def self.build_rule_hash(rule_res) rule_hash = Hash.new rule_res.each do |rule, info| rule_hash[rule] = { "name" => info.localized_rule_name, "impact" => info.rule_impact.round(2), "summary" => build_summary_string!(info.summary) } end rule_hash end
build_summary_string!(summary)
click to toggle source
# File lib/pagespeedhelper.rb, line 78 def self.build_summary_string!(summary) return nil if summary.nil? if summary.to_h.key?(:args) summary.args.each do |arg| summary.format.sub!(arg.key, arg.value) summary.format.gsub!(/\{{2}|\}{2}/,'') end end summary.format.split('.')[0] end
Public Instance Methods
query(urls, strategy="desktop", secure=false) { |results| ... }
click to toggle source
# File lib/pagespeedhelper.rb, line 20 def query(urls, strategy="desktop", secure=false) @wait_time = 1 data = Array.new urls = [urls] if !urls.is_a?(Array) urls = urls.map { |url| add_protocol_if_absent(url, secure) } urls.each_slice(20).to_a.each do |url_list| begin results = send_request(url_list, strategy) end while rate_error?(results) block_given? ? yield(results) : data.concat(results) sleep(3) end data if !block_given? end
Private Instance Methods
add_protocol_if_absent(url, secure=false)
click to toggle source
# File lib/pagespeedhelper.rb, line 127 def add_protocol_if_absent(url, secure=false) if !url.include? "http://" and !url.include? "https://" secure ? "https://" + url : "http://" + url else url end end
rate_error?(data)
click to toggle source
# File lib/pagespeedhelper.rb, line 96 def rate_error?(data) return false if @wait_time > @wait_limit data.each do |d| if d.is_a?(Hash) if d["error"].include?("rateLimitExceeded") or d["error"].include?("userRateLimitExceeded") sleep(@wait_time) @wait_time <= @wait_limit ? @wait_time *= 2 : @wait_limit return true end end end return false end
send_request(urls, strategy="desktop")
click to toggle source
# File lib/pagespeedhelper.rb, line 110 def send_request(urls, strategy="desktop") data = Array.new @psservice.batch do |ps| urls.each do |url| begin ps.run_pagespeed(url, strategy: strategy) do |result, err| err.nil? ? data.push(result) : data.push({ "url" => url, "error" => err.to_s }) end rescue Google::Apis::ServerError => e puts '[PAGESPEEDHELPER]: ' + e end end end data end