TonamiLog

ゆるキャン△とスノーボードとオタク

夏休み自由工作:通販したら着弾日がTimeTreeに登録されるやつ③

ハロートナミです。

自分の作業と平行してブログを書いているので更新頻度が高いです。

さて、引き続き
Amazonから届く確認メールをあれこれして、TimeTreeに着弾時間を登録するやつ
を作っていきます。
これは続きなので、前のやつを読みたい方はこれこれを読んで下さい。

前回の記事でAmazonからの発送通知メールそれがしする処理を書き
TimeTreeの予定投稿APIを使って予定登録するところまでやりました。
なので、残りのやることが

  • Lambdaに乗せる
  • 動かしてみる

という感じになっていました。もう少しで終わりですね。それではやっていきましょう。

続きを読む

夏休み自由工作:通販したら着弾日がTimeTreeに登録されるやつ②


ハロートナミです。引き続き

Amazonから届く確認メールをあれこれして、TimeTreeに着弾時間を登録するやつ

を作っていきます。
これは続きなので、前のやつを読みたい方はこれを読んで下さい。


前回の記事でTimeTreeにAPIを投げて予定を登録する処理を確認したので、残りのやることが

  • Amazonからの発送通知メールをいい感じに取ってくる実装
  • Lambdaに乗せる
  • 動かしてみる

という感じになっていました。それではやっていきましょう。

続きを読む

夏休み自由工作:通販したら着弾日がTimeTreeに登録されるやつ①

ハロートナミです。サマーですか?

 

私はサマーで、サマーらしくバケーションに入りました。

今年の夏休みは9日間ですが、新型コロナウイルスを考慮し

帰省もせず遊びにも行かず、殆ど家で過ごそうと思っています。

そこで、せっかく時間があるので自由工作をやろうと思います。

 

前置き

最近、引越しの関連で大量の荷物を楽天Amazonから受け取っていたんですが、妻から

「何がいつ来るかを管理したい。カレンダーに入ってくれれば楽。」

という要望が出ていました。

 

我が家ではカレンダーアプリにTimeTreeを採用しています。

timetreeapp.com

アカウント管理不要で共有カレンダーが作成出来て導入が簡単なのです。

多分まる4年ぐらい使ってると思います。機能、UI、通知など、特に不満無く便利です。

 

TimeTreeにはDeveloper Platformというものがあり、APIを通じて予定の登録が出来ます。

developers.timetreeapp.com

実はこれ前には無くて、2018年の9月頃にAPI公開する予定ありますか?と問い合わせたりしてました。

その時のTimeTreeサポート様からの解答の切り抜きがこちら(問題があれば即削除します。)

---

f:id:Thiroyuki:20200807122550p:plain

---

とのことだったのですが、いつの間にかバッチリ実装されていました。凄い

こんな経緯があったため、TimeTreeのDeveloper Platform、一度使ってみたかったのです。

 

という訳で登場人物が揃いました。

今年の夏休みの自由工作は、

Amazonから届く確認メールをあれこれして、TimeTreeに着弾時間を登録するやつ

を作ろうと思います。(楽天は余裕あったらやります)

 

だいたい

難しい事は分かりませんが、大体こんな感じで出来ないかと考えています。

f:id:Thiroyuki:20200809130548p:plain

何も考えていない事がよく分かりますね。それではやっていきましょう

 

 TimeTreeに予定投げるところ

AWS Lambdaは使った事あるし、メールについてはネットにノウハウがある……だろう。

という事で未知レベルが一番高そうなTimeTreeのAPI連携からやります。

developers.timetreeapp.comとりあえずドキュメント通りに準備をしていきます。

えー、まずTimeTreeのアカウントを作ります。

カレンダー共有まではアカウント不要でしたが、APIを使うためには必須です。

 

アカウントを作ったら認証部分をなんやかんやしてAPIを使うようです。TwitterAPIとかと同じ感じ。

アプリを登録してOAuth認証するやつと、アカウントに紐づくアクセストークンを発行してやるやつがあります。

今回はそんなにどっしりしたアプリを作る訳ではないのでアクセストークンでいきましょう。

 

とりあえずAPIが動いてるのを確認します。Python3.7です。

import requests
import os

class TimeTree():
    p_token = os.environ['TIMETREE_PERSONAL_TOKEN']
    url = 'https://timetreeapis.com'
    headers = {'Authorization': f'Bearer {p_token}',
                'Accept': 'application/vnd.timetree.v1+json',
                'Content-Type': 'application/json'}

    def get_user(self):
        r = requests.get(f'{self.url}/user', headers=self.headers)
        return r.json()

tt = TimeTree()
user = tt.get_user()
print(user)
# {'data': 
#     {'attributes': 
#         {'description': '',
#          'image_url': 'https://attachments.timetreeapp.com/user/hogehogeimg.jpg',
#          'name': 'hogename'},
#      'id': 'hogeid',
#      'type': 'user'}}

