gcalcli – Googleカレンダーのコマンドラインインターフェイス





gcalcliはPythonアプリケーションで、コマンドラインからGoogleカレンダーにアクセスできます。 議題を手に入れたり、イベントを検索したり、新しいイベントを追加したり、イベントを削除したり、イベントを編集したり、ICS / vCal招待状をMicrosoft Exchangeやその他のソースからインポートすることも簡単です。 さらに、gcalcliはリマインダサービスとして使用でき、イベントが発生したときに必要なアプリケーションを実行できます。




  • vobject Pythonモジュール
    ics / vcalのインポートに使用されます。
  • parsedatetime Pythonモジュール




pip install gcalcli


git clone
cd gcalcli
python install


pip install vobject parsedatetime


  • GoogleアカウントでのOAuth2認証
  • あなたのカレンダーを一覧表示する
  • 指定された開始日時と終了日時を使用してアジェンダを表示する
  • 可変幅のアスキーテキストグラフィカルカレンダー表示
  • 過去および/または将来のイベントの検索
  • 指定したカレンダーに新しいイベントを「クイック追加」する
  • 新しいイベントを指定されたカレンダーに(「対話的に」または「自動的に」)追加します。
  • カレンダーからの「削除」イベント(対話式または自動)
  • インタラクティブに “編集”イベント
  • ICS / vCalファイルから指定されたカレンダーにイベントをインポートする
  • goo.glによるURL短縮のサポート
  • お気に入りのメールクライアント(添付ファイルハンドラ)との簡単な統合
  • cronジョブとして実行し、リマインダのコマンドを実行する
  • 特定のカレンダーに対して作業する(カレンダー名w /正規表現による)
  • オプションのデフォルトを指定するフラグファイルのサポート
  • カラー出力とUnicode文字サポート
  • シェルスクリプト、cron、screen、tmux、conkyなどで超楽しいハッキング





