Hiểu điều khách hang muốn, bán thứ khách hàng cần là điều kiện đầu tiên khi bán hàng. Điều đó đặc biệt đúng với ngành thương mại điện tử nói chung. Tiếp cận khách hàng từ xa qua các website là cách tốt nhất, nhanh nhất và rẻ nhất để quảng cáo sản phẩm. Việc tổng hợp phân tích xây dựng phác đồ hành vi tiêu dùng khách hàng có thể hiểu những gì ảnh hưởng đến quyết định mua hàng của người tiêu dùng. Bằng cách hiểu làm thế nào người tiêu dùng quyết định về một snarn phẩm, họ có thể lấp đầy khoảng trống trên thị trường và xác định các sản phẩm cần thiết và các sản phẩm đã lỗi thời. Nghiên cứu hành vi của người tiêu dùng là bí mật quan trọng để tiếp cận và thu hút khách hàng giúp các nhà marketing quyết định cách trình bày sản phẩm của họ theo cách tạo ra tác động tối đa đến người tiêu dùng.
Google Analytics Reporting API
GA V4 là một trong những nền tảng phân tích web phổ biến nhất, cho phép thu nhập dữ liệu tự động về người dùng truy cập trang web. Nó là dịch vụ miễn phí của Google cho phép tạo ra các bảng thống kê chi tiết về khách hàng, cung cấp một số liệu ấn tượng ( lượt xem trang, nước xuất xứ, thời giant rung bình trên trang,v.v…), xây dựng bảng điều khiển tùy chỉnh để hiển thị dữ kiệu Google Analytics, tự động hóa các nhiệm vụ báo cáo phức tạp để tiết kiệm thời gian, tích hợp dữ kiệu Google Analytics của khách hàng với các ứng dụng kinh doanh khác.
Tích hợp báo cáo API vào ứng dụng Ruby on Rails
Bước 1 Tạo tài khoản dịch vụ theo hướng dẫn phần Enable the API
https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-py
Bước 2 Thêm tài khoản dịch vụ vào tài khoản GG Analytics
Tài khoản dịch vụ sau khi tạo sẽ có email riêng
Đăng nhập tài khoản gg analystics và thêm quyền cho tài khoản https://support.google.com/analytics/answer/1009702
Bước 3 Cài đặt thư viện
- client
gem 'google-api-client', '~> 0.11', require: ‘google/apis/analyticsreporting_v4’
- Google Auth
gem install googleauth
Sử dụng google analytic api để thông kê lưu lượng người dùng
Trước khi bắt đầu tích hợp, bạn cần đăng nhập vào google console developer, enable google analytic API và google analytic reporting API, tạo project, service account rùi add nó đến tài khoản google analytic bên trên. Hướng dẫn theo link:
https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-py
Mặc định, các API của google sử dụng authenticate oauth2 nên chúng ta sẽ thực hiện một số bước sau để lấy access_token:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <span class="token comment">#lib/tasks/analytics.rake</span> <span class="token keyword">require</span> <span class="token string">'google/apis/analyticsreporting_v4'</span> <span class="token keyword">require</span> <span class="token string">'google/api_client/auth/key_utils'</span> namespace <span class="token symbol">:analytics</span> <span class="token keyword">do</span> desc <span class="token string">'get popular posts from google analytics'</span> task popular_posts<span class="token punctuation">:</span> <span class="token symbol">:environment</span> <span class="token keyword">do</span> keyfile <span class="token operator">=</span> <span class="token constant">Rails</span><span class="token punctuation">.</span>root<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">'google_analytics.p12'</span><span class="token punctuation">)</span> analytics <span class="token operator">=</span> <span class="token constant">Google</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">Apis</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">AnalyticsreportingV4</span> client <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">AnalyticsReportingService</span><span class="token punctuation">.</span><span class="token keyword">new</span> <span class="token class-name">client<span class="token punctuation">.</span>authorization</span> <span class="token operator">=</span> <span class="token constant">Signet</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">OAuth2</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">Client</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span> token_credential_uri<span class="token punctuation">:</span> <span class="token string">'[https://accounts.google.com/o/oauth2/token](https://accounts.google.com/o/oauth2/token)'</span><span class="token punctuation">,</span> audience<span class="token punctuation">:</span> <span class="token string">'[https://accounts.google.com/o/oauth2/token](https://accounts.google.com/o/oauth2/token)'</span><span class="token punctuation">,</span> scope<span class="token punctuation">:</span> <span class="token string">'[https://www.googleapis.com/auth/analytics.readonly](https://www.googleapis.com/auth/analytics.readonly)'</span><span class="token punctuation">,</span> issuer<span class="token punctuation">:</span> <span class="token constant">ENV</span><span class="token punctuation">[</span><span class="token string">'GA_ISSUER'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> signing_key<span class="token punctuation">:</span> <span class="token constant">Google</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">APIClient</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">KeyUtils</span><span class="token punctuation">.</span><span class="token function">load_from_pkcs12</span><span class="token punctuation">(</span>keyfile<span class="token punctuation">,</span> <span class="token constant">ENV</span><span class="token punctuation">[</span><span class="token string">'GA_KEY_SECRET'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> client<span class="token punctuation">.</span>authorization<span class="token punctuation">.</span>fetch_access_token<span class="token operator">!</span> <span class="token keyword">end</span> <span class="token keyword">end</span> |
Sau đó, dùng access_token nhận được để get thống kê lưu lượng trang web qua API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | view_id <span class="token operator">=</span> <span class="token constant">ENV</span><span class="token punctuation">[</span><span class="token string">'GA_VIEW_ID'</span><span class="token punctuation">]</span> metric <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">Metric</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span>expression<span class="token punctuation">:</span> <span class="token string">'ga:pageviews'</span><span class="token punctuation">,</span> <span class="token keyword">alias</span><span class="token punctuation">:</span> <span class="token string">'pageviews'</span><span class="token punctuation">)</span> dimension <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">Dimension</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span>name<span class="token punctuation">:</span> <span class="token string">'ga:pagePath'</span><span class="token punctuation">)</span> date_range <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">DateRange</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span>start_date<span class="token punctuation">:</span> <span class="token string">'7DaysAgo'</span><span class="token punctuation">,</span> end_date<span class="token punctuation">:</span> <span class="token string">'today'</span><span class="token punctuation">)</span> order_by <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">OrderBy</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span>field_name<span class="token punctuation">:</span> <span class="token string">'ga:pageviews'</span><span class="token punctuation">,</span> sort_order<span class="token punctuation">:</span> <span class="token string">'DESCENDING'</span><span class="token punctuation">)</span> request <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">GetReportsRequest</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span> report_requests<span class="token punctuation">:</span> <span class="token punctuation">[</span>analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ReportRequest</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span> view_id<span class="token punctuation">:</span> view_id<span class="token punctuation">,</span> metrics<span class="token punctuation">:</span> <span class="token punctuation">[</span>metric<span class="token punctuation">]</span><span class="token punctuation">,</span> dimensions<span class="token punctuation">:</span> <span class="token punctuation">[</span>dimension<span class="token punctuation">]</span><span class="token punctuation">,</span> date_ranges<span class="token punctuation">:</span> <span class="token punctuation">[</span>date_range<span class="token punctuation">]</span><span class="token punctuation">,</span> order_bys<span class="token punctuation">:</span> <span class="token punctuation">[</span>order_by<span class="token punctuation">]</span> <span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token punctuation">)</span> response <span class="token operator">=</span> client<span class="token punctuation">.</span><span class="token function">batch_get_reports</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span> request <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">GetReportsRequest</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span> report_requests<span class="token punctuation">:</span> <span class="token punctuation">[</span>analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ReportRequest</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span> view_id<span class="token punctuation">:</span> view_id<span class="token punctuation">,</span> metrics<span class="token punctuation">:</span> <span class="token punctuation">[</span>metric<span class="token punctuation">]</span><span class="token punctuation">,</span> dimensions<span class="token punctuation">:</span> <span class="token punctuation">[</span>dimension<span class="token punctuation">]</span><span class="token punctuation">,</span> date_ranges<span class="token punctuation">:</span> <span class="token punctuation">[</span>date_range<span class="token punctuation">]</span><span class="token punctuation">,</span> order_bys<span class="token punctuation">:</span> <span class="token punctuation">[</span>order_by<span class="token punctuation">]</span> <span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token punctuation">)</span> response <span class="token operator">=</span> client<span class="token punctuation">.</span><span class="token function">batch_get_reports</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span> data <span class="token operator">=</span> response<span class="token punctuation">.</span>reports<span class="token punctuation">.</span>first<span class="token punctuation">.</span>data |
Dữ liệu response trả về sẽ có dạng như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <span class="token operator">=</span><span class="token operator">></span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportData:0x00007ffab8642ef8</span> <span class="token variable">@maximums</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab8641fd0 @values=["67"]>],</span> <span class="token variable">@minimums</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab8640ef0 @values=["1"]>],</span> <span class="token variable">@row_count</span><span class="token operator">=</span><span class="token number">31</span><span class="token punctuation">,</span> <span class="token variable">@rows</span><span class="token operator">=</span> <span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffabab77930</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/posts/rails-blog"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span> <span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffabab75ea0 @values=["67"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffab864bf30</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span> <span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab864b5d0 @values=["30"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffab864acc0</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/posts/23-years-old-blog"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span> <span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab864a360 @values=["12"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffab8649a50</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/posts/free-domain-and-https-heroku"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span> <span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab86490f0 @values=["11"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffab86487e0</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/posts/make-markdown-editor"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffabab6fb40 @values=["8"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffabab6c5d0</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/posts/axios-token-configure"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab8653708 @values=["7"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffab8652df8</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/about"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab8652498 @values=["6"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffab8651b88</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/categories/Life"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab8651228 @values=["4"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffab8650918</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/tags"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffabab67f08 @values=["4"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffabab66568</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/categories/tech"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab865ba48 @values=["3"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffab865b138</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/posts/boiler-room-home-theater"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab865a7d8 @values=["3"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffab8659ec8</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/categories/Gadgets"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">@metrics</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token comment">#<Google::Apis::AnalyticsreportingV4::DateRangeValues:0x00007ffab8659568 @values=["2"]>]>,</span> <span class="token comment">#<Google::Apis::AnalyticsreportingV4::ReportRow:0x00007ffab8658c58</span> <span class="token variable">@dimensions</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"/categories/Music"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> |
Sau đó, extract các dữ liệu cần thiết
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | num <span class="token operator">=</span> <span class="token number">0</span> data<span class="token punctuation">.</span>rows<span class="token punctuation">.</span><span class="token keyword">each</span> <span class="token keyword">do</span> <span class="token operator">|</span>row<span class="token operator">|</span> <span class="token keyword">next</span> <span class="token keyword">unless</span> row<span class="token punctuation">.</span>dimensions<span class="token punctuation">.</span>to_s<span class="token punctuation">.</span>include<span class="token operator">?</span><span class="token punctuation">(</span><span class="token string">'/posts/'</span><span class="token punctuation">)</span> slug <span class="token operator">=</span> row<span class="token punctuation">.</span>dimensions<span class="token punctuation">.</span>first<span class="token punctuation">.</span>to_s<span class="token punctuation">[</span><span class="token number">7.</span><span class="token punctuation">.</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> post <span class="token operator">=</span> <span class="token constant">Post</span><span class="token punctuation">.</span><span class="token function">find_by</span><span class="token punctuation">(</span>slug<span class="token punctuation">:</span> slug<span class="token punctuation">)</span> <span class="token keyword">next</span> <span class="token keyword">if</span> post<span class="token punctuation">.</span><span class="token keyword">nil</span><span class="token operator">?</span> num <span class="token operator">+</span><span class="token operator">=</span> <span class="token number">1</span> popular_post <span class="token operator">=</span> <span class="token constant">PopularPost</span><span class="token punctuation">.</span><span class="token function">where</span><span class="token punctuation">(</span>rank<span class="token punctuation">:</span> num<span class="token punctuation">)</span><span class="token punctuation">.</span>first_or_create<span class="token operator">!</span> <span class="token keyword">do</span> <span class="token operator">|</span>new_popular_post<span class="token operator">|</span> new_popular_post<span class="token punctuation">.</span>rank <span class="token operator">=</span> num new_popular_post<span class="token punctuation">.</span>post <span class="token operator">=</span> post <span class="token keyword">end</span> popular_post<span class="token punctuation">.</span>update<span class="token operator">!</span><span class="token punctuation">(</span>post_id<span class="token punctuation">:</span> post<span class="token punctuation">.</span>id<span class="token punctuation">)</span> puts <span class="token string">"<span class="token interpolation"><span class="token delimiter tag">#{</span>num<span class="token delimiter tag">}</span></span>: <span class="token interpolation"><span class="token delimiter tag">#{</span>row<span class="token punctuation">.</span>metrics<span class="token punctuation">.</span>first<span class="token punctuation">.</span>values<span class="token punctuation">.</span>first<span class="token delimiter tag">}</span></span>views: <span class="token interpolation"><span class="token delimiter tag">#{</span>post<span class="token punctuation">.</span>title<span class="token delimiter tag">}</span></span>"</span> <span class="token keyword">break</span> <span class="token keyword">if</span> num <span class="token operator">==</span> <span class="token number">8</span> <span class="token keyword">end</span> <span class="token comment">#popular_post.rb</span> <span class="token comment">#t.integer "rank", null: false</span> <span class="token comment">#t.bigint "post_id" </span> <span class="token comment">#t.datetime "created_at", null: false</span> <span class="token comment">#t.datetime "updated_at", null: false</span> <span class="token comment">#t.index ["post_id"], name: "index_popular_posts_on_post_id"</span> <span class="token keyword">class</span> <span class="token class-name">PopularPost</span> <span class="token operator"><</span> <span class="token constant">ApplicationRecord</span> belongs_to <span class="token symbol">:post</span> <span class="token keyword">end</span> |
Thống kê in các thông tin về các post:
1 2 3 4 5 6 7 8 | <span class="token number">1</span><span class="token punctuation">:</span> <span class="token number">67</span>views<span class="token punctuation">:</span> <span class="token constant">Rails</span>でブログを作ってみた <span class="token number">2</span><span class="token punctuation">:</span> <span class="token number">12</span>views<span class="token punctuation">:</span> <span class="token number">23</span>歳はブログを少しずつでも書こうと思う <span class="token number">3</span><span class="token punctuation">:</span> <span class="token number">11</span>views<span class="token punctuation">:</span> 無料でドメイン割り当て、<span class="token constant">HTTPS</span>を実現。<span class="token constant">Heroku</span> <span class="token operator">+</span> <span class="token constant">Cloudflare</span> <span class="token number">4</span><span class="token punctuation">:</span> <span class="token number">8</span>views<span class="token punctuation">:</span> <span class="token number">3</span>分でマークダウンエディターを作る【<span class="token constant">UIkit</span>】 <span class="token number">5</span><span class="token punctuation">:</span> <span class="token number">7</span>views<span class="token punctuation">:</span> axiosのヘッダーにtokenを埋め込んで常時使えるようにする <span class="token number">6</span><span class="token punctuation">:</span> <span class="token number">3</span>views<span class="token punctuation">:</span> <span class="token constant">Boiler</span> <span class="token constant">Room</span>をお酒片手にプロジェクターで観ると幸せになれる <span class="token number">7</span><span class="token punctuation">:</span> <span class="token number">2</span>views<span class="token punctuation">:</span> 奇跡の自然、モハーの断崖。まさに世界の果て 【旅ログ】 |
Tổng kết lại:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | <span class="token keyword">require</span> <span class="token string">'google/apis/analyticsreporting_v4'</span> <span class="token keyword">require</span> <span class="token string">'google/api_client/auth/key_utils'</span> namespace <span class="token symbol">:analytics</span> <span class="token keyword">do</span> desc <span class="token string">'get popular posts from google analytics'</span> task popular_posts<span class="token punctuation">:</span> <span class="token symbol">:environment</span> <span class="token keyword">do</span> keyfile <span class="token operator">=</span> <span class="token constant">Rails</span><span class="token punctuation">.</span>root<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">'google_analytics.p12'</span><span class="token punctuation">)</span> analytics <span class="token operator">=</span> <span class="token constant">Google</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">Apis</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">AnalyticsreportingV4</span> client <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">AnalyticsReportingService</span><span class="token punctuation">.</span><span class="token keyword">new</span> <span class="token class-name">client<span class="token punctuation">.</span>authorization</span> <span class="token operator">=</span> <span class="token constant">Signet</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">OAuth2</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">Client</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span> token_credential_uri<span class="token punctuation">:</span> <span class="token string">'[https://accounts.google.com/o/oauth2/token](https://accounts.google.com/o/oauth2/token)'</span><span class="token punctuation">,</span> audience<span class="token punctuation">:</span> <span class="token string">'[https://accounts.google.com/o/oauth2/token](https://accounts.google.com/o/oauth2/token)'</span><span class="token punctuation">,</span> scope<span class="token punctuation">:</span> <span class="token string">'[https://www.googleapis.com/auth/analytics.readonly](https://www.googleapis.com/auth/analytics.readonly)'</span><span class="token punctuation">,</span> issuer<span class="token punctuation">:</span> <span class="token constant">ENV</span><span class="token punctuation">[</span><span class="token string">'GA_ISSUER'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> signing_key<span class="token punctuation">:</span> <span class="token constant">Google</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">APIClient</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">KeyUtils</span><span class="token punctuation">.</span><span class="token function">load_from_pkcs12</span><span class="token punctuation">(</span>keyfile<span class="token punctuation">,</span> <span class="token constant">ENV</span><span class="token punctuation">[</span><span class="token string">'GA_KEY_SECRET'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">)</span> client<span class="token punctuation">.</span>authorization<span class="token punctuation">.</span>fetch_access_token<span class="token operator">!</span> view_id <span class="token operator">=</span> <span class="token constant">ENV</span><span class="token punctuation">[</span><span class="token string">'GA_VIEW_ID'</span><span class="token punctuation">]</span> metric <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">Metric</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span>expression<span class="token punctuation">:</span> <span class="token string">'ga:pageviews'</span><span class="token punctuation">,</span> <span class="token keyword">alias</span><span class="token punctuation">:</span> <span class="token string">'pageviews'</span><span class="token punctuation">)</span> dimension <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">Dimension</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span>name<span class="token punctuation">:</span> <span class="token string">'ga:pagePath'</span><span class="token punctuation">)</span> date_range <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">DateRange</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span>start_date<span class="token punctuation">:</span> <span class="token string">'7DaysAgo'</span><span class="token punctuation">,</span> end_date<span class="token punctuation">:</span> <span class="token string">'today'</span><span class="token punctuation">)</span> order_by <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">OrderBy</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span>field_name<span class="token punctuation">:</span> <span class="token string">'ga:pageviews'</span><span class="token punctuation">,</span> sort_order<span class="token punctuation">:</span> <span class="token string">'DESCENDING'</span><span class="token punctuation">)</span> request <span class="token operator">=</span> analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">GetReportsRequest</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span> report_requests<span class="token punctuation">:</span> <span class="token punctuation">[</span>analytics<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ReportRequest</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span> view_id<span class="token punctuation">:</span> view_id<span class="token punctuation">,</span> metrics<span class="token punctuation">:</span> <span class="token punctuation">[</span>metric<span class="token punctuation">]</span><span class="token punctuation">,</span> dimensions<span class="token punctuation">:</span> <span class="token punctuation">[</span>dimension<span class="token punctuation">]</span><span class="token punctuation">,</span> date_ranges<span class="token punctuation">:</span> <span class="token punctuation">[</span>date_range<span class="token punctuation">]</span><span class="token punctuation">,</span> order_bys<span class="token punctuation">:</span> <span class="token punctuation">[</span>order_by<span class="token punctuation">]</span> <span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token punctuation">)</span> response <span class="token operator">=</span> client<span class="token punctuation">.</span><span class="token function">batch_get_reports</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span> data <span class="token operator">=</span> response<span class="token punctuation">.</span>reports<span class="token punctuation">.</span>first<span class="token punctuation">.</span>data num <span class="token operator">=</span> <span class="token number">0</span> data<span class="token punctuation">.</span>rows<span class="token punctuation">.</span><span class="token keyword">each</span> <span class="token keyword">do</span> <span class="token operator">|</span>row<span class="token operator">|</span> <span class="token keyword">next</span> <span class="token keyword">unless</span> row<span class="token punctuation">.</span>dimensions<span class="token punctuation">.</span>to_s<span class="token punctuation">.</span>include<span class="token operator">?</span><span class="token punctuation">(</span><span class="token string">'/posts/'</span><span class="token punctuation">)</span> slug <span class="token operator">=</span> row<span class="token punctuation">.</span>dimensions<span class="token punctuation">.</span>first<span class="token punctuation">.</span>to_s<span class="token punctuation">[</span><span class="token number">7.</span><span class="token punctuation">.</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> post <span class="token operator">=</span> <span class="token constant">Post</span><span class="token punctuation">.</span><span class="token function">find_by</span><span class="token punctuation">(</span>slug<span class="token punctuation">:</span> slug<span class="token punctuation">)</span> <span class="token keyword">next</span> <span class="token keyword">if</span> post<span class="token punctuation">.</span><span class="token keyword">nil</span><span class="token operator">?</span> num <span class="token operator">+</span><span class="token operator">=</span> <span class="token number">1</span> popular_post <span class="token operator">=</span> <span class="token constant">PopularPost</span><span class="token punctuation">.</span><span class="token function">where</span><span class="token punctuation">(</span>rank<span class="token punctuation">:</span> num<span class="token punctuation">)</span><span class="token punctuation">.</span>first_or_create<span class="token operator">!</span> <span class="token keyword">do</span> <span class="token operator">|</span>new_popular_post<span class="token operator">|</span> new_popular_post<span class="token punctuation">.</span>rank <span class="token operator">=</span> num new_popular_post<span class="token punctuation">.</span>post <span class="token operator">=</span> post <span class="token keyword">end</span> popular_post<span class="token punctuation">.</span>update<span class="token operator">!</span><span class="token punctuation">(</span>post_id<span class="token punctuation">:</span> post<span class="token punctuation">.</span>id<span class="token punctuation">)</span> puts <span class="token string">"<span class="token interpolation"><span class="token delimiter tag">#{</span>num<span class="token delimiter tag">}</span></span>: <span class="token interpolation"><span class="token delimiter tag">#{</span>row<span class="token punctuation">.</span>metrics<span class="token punctuation">.</span>first<span class="token punctuation">.</span>values<span class="token punctuation">.</span>first<span class="token delimiter tag">}</span></span>views: <span class="token interpolation"><span class="token delimiter tag">#{</span>post<span class="token punctuation">.</span>title<span class="token delimiter tag">}</span></span>"</span> <span class="token keyword">break</span> <span class="token keyword">if</span> num <span class="token operator">==</span> <span class="token number">8</span> <span class="token keyword">end</span> <span class="token keyword">end</span> <span class="token keyword">end</span> |
Bước cuối cùng là chạy rake task:
1 2 | bundle exec rake analytics:popular_posts |
Tài liệu tham khảo
https://developers.google.com/analytics/devguides/reporting/core/v4
https://readysteadycode.com/howto-access-the-google-analytics-api-with-ruby
https://github.com/googleapis/google-api-ruby-client
https://www.rubydoc.info/github/google/google-api-ruby-client/Google/Apis/AnalyticsreportingV4/AnalyticsReportingService