アクセスランキング集計スクリプトのGA4対応

GA4対応をサボっていたら8月17日でスクリプトが動作しなくなっていた。

Ruby で Google Analytics 4 (GA4) のデータを API で取得する方法 - 約束の地 や Google Analyticsの新バージョン!「Google Analytics 4(GA4)」のレポートデータをRubyで取得する - bagelee(ベーグリー) を参考に対応実施。

garbgoogle-api-ruby-client同 0.9google-analytics-data-v1beta と変遷しているが今回も最小限の修正で済ませる。

sudo gem install google-analytics-data-v1beta

rubyは2.6.5だったが2.7.8に上げた。

require 'google/analytics/data/v1beta'

def get_ga4(startdate,enddate,limitnum)

  ENV['ANALYTICS_DATA_CREDENTIALS'] = 'credentials.json'
  client = Google::Analytics::Data::V1beta::AnalyticsData::Client.new

  property = 'properties/XXXXXXXX'
  dimensions = [
    Google::Analytics::Data::V1beta::Dimension.new(name: 'pagePath'),
  ]
  metrics = [
    Google::Analytics::Data::V1beta::Metric.new(name: 'screenPageViews'),
  ]
  date_ranges = [
    Google::Analytics::Data::V1beta::DateRange.new(start_date: startdate.strftime('%Y-%m-%d'), end_date: enddate.strftime('%Y-%m-%d')),
  ]

  request = Google::Analytics::Data::V1beta::RunReportRequest.new(
    property: property ,
    dimensions: dimensions,
    metrics: metrics,
    dimension_filter: {:filter=>{:field_name=>"pagePath", :string_filter=>{ :match_type=> "BEGINS_WITH", :value=>"/wiki/"}}},
    limit: limitnum.to_i,
    date_ranges: date_ranges
  )

  response = client.run_report(request)

  result=Hash.new

  response.rows.each{|row|
    row.dimension_values.each_with_index{|d,i|
      result[CGI.unescape(d.value)]= row.metric_values[i].value
    }
  }

  result

end

#r=get_ga4(Date.today-7, Date.today-1, 30)
#r.each{|i,v|
#  print i,":",v,"\n"
#}