Tags: Find Google_Analytics
日前為了掌握公司網站內容的使用狀況,以公司帳號申請了 Google Analytics 服務 (See also: 部落格小玩意5: 加入 Google Analytics 分析程式碼 )。接著就要將 Google 提供的 Analytics 程式碼植入網站的網頁中。然而公司網站早期係以靜態網頁形式建置,每個網站下包含子目錄,擁有數十個靜態頁面內容。若以人工作業方式植入甚為不便。故以 Ruby 撰寫一個小程式,掃描指定目錄之下的所有網頁內容,將 Google Analytics 程式碼植入不含 Analytics 程式碼的網頁中。
#usage: inser_ga_code.rb GA_ID dir
require 'Find'
gaID = ARGV[0]
gaCode = %Q{
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "#{gaID}";
urchinTracker();
</script>
}
dir = ARGV[1]
Find.find(dir) do |filepath|
#%w[c:/index.htm c:/index2.html].each do |filepath| #for test
next if FileTest.directory? filepath
next if File.extname(filepath).scan(/\.html?$/i).empty?
puts filepath
File.open(filepath, 'rb+') do |fh|
content = fh.read
if Regexp.new(%Q(_uacct = "#{gaID}")) =~ content then
puts 'ok'
else
i = content.rindex /<\/body>/i
next unless i
fh.pos = i
fh.print gaCode, content[i..content.length]
#fh.rewind
#newContent = content[0...i] + gaCode + content[i..content.length]
#File.open('index.htm.new', 'w') {|nfh| nfh << newContent}
puts 'add'
end
end
end
筆記
Ruby 的 one-liner 執行方式似乎不會深入到子目錄中。
ARGV 陣列之內容不含程式檔名。若未傳遞任何引數時,ARGV.length 為 0。這點與C/C++,PHP等不同。在C/C++,PHP之中,argv 陣列的第一個元素為程式檔名,故其 argv 陣列之長度最小為1。
在 Windows 平台上,檔案開啟模式若不為 binary mode ,將影嚮 pos, seek
等方法的定位準確度。
樂多舊網址: http://blog.roodo.com/rocksaying/archives/3031499.html