ちゃんと動いてればこんな感じになるはず。

動作確認が出来たので、今回の肝である予定の追加APIを見てみます。

TimeTree API ドキュメント - TimeTree Developer Platform

パラメータが多くてびっくりしますが、考える必要がある事は

  • カレンダーid
  • 予定タイトル
  • 予定なのかキープなのか(後述)
  • 予定が終日なのか時間指定なのか
  • 開始 / 終了日付
  • 予定のラベルID(後述)
  • 予定のラベルタイプを指定(書くだけ)

についてです。

カレンダーidはカレンダーに付いているユニークっぽいidの事です。

ブラウザ上から自分のカレンダーにアクセスすればURLから確認出来ます。

カレンダー一覧取得APIなどを使っても確認できますが

1つのカレンダーについてしか考えないならブラウザで開くのが一番簡単だと思います。

 

予定タイトルは文字通りですね。ここに指定した内容がアプリ上のラベルに表示されます。

 

キープは何の事か分からなかったのですが、どうやらカレンダーにメモを登録する機能のようです。

メモには後から日付を追加する事で予定に変換する事が出来るそうです。今回は予定のみ考えます。

 

予定が終日なのか時間指定なのかは、まあ文字通りです。

時間指定を行う場合は開始 / 終了時間が必須パラメータとなります。

 

予定のラベルIDについて、ざっくり言うとTimeTreeアプリ上で予定に付ける色の事を言ってると思います。

カレンダー毎に色の設定が出来るため、カレンダーidとラベルidのペアを渡して色指定にしているようです。

 

最終的にこんな感じで投稿部分を実装しました。

import requests
import json
import os
from datetime import datetime

class TimeTree():
    p_token = os.environ['TIMETREE_PERSONAL_TOKEN']
    url = 'https://timetreeapis.com'
    headers = {'Authorization': f'Bearer {p_token}',
                'Accept': 'application/vnd.timetree.v1+json',
                'Content-Type': 'application/json'}
    calendar_id = os.environ['TIMETREE_CALENDAR_ID']

    def add_schedule(self, title, description, st, et):
        timetree_dict = {
            'data': {
                'attributes': {
                    'title': title,
                    'category': 'schedule',
                    'all_day': False,
                    'start_at': st.isoformat(),
                    'end_at': et.isoformat(),
                    'description': description,
                },
                'relationships': {
                    'label': {
                        'data': {
                            'id': f'{self.calendar_id},1',
                            'type': 'label'
                        }
                    }
                }
            }
        }
        json_data = json.dumps(timetree_dict)
        response = requests.post(self.url + f'/calendars/{self.calendar_id}/events',
                    headers=self.headers, data=json_data)

stとetはdatetime型を期待しています。

動かしてみてTimeTreeアプリ上から予定が確認出来ればOKです。

 

とりあえずこんな感じでTimeTreeに予定を投稿するところまで出来ました。

残る要素は

  • Amazonからの発送通知メールをいい感じに取ってくる実装
  • Lambdaに乗せる
  • 動かしてみる

という感じですかね。長くなってしまったので続きは別のエントリで書きます。

ではでは~

引越しました。

ハロートナミです。お元気ですか?

 

私は元気じゃない時期があって、延期したり大変だったのですが

この度無事に引越しをやって、東京都民から埼玉県民になりました。

引越してみて分かりましたが、埼玉は本当に住みやすいです。

引越し先の駅は'住むための街'という感じで、今まで住んでいた都心付近に比べて生活に無理がありません。

良い感じです。

 

今回の引越しは人生3度目で、1度目は上京した時、2度目は5年前、妻と同棲を始める時でした。

前回の引越しの際、自分はまだ学生で金が無く、多くの家具を(主に妻の)前の部屋から運び入れました。

新規に購入したのはソファとカーテンぐらいでしょうか。

そんな訳で引越し前の我が家には、5~9年選手のアイテムがたくさんありました。

どれもまだ使えるんですが、机はガタガタ、ラグはボロボロ、食器棚は重さで歪んでるetc...

限界が近いものも多いと認識していたため、引越しを機に大買い替え祭りを開催する事にしました。

友人から要望もあったため、新居の構築と買い替えについてやった色々を書こうと思います。

覚えてる限りで。

 

 買い替え編

センターテーブル

今まで使っていた正方形の小さなこたつ机はボロボロなので廃棄。

部屋が横長になったので机も横長にしよう、という事で適当に物色して安価なこちらを購入。

安価ゆえかネジ穴が死んでる等のトラブルがあり、もうちょっと値段出したほうが良かったなと思いました。

家具は難しいですね……

item.rakuten.co.jp6,825円

 

レコーダー

録画機器としてブルーレイレコーダーを使っていたのですが、テレビに録画機能あるんだから

HDD繋いでそれ使えば良いじゃんという話がずっとありました。

リモコンがたくさんあるのも不便だったので、引越しを機にHDDを購入。

古いレコーダーは廃棄です。

