【伺か/SSP】グーグルカレンダー読み取り機能をゴーストに実装する。

ukagaka

出来るようになること

誰でもゴーストを経由してグーグルカレンダーの予定にアクセスできるようになる。
x.png

認証用jsonファイルの取得方法

事前準備として必要なモノがあります。
こちらをご確認ください。
【伺か/SSP】ゴーストとグーグルカレンダーを連携させ、今日の予定を教えてもらう。 — 異風堂々

実装済みのゴースト

GitHub – ambergon/ukagakaGhost_sizukanaDanran

ゴーストに実装する

使用するもの

yaya及びproxy_exを使用する。
Release SAORI : proxy_ex v1.0.2 · ukatech/csaori · GitHub
SAORI-BASIC/GoogleCalendar連携用
ambergon/ukagakaExe_GoogleCalendar · GitHub

ファイル構成

dllフォルダを作ってこのように管理している。

ghost
└─master
   ├─yaya.dll
   └─dll
       ├─proxy_ex.dll
       └─ukagakaExe_getGoogleCalendar.exe

サンプルコード

引数は以下の通りになります。

  • 認証用jsonファイルのパス
  • gmailアドレス
  • “day” or “week”
  • タイムゾーン
  • 改行用文字列

proxy_exは最初の一行のみを拾うため、区切り文字でくっつけて後で複数行に戻しています。

FUNCTIONEX("./dll/proxy_ex.dll" ,  "/charset" , "UTF-8"  )
_day = FUNCTIONEX( "./dll/proxy_ex.dll", "./ukagakaExe_getGoogleCalendar.exe" ,"jsonが保存されている絶対パス","xxx@gmail.com","day or week", "timezone" , "区切り文字" )
_day = REPLACE( _day , "区切り文字" , "\n" )
_day

実際に使用しているコード

一部変更している。
既存のイベントとしてOnFileDroppedを使用しているので競合に注意してください。

//呼び出し用メニュー
CalendarMenu {
    "\_q\n[half]/
        【 Googleカレンダー 】\n/
    \![*]\q[同期するGmailのメールアドレスを指定する,OnSetCalendarGmailAddress]\n/
    \![*]\q[今日の予定を確認する,OnGetCalendar,day]\n/
    \![*]\q[今週の予定を確認する,OnGetCalendar,week]\n/
    \![*]\q[設定方法を確認する,OnHowToCalendar]\n/
    \n[half]\e"
}

OnSetCalendarGmailAddress {
    "@gmail.comまで入力してね。\![open,inputbox,OnInputYourGmailAddress]"
}

OnInputYourGmailAddress {
    YourGmailAddress = reference[0]
    "%(YourGmailAddress)だね。登録したよ。"
    //YourGmailAddress = "@gmail.com"
}

OnGetCalendar {
    //関数としても実行可能なようにする。
    _target = ""
    if _argc != 0 {
        _target = _argv[0]
    } else {
        _target = reference[0]
    }
    _sep    = "---"

    if ( ISVAR( "YourGmailAddress" ) == 0 ){
        "Gmailが設定されていないよ。"

    } elseif ( ISVAR( "GoogleCalendarJson" ) == 0 ){
        "GoogleCalendarJsonが設定されていないよ。D&Dしてね。"

    } else {
        FUNCTIONEX("./dll/proxy_ex.dll" ,  "/charset" , "UTF-8"  )
        _day = FUNCTIONEX( "./dll/proxy_ex.dll", "./ukagakaExe_getGoogleCalendar.exe" ,GoogleCalendarJson, YourGmailAddress , _target , "-9" , _sep )
        _day = REPLACE( _day , _sep , "\n" )

        if _day == "" {
            "\1貴方は手帳を開いた。\0何も書かれていなかった。"
        } else {
            "\1貴方は手帳を開いた。\0\_q\b[2]%( _day )\_q"
        }
    }
}

OnHowToCalendar {
    "\j[https://ambergonslibrary.com/ukagaka/8900/]"
}

OnFileDropped {
    _FILE = REPLACE( reference[0], '\' , '/' ) 
    if ( RE_SEARCH(_FILE, "json$") ) {
        SetJsonConfig( _FILE )
    }
}

SetJsonConfig {
    _PATH = _argv[0]
    "\b[2]\_q\n[half]/
    %( _PATH )\n/
    \![*]\q[ GoogleCalendarJsonを設定する ,OnSetJsonFile,%( _PATH ),GoogleCalendarJson]\n/
    \n[half]\e"
}

OnSetJsonFile {
    _PATH   = reference[0] 
    _Name   = reference[1]
    EVAL( _Name + ' = "' + _PATH + '"' )
    "%( _Name ) の設定ファイルは %( _PATH ) だね。"
}

製作動機

ゴーストを起動しているとき、間違いなく家についています。
今まで机につくと、手帳を確認して明日の予定に合わせて準備などをしていたわけですが、その辺をゴーストに任せてみました。
。。。有能メイドゴーストとか出てきてほしいですね。

参考

maxResults/timeMax/timeMin
google-api-go-client/calendar-api.json at main · googleapis/google-api-go-client · GitHub