要素が最初に現れた順を記憶するカウンタ by python3
公式ドキュメントにサラッと書いてあるけど理解できない
class OrderedCounter(Counter, OrderedDict): 'Counter that remembers the order elements are first encountered' def __repr__(self): return '%s(%r)' % (self.__class__.__name__, OrderedDict(self)) def __reduce__(self): return self.__class__, (OrderedDict(self),)
{gmailr} で gmail 履歴を取得
gmail のログを R を使って集計したかったのでググったら CRAN にパッケージありました、{gmailr} 。
これを使ったコードが簡単なので以下貼り付けちゃいます。 送信したメール一覧を取得します。gmailkey.json は Google Developers Console から取得してください。
library(gmailr) library(purrr) # Authenticate Gmail access gmail_auth("gmailkey.json", scope = 'read_only') # Create gmail seach query start_date = Sys.Date()-7 # a week ago end_date = Sys.Date() gmail_search_query = paste0("in:sent after:", start_date, "before:", end_date) # Retrieve message id's using the search query ids = id(messages(search = gmail_search_query)) # Get the "To" field using the id's ids %>% map(message) -> msgs msgs %>% map(to) -> tos msgs %>% map(cc.gmail_message) -> ccs msgs %>% map(subject) -> sbjs
以下のレポジトリに置いてあります。
{purrr} も便利すぎて感動モノだったのですが、それはまた今度。
文字列の結合
エクセルでよく考える文字列の結合について
欲しい出力は
総額 ¥5,000
だけなのですが
文字列結合は CONCATENATE……金額のカンマ区切りは…… とか悩んでたら、CONCATENATE とか特に使わなくて解決するのね。
="総額 "&TEXT(D4,"¥#,##0")
JavaScript / GAS で日付操作
GAS で Gmail を操作続行中。 一日ごとのメールを取得したかったので、ある範囲(6月〜11月)の日付をなめる for 文を。 SpreadSheet に出力することを想定しているので、col に曜日をとり、1週間ごとに row をインクリメントしている。
date = new Date(2015, 5, 1); //6 月なことに注意 while(date.getMonth() < 11){ col = date.getDay()+1; date.setDate(date.getDate()+1); sheet.getRange(row, col).setValue(date); if(col==7){ row++; } }
SpreadSheet で Gmail データ取得
参考サイト Gmailのデータを取得する。 - mirandora.commirandora.com
まだよく理解してないが直近のメールの送受信者、件名などが取得できる。
sleep の働きは不明。thread の仕組みも不明
GAS エディタ久しぶりに使ったが想像以上に補完機能が優秀。あとフォントが好き
Google Fonts Inconsolata
function getMail() { var sheet = SpreadsheetApp.getActiveSheet() var threads = GmailApp.getInboxThreads(0, 30); var row =1; for (var n in threads){ var thd = threads[n]; var msgs = thd.getMessages(); for (m in msgs){ var msg = msgs[m]; var from = msg.getFrom(); var to = msg.getTo() + msg.getCc(); var date = msg.getDate(); var title = msg.getSubject(); sheet.getRange(row, 1).setValue(date); sheet.getRange(row, 2).setValue(from); sheet.getRange(row, 3).setValue(to); //sheet.getRange(row, 4).setValue(title); row++; } Utilities.sleep(1000); } }