23 February 2014

(Python) Googleカレンダーの予定を読み書き

PythonでGoogleカレンダーのデータを読み書きするサンプルスクリプト

■ 検証環境

・Ubuntu 12.04.4 LTS

■ ライブラリのインストール

Google Data APIs - Client Libraries から、gdata-python-client のパッケージをダウンロードし、root権限でインストール作業を行う

# wget http://code.google.com/p/gdata-python-client/downloads/detail?name=gdata-2.0.18.tar.gz
# tar xvf gdata-2.0.18.tar.gz
# cd gdata-2.0.18
# python setup.py install

予定表イベントの読み出し

■ gdata.calendar.client を用いる方法 (読み取り)

Googleのgdataパッケージに添付されているサンプルプログラムを流用する方法

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import gdata.calendar.client
 
def print_event():
 
 login_email = 'username@gmail.com'
 login_password = 'password'
 calendar_service = gdata.calendar.client.CalendarClient()
 calendar_service.ssl = True
 calendar_service.ClientLogin(login_email, login_password, "test python script");
 
 query = gdata.calendar.client.CalendarEventQuery(start_min='2013-12-01', start_max='2013-12-31',
        max_results='5', orderby='starttime', sortorder='ascending')
 feed = calendar_service.GetCalendarEventFeed(q=query)
 for i,ev in enumerate(feed.entry):
  print "%s, %s (updated %s)" % (i, ev.title.text, ev.updated.text)
  for e in ev.when:
   print "  from %s to %s" % (e.start, e.end)
 
print "Read from Google Calendar"
print_event()

■ gdata.calendar.service を使う方法 (読み取り)

Google検索で他の人のサンプルプログラムを検索したところ、このクラスを使っても出来るようだ

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import gdata.calendar.service
 
def print_event():
 
 login_email = 'username@gmail.com'
 login_password = 'password'
 
 calendar_service = gdata.calendar.service.CalendarService()
 calendar_service.ssl = True
 calendar_service.ClientLogin(login_email, login_password);
 
 query = gdata.calendar.service.CalendarEventQuery()
 
 query.start_min = '2013-12-01T00:00:00'
 query.start_max = '2013-12-30T23:59:59'
 query.orderby='starttime'
 query.sortorder='ascending'
 #繰り返しイベントを別のイベントとして取得
 query.singleevents = 'true'
 query.max_results = 5
 
 feed = calendar_service.CalendarQuery(query)
 
 for i,ev in enumerate(feed.entry):
  print "%s, %s (updated %s)" % (i, ev.title.text, ev.updated.text)
  for e in ev.when:
   print ' from %s to %s' % (e.start_time, e.end_time)
 
print "Read from Google Calendar"
print_event()

予定表イベントの書き込み

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import gdata.calendar.client
 
def insert_event():
 
  login_email = 'username@gmail.com'
  login_password = 'password'
 
  calendar_service = gdata.calendar.client.CalendarClient()
  calendar_service.ssl = True
  calendar_service.ClientLogin(login_user, login_password, "test python script");
 
  event = gdata.calendar.data.CalendarEventEntry()
  event.title = atom.data.Title(text="テスト イベント")
  event.content = atom.data.Content(text="内容")
  start_time = '2013-12-15'
  event.when.append(gdata.data.When(start=start_time, end=start_time))
 
  calendar_service.InsertEvent(event)
 
print "Insert Event into Google Calendar"
insert_event()