www.amazon.co.jp10,146円

 

ラグ

前述の通りボロボロだったので買い替え。

良さそうなものを物色し、サイズの割に安価なこれを購入。

item.rakuten.co.jp11,880円

 

テレビボード

妻が持っていた幅100cm未満のテレビボードがあったのですが

引越し前から大型のテレビを乗せるとバランスが悪い等不満があり

ずっと買い替えたかったのでこれを機に購入。

item.rakuten.co.jp39,800円。

 

掃除機

引越しを機に古くて大きい掃除機を廃棄。

部屋の数が増え、コード付きの掃除機だと何度もコンセントを繋ぎ直す必要があって不便だったため

サマーセールのタイミングで思い切ってDysonを購入。

www.dyson.co.jp43,780円……だった気がします。セールのオマケでスタンドが付いてきました。

 

キッチンボード(食器棚)

古い食器棚は食器の重みで自壊寸前だったので廃棄。

妻から大きいキッチンボードが欲しいとの要望が出たため検討の後これを購入。

決め手は見た目とサイズ感、下部のドアが観音開きである事です。

何となく、まだ使いこなせてない感じがしています。

item.rakuten.co.jp45,732円

 

洗濯機

前の洗濯機はずっとサイズに不満があり、結構ボロボロになってきてたので買い替え。

これが一番悩んだアイテムで、縦型買うのかドラム式買うのかですったもんだしました。

最終的に友人の

「君等は夫婦で子供が出来るかもしれないのに、今縦型を選ぶのはおかしい(意訳)」

というコメントが決め手になり、ドラム式洗濯機で検討。

ヤマダのアウトレット館に何度も足を運び

検討してる間に売り切れるイベントを2回ほど経験した後、最終的にこれに決めました。

www.amazon.co.jp165,000円

 

新規購入編

シーリングライト

単純に部屋が増えて足りなくなったので、シーリングライトを買いました。

リビング用と和室用です。

www.amazon.co.jp5,360円

www.amazon.co.jp3,946円

LEDのライト、中に別途電球が不要というのに買ってから気付いて衝撃を受けました。 

 

カーテン

単純に部屋が増えたので、ツー。

新しい部屋でカーテンが必要な窓は5箇所、前の部屋から流用できたのは2箇所でした。

リビングにはレースのカーテンを導入したかったので、あわせて4枚のカーテンを購入。

東急ハンズで買ったものと、アウトレットで購入したものは値段のみ記載します。

 

リビング用レースカーテン

item.rakuten.co.jp21,120円

リビング用カーテン

13,915円

和室用カーテン

8,812円

寝室用カーテン

8,812円

 

フローリングシート

引越し先には和室があったのですが、色々考えた結果疑似洋室にすることにしました。

畳の下に防虫防カビシートを敷き、上にフローリングシートを敷いています。

畳+シートがどちらも柔らかいため、床が柔らかすぎる感じになり、ちょっと不満があります。

が、まあ許容範囲なので、向こう1年ぐらいはこのままだと思います。

www.amazon.co.jp3,960円 

www.amazon.co.jp4,600円 * 3 = 13,800円

 

ソファクッション

来客時に使えるソファ的なアイテムとして、無印良品のからだにフィットするソファを導入。

大小揃えてみましたが、座ると心地よく、インテリア的にも存在感がありかなり満足しています。

www.muji.com14,980

www.muji.com8,990

 

ウォシュレット

ずっと欲しかったウォシュレット、引越しを機に導入しました。

ポイントと設置サービス目当てでヨドバシ・ドット・コムで購入しています。

下記の値段は工事費等込です。

www.amazon.co.jp37,140円

 

エアコン

引越し先の部屋には1台もエアコンが無く、これから夏が来る事も考えて即購入に踏み切りました。

色々考え、最終的にヤマダ電機店頭で購入。

設置工事とか保証とか考えると大手の方が安心かなという気持ちです。

12畳用と8畳用で、それぞれ以下のモデルにしました。

www.yamada-denkiweb.comwww.yamada-denkiweb.com工事費込みで合計194,700円

 

その他

珪藻土バスマット、クッションマット、ベッドシーツ、トイレマット

掃除用品、ナイトテーブル、ゴミ箱、食器、スパイスラック……等

1つ1つは1000~3000円程度のものがたくさんあります。

かなりざっくりですが、全部あわせて50,000円ぐらいとします。

 

 

大体全部で70万ぐらい使ってるのか。目眩がしてきましたね。

まあ洗濯機とエアコンあるから仕方ない……という事にしましょう。

今回引越しで買ったもの全部100年保ってほしい。1年で壊れられたりすると険しい。

 

 

お金がいっぱい減って険しいですが、無事引越しが終わって良かったです。

なお、コストをかけただけあって、QoLはかなり上がりました。

特に家電類は全部満足のいくものになってます。

あとリビングの見た目がよろしくなってとても良いです。

知人の方々は是非遊びに来て下さい。

おわり