gcalcli [options] command [command args or options]


  list                     list all calendars

  search <text> [start] [end]            
                           search for events within an optional time period
                           - case insensitive search terms to find events that
                             match these terms in any field, like traditional
                             Google search with quotes, exclusion, etc.
                           - for example to get just games: "soccer -practice"
                           - [start] and [end] use the same formats as agenda

  agenda [start] [end]     get an agenda for a time period
                           - start time default is 12am today
                           - end time default is 5 days from start
                           - example time strings:
                              'Sep 24 2007 3:30pm'

  calw <weeks> [start]     get a week based agenda in a nice calendar format
                           - weeks is the number of weeks to display
                           - start time default is beginning of this week
                           - note that all events for the week(s) are displayed

  calm [start]             get a month agenda in a nice calendar format
                           - start time default is the beginning of this month
                           - note that all events for the month are displayed
                             and only one month will be displayed

  quick <text>             quick add an event to a calendar
                           - a single --calendar must specified
                           - the "--details url" option will show the event link
                           - example text:
                              'Dinner with Eric 7pm tomorrow'
                              '5pm 10/31 Trick or Treat'

  add                      add a detailed event to a calendar
                           - a single --calendar must specified
                           - the "--details url" option will show the event link
                           - example:
                              gcalcli --calendar 'Eric Davis'
                                      --title 'Analysis of Algorithms Final'
                                      --where UCI
                                      --when '12/14/2012 10:00'
                                      --duration 60
                                      --description 'It is going to be hard!'
                                      --reminder 30
                                      --who ''

  delete <text> [start] [end]
                           delete event(s) within the optional time period
                           - case insensitive search terms to find and delete
                             events, just like the 'search' command
                           - deleting is interactive
                             use the --iamaexpert option to auto delete
                             THINK YOU'RE AN EXPERT? USE AT YOUR OWN RISK!!!
                           - use the --details options to show event details
                           - [start] and [end] use the same formats as agenda

  edit <text>              edit event(s)
                           - case insensitive search terms to find and edit
                             events, just like the 'search' command
                           - editing is interactive

  import [file]            import an ics/vcal file to a calendar
                           - a single --calendar must specified
                           - if a file is not specified then the data is read
                             from standard input
                           - if -v is given then each event in the file is
                             displayed and you're given the option to import
                             or skip it, by default everything is imported
                             quietly without any interaction
                           - if -d is given then each event in the file is
                             displayed and is not imported, a --calendar does
                             not need to be specified for this option

  remind <mins> <command>  execute command if event occurs within <mins>
                           minutes time ('%s' in <command> is replaced with
                           event start time and title text)
                           - <mins> default is 10
                           - default command:
                              'notify-send -u critical -a gcalcli %s'


  --[no]allday: If --allday is given, the event will be an all-day event
    (possibly multi-day if --duration is greater than 1). The time part of the
    --when will be ignored.
    (default: 'false')
  --[no]cache: Execute command without using cache
    (default: 'true')
  --calendar: Which calendars to use;
    repeat this option to specify a list of values
    (default: '[]')
  --client_id: API client_id
    (default: '')
  --client_secret: API client_secret
    (default: '3tZSxItw6_VnZMezQwC8lUqy')
  --[no]color: Enable/Disable all color output
    (default: 'true')
  --color_border: Color of line borders
    (default: 'white')
  --color_date: Color for the date
    (default: 'yellow')
  --color_freebusy: Color for free/busy calendars
    (default: 'default')
  --color_now_marker: Color for the now marker
    (default: 'brightred')
  --color_owner: Color for owned calendars
    (default: 'cyan')
  --color_reader: Color for read-only calendars
    (default: 'magenta')
  --color_writer: Color for writable calendars
    (default: 'green')
  --configFolder: Optional directory to load/store all configuration information
  --[no]conky: Use Conky color codes
    (default: 'false')
  --defaultCalendar: Optional default calendar to use if no --calendar options
    are given;
    repeat this option to specify a list of values
    (default: '[]')
  --[no]default_reminders: If no --reminder is given, use the defaults. If this
    is false, do not create any reminders.
    (default: 'true')
  --description: Event description
  --[no]detail_all: Display all details
    (default: 'false')
  --[no]detail_attendees: Display event attendees
    (default: 'false')
  --[no]detail_calendar: Display calendar name
    (default: 'false')
  --[no]detail_description: Display description
    (default: 'false')
  --detail_description_width: Set description width
    (default: '80')
    (an integer)
  --[no]detail_length: Display length of event
    (default: 'false')
  --[no]detail_location: Display event location
    (default: 'false')
  --[no]detail_reminders: Display reminders
    (default: 'false')
  --detail_url: <long|short>: Set URL output
  --[no]detail_email: Display event creator's email
    (default: 'false')
  --details: Which parts to display, can be: 'all', 'calendar', 'location',
    'length', 'reminders', 'description', 'longurl', 'shorturl', 'url',
    'attendees', 'email';
    repeat this option to specify a list of values
    (default: '[]')
  -d,--[no]dump: Print events and don't import
    (default: 'false')
  --duration: Event duration in minutes or days if --allday is given.
    (an integer)
  --flagfile: Insert flag definitions from the given file into the command line.
    (default: '')
  --[no]help: Show this help
  --[no]helpshort: Show command help only
  --[no]helpxml: like --help, but generates XML output
  --[no]iamaexpert: Probably not
    (default: 'false')
  --[no]includeRc: Whether to include ~/.gcalclirc when using configFolder
    (default: 'false')
  --[no]lineart: Enable/Disable line art
    (default: 'true')
  --locale: System locale
  --[no]military: Use 24 hour display
    (default: 'false')
  --[no]monday: Start the week on Monday
    (default: 'false')
  --[no]prompt: Prompt for missing data when adding events
    (default: 'true')
  --[no]refresh: Delete and refresh cached data
    (default: 'false')
  --reminder: Reminders in the form 'TIME METH' or 'TIME'. TIME is a number
    which may be followed by an optional 'w', 'd', 'h', or 'm' (meaning weeks,
    days, hours, minutes) and default to minutes. METH is a string 'popup',
    'email', or 'sms' and defaults to popup.;
    repeat this option to specify a list of values
    (default: '[]')
  --[no]started: Show events that have started
    (default: 'true')
  --title: Event title
  --[no]tsv: Use Tab Separated Value output
    (default: 'false')
  --undefok: comma-separated list of flag names that it is okay to specify on
    the command line even if the program does not define a flag with that name.
    IMPORTANT: flags in this list that have arguments MUST use the --flag=value
    (default: '')
  --[no]use_reminders: Honour the remind time when running remind command
    (default: 'false')
  -v,--[no]verbose: Be verbose on imports
    (default: 'false')
  --[no]version: Show the version and exit
    (default: 'false')
  --when: Event time
  --where: Event location
  --who: Event attendees;
    repeat this option to specify a list of values
    (default: '[]')
  -w,--width: Set output width
    (default: '10')
    (an integer)


OAuth2はGoogleアカウントの認証に使用されます。 結果のトークンは、〜/ .gcalcli_oauthファイルに格納されます。 最初にgcalcliを起動すると、認証プロセスが進行します。 指示に従ってください。

必要に応じて、デフォルトのAPI値の代わりに独自のカレンダーAPIを使用できます。 :これらの手順はオプションです。

  • Googleデベロッパーコンソールにアクセスする

  • gcalcliの新しいプロジェクトを作る

  • API&Authの下のサイドバーで、APIをクリックします。

  • カレンダーAPIを有効にする

  • サイドバーの[資格情報]をクリックします。

  • 新しいクライアントIDを作成します。 タイプをインストール済みアプリケーションに、サブタイプをその他に設定します。 あなたはいくつかの同意書の情報を記入するように求められますが、ここに記入する内容は重要ではありません。 gcalcliがOAuthのウェブサイトを開いたときに表示されるのはまさにそのようなものです。 オプションのものは、何も入力しなくてもかまいません。

  • 資格証明ページに戻り、あなたのIDと秘密を手に入れてください。

  • 必要に応じて、.gcalclircにclient_idとclient_secretを追加します。
  • 既存のOAuth情報を削除します(通常は〜/ .gcalcli_oauth)。

  • 任意の引数を指定してgcalcliを実行し、新しいclient_idとclient_secretがコマンドラインで渡されるか、または.gcalclircに配置されることを確認します。 OAuthの認証ページは、デフォルトのブラウザで自動的に開きます。


