|
require "faraday" |
|
require "csv" |
|
|
|
API_KEY = ENV["API_KEY"] |
|
API_ENDPOINT = "https://www.googleapis.com" |
|
API_PATH = "/pagespeedonline/v5/runPagespeed" |
|
|
|
file = File.read("input.txt") |
|
urls = file.split("\n") |
|
|
|
conn = Faraday.new( |
|
url: API_ENDPOINT, |
|
params: { |
|
key: API_KEY, |
|
locale: "ja", |
|
strategy: "mobile", |
|
}, |
|
) |
|
conn.options.timeout = 120 |
|
|
|
headers = ["url", "TTFB", "FCP", "LCP", "CLS", "TBT", "TTFB field", "FCP field", "LCP field", "CLS field", "FID field", "INP field"] |
|
|
|
CSV.open("output.csv", "wb") do |csv| |
|
csv << headers |
|
urls.each do |url| |
|
puts "Getting PSI results for #{url} ..." |
|
|
|
begin |
|
res = conn.get(API_PATH, { url: url }) |
|
rescue Net::ReadTimeout, Faraday::TimeoutError |
|
puts "Net::ReadTimeout for #{url}, retrying" |
|
retry |
|
end |
|
|
|
if res.status != 200 |
|
csv << [url] + Array.new(headers.size - 1) { 0 } |
|
next |
|
end |
|
|
|
json = JSON.parse(res.body) |
|
lighthouse = json["lighthouseResult"]["audits"] |
|
field = json["originLoadingExperience"] |
|
|
|
csv << [ |
|
url, |
|
lighthouse["server-response-time"]["numericValue"], |
|
lighthouse["first-contentful-paint"]["numericValue"], |
|
lighthouse["largest-contentful-paint"]["numericValue"], |
|
lighthouse["cumulative-layout-shift"]["numericValue"], |
|
lighthouse["total-blocking-time"]["numericValue"], |
|
|
|
field ? field["metrics"]["EXPERIMENTAL_TIME_TO_FIRST_BYTE"]&.send(:[], "category") : 0, |
|
field ? field["metrics"]["FIRST_CONTENTFUL_PAINT_MS"]&.send(:[], "category") : 0, |
|
field ? field["metrics"]["LARGEST_CONTENTFUL_PAINT_MS"]&.send(:[], "category") : 0, |
|
field ? field["metrics"]["CUMULATIVE_LAYOUT_SHIFT_SCORE"]&.send(:[], "category") : 0, |
|
field ? field["metrics"]["FIRST_INPUT_DELAY_MS"]&.send(:[], "category") : 0, |
|
field ? field["metrics"]["INTERACTION_TO_NEXT_PAINT"]&.send(:[], "category") : 0, |
|
] |
|
|
|
puts "Finished" |
|
end |
|
end |