2011年1月5日水曜日

RubyからGoogleスプレッドシートのデータを取得

環境
・Ubuntu 10.10 Desktop 64bit
・Ruby 1.9.2
・gdata 1.1.1


RailsからGoogleスプレッドシートのデータを取得して、DBにインサートするという機能を、今から作ろうと思っています。


Googleスプレッドシートのデータを操作するには、gdataというライブラリを使用します。
Ruby 1.9.2でgdataをrequireすると、下記のようなエラーが出てしまいます。
`require': no such file to load -- jcode (LoadError)


これを解消するためには、
$HOME/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/gems/1.9/gems/gdata-1.1.1/lib

require 'jcode'
$KCODE = 'UTF8'
この箇所を、
if RUBY_VERSION < '1.9'
  require 'jcode'
  $KCODE = 'UTF8'
end
という風に書き換えます。


あとは、
rubyからGoogle Data APIでGoogleDocsのSpreadSheetを参照してみた - 三並慶佐 - hi-fi-Net Blog
を参考に、セルの値を読み出してみます。


require "rubygems"
require "gdata"

client = GData::Client::Spreadsheets.new
client.clientlogin('******@gmail.com', 'enteryourpassword')

key = "****************************************"
sheet = 1
feed = client.get("https://spreadsheets.google.com/feeds/cells/#{key}/#{sheet}/private/full").to_xml

row_count = feed.elements['gs:rowCount'].text.to_i
col_count = feed.elements['gs:colCount'].text.to_i
puts "row_count=#{row_count}"
puts "col_count=#{col_count}"

sheet_data = []
feed.elements.each('entry') do |entry|
gs_cell_el = entry.elements['gs:cell']
col = gs_cell_el.attribute('col').value.to_i
row = gs_cell_el.attribute('row').value.to_i
text = gs_cell_el.text
puts "#{col} #{row} #{text}"
end


シートインデックスは、0ではなく、1から始まることに注意しましょう。