gcalcliはgdata Pythonモジュールで使用されるいくつかの環境変数を設定するだけで自動的にHTTPプロキシと連携します:

proxy-username or proxy_username
proxy-password or proxy_password



gcalcliは、フラグファイルからデフォルトの構成情報を読み取ることができます。 このファイルは、デフォルトで ‘〜/ .gcalclirc’にあります。 フラグファイルは、1行につき1つのコマンドラインパラメータをとります。


-w 10

長いオプションは、パラメータを指定する場合に等号を必要とすることに注意してください。 短いオプションの場合、等号はオプションです。


gcalcliは、必要なすべての情報を特定のフォルダに保存できます(–configFolderオプションを使用します)。各フォルダには、oauthとcacheの2つのファイルが含まれます。 オプションの3番目のファイルgcalclircは、この設定フォルダを使用するときに適用したい特定のフラグに使用できます。

Exchange(またはその他)からのVCS / VCAL / ICSファイルのインポート

gcalcliを使用すると、ファイルからイベントを簡単にインポートできます。 ‘import’コマンドは、コマンドラインでファイル名を受け入れるか、標準入力から読み込むことができます。 Thunderbirdの添付ファイルハンドラまたはMuttを使ったメールキャップのエントリ(または添付ファイルビューアとパイプコマンドを使うことができるMutt)として使用できるスクリプトは次のとおりです:



$TERMINAL -e bash -c "echo 'Importing invite...' ; \
                      gcalcli --detail-url=short \
                              --calendar='Eric Davis' \
                              import -v \"$1\" ; \
                      read -p 'press enter to exit: '"

Thunderbirdでは、 ‘Lightning’を使用しないときにカレンダーの添付ファイルを表示するために ‘Show All Body Parts’拡張機能をインストールする必要があります。 詳細については、このバグレポートを参照してください。


gcalcliの ‘remind’コマンドは、コマンドをイベント通知として実行するために使用されます。 これはnotify-sendやxmessageのようなポップアップ、あるいはあなたが考えることができるその他のものです。 gcalcliにはデーモンが含まれていないので、gcalcliが通知のために適時に実行されるように、他のツールを使用する必要があります。 2つのオプションは、シェルスクリプト内でcronまたはループを使用しています。


% crontab -l
*/10 * * * * /usr/bin/gcalcli remind



[[ -x /usr/bin/dunst ]] && /usr/bin/dunst -config ~/.dunstrc &

if [ -x /usr/bin/gcalcli ]; then
  while true; do
    /usr/bin/gcalcli --calendar="davis" remind
    sleep 300
  done &

exec herbstluftwm # :-)

デフォルトでは、gcalcliは通知のためにnotify-sendコマンドを実行します。 最も一般的なLinuxデスクトップ環境にはすでにlibnotifyをサポートするDBUS通知デーモンが含まれているため、自動的に動作するだけです。 あなたが私のようで、何も使用しないのであれば、私はdunst dmenuの通知デーモンを強くお勧めします。


Conkyを使用してデスクトップにアジェンダを配置します。 ‘–conky’オプションを指定すると、gcalcliはConkyのカラーシーケンスを出力します。 Gcalcliの出力をカラーシーケンスのために解析するには、Conkyの「execpi」コマンドを使用する必要があることに注意してください。 .conkyrcに以下を追加してください:

${execpi 300 gcalcli --conky agenda}


${execpi 300 gcalcli --conky calw 3}

conkyrcファイルのtext_buffer_sizeを大きくする必要があるかもしれません。 ユーザーは、ビジー状態のカレンダーではデフォルトの256バイトが小さすぎると報告しています。


次のイベントをあなたの ‘tmux’ステータスラインの左側に置きます。 tmux.confファイルに次の行を追加します。

set-option -g status-interval 60
set-option -g status-left "#[fg=blue,bright]#(gcalcli agenda | head -2 | tail -1)#[default]"


あなたの次のイベントをあなたの「スクリーン」ハードスタンスラインに入れてください。 最初にテキストファイルにアジェンダをダンプするcronジョブを追加します。

% crontab -e


*/5 * * * * gcalcli --nocolor --nostarted agenda "`date`" > /tmp/gcalcli_agenda.txt

次に、最初のアジェンダ行を抽出する簡単なシェルスクリプトを作成します。 このスクリプトを ‘screen_agenda’としましょう:

head -2 /tmp/gcalcli_agenda.txt | tail -1

次に、バックティックコマンドからデータを収集するための画面のハードステータス行を設定します。 もちろん、あなたのハードスタットラインは、これとは非常に異なる可能性が高いです(私のものです!):

backtick 1 60 60 screen_agenda
hardstatus "[ %1` ]"