GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

insanum

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

投稿日:

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

gcalcli

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

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

gcalcliはGoogleカレンダーAPIバージョン3を使用します

要件

オプションパッケージ

  • vobject Pythonモジュール
    ics / vcalのインポートに使用されます。
  • parsedatetime Pythonモジュール
    「今」、「今日」、「あさって明日」などのファジーの日付/時刻に使用されます。

インストール

OSの配布パッケージを確認してください。

PyPIからインストールする

pip install gcalcli

ソースからインストールする

git clone https://github.com/insanum/gcalcli.git
cd gcalcli
python setup.py install

オプションのパッケージをインストールする

pip install vobject parsedatetime

特徴

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

スクリーンショット

の仕方

使用法

Usage:

gcalcli [options] command [command args or options]

 Commands:

  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:
                              '9/24/2007'
                              '24/09/2007'
                              '24/9/07'
                              'Sep 24 2007 3:30pm'
                              '2007-09-24T15:30'
                              '2007-09-24T15:30-8:00'
                              '20070924T15'
                              '8am'

  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 'boss@example.com'
                                      add

  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'

 Options:

  --[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: '232867676714.apps.googleusercontent.com')
  --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
    format.
    (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を追加します。

      --client_id=xxxxxxxxxxxxxxx.apps.googleusercontent.com
      --client_secret=xxxxxxxxxxxxxxxxx
    
  • 既存のOAuth情報を削除します(通常は〜/ .gcalcli_oauth)。

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

HTTPプロキシのサポート

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

http_proxy
https_proxy
proxy-username or proxy_username
proxy-password or proxy_password

これらの環境変数は小文字でなければならないことに注意してください。

フラグファイル

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

例:

--military
--duration=55
--details=calendar
--details=location
--details=length
-w 10

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

構成フォルダ

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

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

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

#!/bin/bash

TERMINAL=evilvte
CONFIG=~/.gcalclirc

$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

あなたの.xinitrcのようなシェルスクリプトは、あなたがX経由でログインしているときにのみ通知されます:

#!/bin/bash

[[ -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 &
fi

exec herbstluftwm # :-)

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

あなたのルートデスクトップのアジェンダ

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

${execpi 300 gcalcli --conky agenda}

また、次の3週間を示すグラフィカルなカレンダーを入手するには:

${execpi 300 gcalcli --conky calw 3}

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

tmuxとのアジェンダの統合

次のイベントをあなたの ‘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’としましょう:

#!/bin/bash
head -2 /tmp/gcalcli_agenda.txt | tail -1

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

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







-insanum

執筆者: