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

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

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

garb → google-api-ruby-client → 同 0.9 → google-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"
#}

ChordWikiのサーバを移転

2/24の2:00〜5:00に移転作業を完了。

Cent OS 5ではいろいろやってもTLS 1.2に対応させることができず、Chrome 81のアップデートが迫って警告メール*1も来たので、3年ほど遅いけどようやく移行。迷ったけどドキュメントが揃ってそうなCent OS 7へ。

 

rubyがyumだと2.0しか入らないけど、さすがに古いので2.6をソースからインストール。

これまで1.9で動かしていたコードは、ほぼそのまま動いた。

MySQLからMaria DBになってたけど、mysql2で何も変えずに通った。

Google Analyticsのデータを取得するgemが大きく変わっていて、google-api-ruby-clientが非互換なアップデートされたを参考に修正した。

あとApacheも2.2から2.4に変わってmod_rewrite設定に不具合が起こって手を入れたけど、たぶん大丈夫。

 

 

*1:Google Search Console Team <sc-noreply@google.com> Jan 14, 2020, 9:13 AM「https://ja.chordwiki.org/ で使用されている TLS 1.0/1.1 に関する警告が Chrome ブラウザで表示されるようになります」

2016年のbot開発

立て続けに発表されたbot開発プラットフォーム。作ってみた記事もちらほら見かけてちょっとしたブームっぽい。

Microsoft Bot Framework
Messaging API
Messengerプラットフォーム - ドキュメンテーション - 開発者向けFacebook

LINE BOT APIで当初NGだったLet's Encryptの証明書が通るようになったという噂を聞いたので*1昨日から使おうとしているが一向にコールバックが飛んで来ない。
なので先にFacebookから作ってみた。

ごちゃごちゃ試行錯誤しているうちに動くようになった。
だけどこれって、単にメッセージを投げているだけで、Twitter APIで出来ることと何も変わらない。これは9年前に通った道だ。*2

自然言語処理やAIを使って初めて2016年のbotと言えるだろう。
日本はbot後進国になる運命かもね。 | ふくゆきブログ
だから村上福之のこの記事こそが重視されるべきなのだが、それはそれで、趣味のプログラミングからは遠く離れたところへ行ってしまいそうなのである。


4/23追記
LINE BOT APIのコールバックも届くようになった。*3

Let's Encryptのサーバ証明書でSSL対応

さくらVPSで、Let’s Encryptのサーバ証明書を使って、SSL対応のサイトを作る設定手順
を見てやってみようと思ったが、CentOS 5ではこの通りに行かないっぽい。
まずPythonが2.6以上必要と言われる。2.4しか入っていない。yumに2.6があるのでインストール("python26"になる)してスクリプトの中のpython27をpython26に変えても無理だった。

wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz

からインストールして"python2.7"が通るようにしてもやっぱり駄目だった。

KeyError: 'webroot'

となって止まる。


Letsencrypt-auto certonly fails with KeyError: 'webroot' - Help - Let's Encrypt Community Support
を見て、pythonに依存しない
GitHub - Neilpang/acme.sh: A pure Unix shell script implementing ACME client protocol
を使うことにする。証明書の更新も自動でやってくれるらしい。むしろ便利じゃん。*1

git clone https://github.com/Neilpang/le.git
cd le
./le.sh install
sudo ./le issue /var/www/html/ www.example.com

して生成されたファイルを /etc/httpd/conf.d/ssl.conf に

SSLCertificateFile /home/hoge/.le/www.example.com/www.example.com.cer
SSLCertificateKeyFile /home/hoge/.le/www.example.com/www.example.com.key
SSLCertificateChainFile /home/hoge/.le/www.example.com/ca.cer

で指定。

sudo /etc/rc.d/init.d/httpd restart

で一応動いたっぽい。
ただしTLS1.0しか使えていないので「古い暗号スイート」と言われてしまう。CentOS 5ではOpenSSLが0.9.8のため。

$ cat /etc/redhat-release
CentOS release 5.11 (Final)

CentOS5のサポート期限である2017年3月31日までにはOSバージョンアップが必須。
2015年いっぱいでOpenSSL0.9.8のアップデートが無くなる? - Qiita

*1:有効期限が5月13日までになっているのがちゃんと更新されるか確認。

RubyでGoogle Analytics APIのOAuth2認証対応

YouTube API v2が終了したのに加えて、Analytics APIもOAuth2が必要になった。
YouTubeの方は道なりで行けたけど、Analyticsの方はGarbのままでは駄目っぽい。

RubyのバッチでGoogleAnalyticsのデータを取得する(OAuth2利用) - zakihayaメモ

ここ参考。Google Developers ConsoleでAnalytics APIを有効にするのを忘れないように。

zenbackがSSLページで動作しない

[blocked] The page at 'https://xxxx/' was loaded over HTTPS, but ran insecure content from 'http://w.zenback.jp/v1/?callback=jQueryxxxx': this content should also be loaded over HTTPS.

と言われる。


http://w.zenback.jp/v1/ の57行目が

          url: "http:\/\/w.zenback.jp\/v1\/"

なので

          url: "\/\/w.zenback.jp\/v1\/"

に直したものを自前でサーバに用意して読み込んでみると一応動く。(randも受け取って埋め込んだ。)
しかしさらにTwitterやはてなブックマークのボタン用jsを読み込む部分でhttp:が指定されている。今度は解読する部分が長いのであきらめた。


というか途中までは「//w.zenback.jp/〜」で記述してSSLに対応していると見せかけて、最後まで徹底していないのは不具合だよね。

ChordWikiの拡張情報をDB保持&タグのAND検索

chordpro記法を勝手に拡張して記述していたASINやYouTubeやniconicoリンクを、外に出してMySQLに保持。ついでにJASRAC作品コードも持てるように。
タグ検索はAND検索を可能に。同じテーブル同士をJOINしてさらにもう一個LEFT JOINするというSQLがあっさり書けた。