剛好最近有一科期中報告會需要針對 email 中的信件進行分析,稍微爬了一下文,發覺絕大部分都是外國大神們寫的,比較沒有看到中文相關的介紹…
另一方面是最近身邊同學個個都在打積分,比如在我寫這篇廢文的幾分鐘前,又有二位剛上了金牌 XD 小弟我礙於技術問題,無法跟上 (嗯…可能被人當索爾吧) ,所以只能在別人拚 KDA 的同時寫寫廢文抒發一下
所以如果覺得寫的有待加強,還請見諒 ~ 見諒
- 進入頁面後,必須先按右側 [建立] 一個專案
- 系統會提醒專案數量限制,設定好專案名稱與ID後,無需設置機構,即可 [建立]
- 然後按照系統指示進入 [API程式庫]
- (進入後……會發現 ~ 哇 ! 原來 Google open 這麼多 API ) 選取下方 Gmail API
- 點選 [啟用]
- 啟用後,依照系統指示點選 [建立憑證]
- 使用 API 選擇 Gmail API ,存取資料選擇 應用程式資料 ,接著點選第一欄 [用戶端ID]
- 依照系統指示點選 [設定同意畫面]
- 應用程式名稱可以設定 RStudio 或是 R ,支援電子郵件系統會自動設定好,即可 [儲存]
- 應用程式類型選擇 其他 ,名稱大概就照專案名稱設定即可 [建立]
- 此時,即可得到一組 用戶端ID & 密鑰 (恕不便顯示於上圖)
- 再進入 [0Auth同意畫面]
- 點選 [新增範圍] -> 勾選需要 API 提供的權限 -> [新增]
- 點選專案最右側 [Download] ,下載用戶端ID的 .json檔
- 下載的 .json檔名稱會是一長串的編碼,建議變更成自己可識別的名稱(之後讀取時不必 key 一堆東西),最後將 .json檔移至 getwd( ) 資料夾下
library(gmailr)
##
## Attaching package: 'gmailr'
## The following object is masked from 'package:utils':
##
## history
## The following objects are masked from 'package:base':
##
## body, date, labels, message
library(tmcn)
## # tmcn Version: 0.2-12
gmail_auth(scope = "full",secret_file = "TM-midterm.json") # 進行認證,secret_file 就是剛才下載的 .json檔
## Warning in readChar(filename, nchars = 1e+05): 在非 UTF-8 MBCS 語區中只能以
## 位元組為單位讀取
會出現以下畫面…
- 選擇 自己的帳戶
- 點選 [允許]
- 點選 [允許]
- 此時,檢查一下信箱,Gmail會立刻發信通知
此時網頁會出現 “Authentication complete. Please close this page and return to R.”
回到 R ,會看到最後出現 “Authentication complete.”
search_content <- 'from:(service@books.com.tw) subject:(發票開立通知函)'
searched_emails <- messages(search = search_content, num_results = 8, label_ids = NULL, include_spam_trash = FALSE)
# 應該會有 8 封,所以 num_results 給 8;另外不想把垃圾桶裡的跟著載入,include_spam_trash 給 FALSE
str(searched_emails[[1]])
## List of 2
## $ messages :List of 8
## ..$ :List of 2
## .. ..$ id : chr "16923e58e206646e"
## .. ..$ threadId: chr "16923e58e206646e"
## ..$ :List of 2
## .. ..$ id : chr "166678dd135dba43"
## .. ..$ threadId: chr "166678dd135dba43"
## ..$ :List of 2
## .. ..$ id : chr "163e3d2b82a477e9"
## .. ..$ threadId: chr "163e3d2b82a477e9"
## ..$ :List of 2
## .. ..$ id : chr "161c716f1a14b289"
## .. ..$ threadId: chr "161c716f1a14b289"
## ..$ :List of 2
## .. ..$ id : chr "1607850a81b1198a"
## .. ..$ threadId: chr "1607850a81b1198a"
## ..$ :List of 2
## .. ..$ id : chr "15f1a1fb5d957b7a"
## .. ..$ threadId: chr "15f1a1fb5d957b7a"
## ..$ :List of 2
## .. ..$ id : chr "15b19587685fd8d5"
## .. ..$ threadId: chr "15b19587685fd8d5"
## ..$ :List of 2
## .. ..$ id : chr "159bb29933dc244f"
## .. ..$ threadId: chr "159bb29933dc244f"
## $ resultSizeEstimate: int 8
一組 message id 代表一封 mail ,searched_emails 裡的 “messages” 有 8 個 List ,應有確實載入
# 拆 massages
str(searched_emails[[1]][['messages']])
## List of 8
## $ :List of 2
## ..$ id : chr "16923e58e206646e"
## ..$ threadId: chr "16923e58e206646e"
## $ :List of 2
## ..$ id : chr "166678dd135dba43"
## ..$ threadId: chr "166678dd135dba43"
## $ :List of 2
## ..$ id : chr "163e3d2b82a477e9"
## ..$ threadId: chr "163e3d2b82a477e9"
## $ :List of 2
## ..$ id : chr "161c716f1a14b289"
## ..$ threadId: chr "161c716f1a14b289"
## $ :List of 2
## ..$ id : chr "1607850a81b1198a"
## ..$ threadId: chr "1607850a81b1198a"
## $ :List of 2
## ..$ id : chr "15f1a1fb5d957b7a"
## ..$ threadId: chr "15f1a1fb5d957b7a"
## $ :List of 2
## ..$ id : chr "15b19587685fd8d5"
## ..$ threadId: chr "15b19587685fd8d5"
## $ :List of 2
## ..$ id : chr "159bb29933dc244f"
## ..$ threadId: chr "159bb29933dc244f"
# 把各組 id 抓出來
email_ids <- id(searched_emails)
length(email_ids)
## [1] 8
# 根據 message id 取得每封 mail
get_emails <- function(message_ids) {
results <- list()
for (message_id in message_ids) {
print(sprintf('getting message id %s', message_id))
results[[message_id]] <- message(message_id)
}
return(results)
}
searched_emails <- get_emails(email_ids) # 取代原本的 searched_emails
## [1] "getting message id 16923e58e206646e"
## [1] "getting message id 166678dd135dba43"
## [1] "getting message id 163e3d2b82a477e9"
## [1] "getting message id 161c716f1a14b289"
## [1] "getting message id 1607850a81b1198a"
## [1] "getting message id 15f1a1fb5d957b7a"
## [1] "getting message id 15b19587685fd8d5"
## [1] "getting message id 159bb29933dc244f"
searched_emails[[1]]
## Id: 16923e58e206646e
## To: bigbrotherchenpoyu@gmail.com
## From: "博客來" <service@books.com.tw>
## Date: Mon, 25 Feb 2019 17:03:59 +0800
## Subject: 發票開立通知函
## 嚗<8a>
## 甇支縑隞嗥蝟餌絞<e7><e5>靽∩辣嚗<ab><e7><e6><e5><9b><a6><bc><84><ac><e7><9a><85><90><82>
## 雓<ac><bc><81>
## 嚗ear Books.com.tw Member,Thank you for ordering from Books.com.tw!This is
## a mail to confirm your online order from Books.com.tw in Chinese Big5 code
## If you can not read this,you can go https://myaccount.books.com.tw/ to check
## your transaction
## status.<e6><84><ac>閮頃<e5><8d>恥靘<9a><95><93><bc><e7><9a><a8>蝺刻<99><9f>20190220010064(<e9>鞎典<e8><99><bc>201********)<e7>蟡典歇<e9><96><ab><bc><e9><e6><93><ba><e9>摮蟡具<8d>(<e7>蟡刻<99>Ⅳ嚗M29******)嚗蟡其<b8><e6>撖<97>迨<e9><e5><e6><e9><e5><8d>恥靘垢鞎典<93>歇<e7>鞎其蒂摰<88>蟡券<96><ab><bc>祕<e9><9a><95><93><a0>疏<e6><88>鞎券<9c>閬疏<e9><81><95>祕<e9><9a><85><8b>瘜<97>摮蟡其<be><93>瓷<e6><e9>隞扎摮蟡典祕<e6>雿平閬<bb><96><ab><97>閰Y蟡冽<98>敦隢<e3><8d>恥靘<9c>撠<8d>-閮<e6>閰U(https://myaccount.books.com.tw/)
## <e3><82>
## <e7>鈭<bf>風<e6><e7><9a>犖鞈<96><ae>嚗<e6>韏瑟<88><b0><b8>靽∪銝剝*蝷箏<ae>閮頃/<e5>鞎冽<98>敦嚗遣霅唳<e5><e9><e6><99><e5><e5><8d>恥靘雯蝡<bc><e6><9c>撠<8d>嚗閰Z<a8><e3><9c><e6>閮<e6><88>耨<e6><e5><e6>鞈<96><a6><9e><e6><9c>遙雿<95><a1><bc><ab><e8><e5><8d>恥靘恥<e6><9c>葉敹閰Y<e9><97><a8><e6><88><be>縑蝯行<88><9b><e7>敹<bc><89>隞交<88><9c>靽∪隞亦策<e6><e6><9c>憟賜<9a><bc>蕭<e2>
## 嚙賬<e3><e3><e3><e3><e3><e3><e3><e3><e3><e3><e3><e3><e3><e3><e3><e3><e5><8d>恥靘<86>
## <e6>銝<8a>========== <e5><8f><a9><a8><bc><8d>恥靘<8f><86><e3><8c>2銝<8d>1瘙<ad><8d>
## ==========<e2><98><b8><93><bd>TM嚗TM銝行<b2><9c>圾<e9><e5><88><9c><bb>狡<e7><9a><e9><a0><98><b8>靽∠<e5>鞈<96><bc><ab><e9><e6><84>靽∠<e5><e8><99><88><e6><9c><e3><98><b1><ad><e9><97>雿<bc><e7><96><be><e8>澈隞踝<bc><ab>霅行蝵脤閰<a8><b0><b7><9a>165<e6>霅<82>==================================================<e5><8d>恥靘雯蝡<bc>ttps://www.books.com.tw摰X<9c><b0><b7><bc><9a>886-2-2653-5588<e5><e7><9c>閰梧<bc><9a>886-2-2788-5008
##
##
嗯…..看到這句 “This is a mail to confirm your online order from Books.com.tw in Chinese Big5 code…” ,再看看那個 mail 的主體,我想也不意外啦
emails_body <- list() # 把各封的主體先拉出來
for(i in 1:8){
emails_body[i] <- body(searched_emails[[i]])[[1]]
}
emails_body <- lapply(emails_body,toUTF8) # 用 tmcn 套件的 toUTF8 轉
emails_body[[1]]
## [1] "*\r\n此信件為系統發出信件,請勿直接回覆,感謝您的配合。\r\n謝謝!\r\n*Dear Books.com.tw Member,Thank you for ordering from Books.com.tw!This is\r\na mail to confirm your online order from Books.com.tw in Chinese Big5 code\r\nIf you can not read this,you can go https://myaccount.books.com.tw/ to check\r\nyour transaction\r\nstatus.感謝您訂購博客來的商品!您的訂單編號20190220010064(銷貨單號:A201********)發票已開立,您選擇「二聯電子發票」(發票號碼:MM29******),發票不直接寄送。◎此通知函是通知博客來端貨品已發貨並完成發票開立,實際商品領貨或到貨需視貨運商實際配送狀況。◎電子發票依據財政部令「電子發票實施作業要點」開立。◎查詢發票明細請至「博客來會員專區-訂單查詢」 (https://myaccount.books.com.tw/)\r\n。\r\n為了保護您的個人資料安全,即日起我們將不在信函中顯示完整訂購/出貨明細,建議您可隨時登入博客來網站,至會員專區,查詢訂單、最新訊息或修改基本資料。如果您有任何問題,請您至博客來客服中心查詢相關訊息或來信給我們。因為用心,所以我們有自信可以給您最好的!<U+FFFD>€\r\n<U+FFFD> 博客來\r\n敬上========== 反詐騙!博客來提醒您「2不1求證」\r\n==========★不操作ATM-ATM並沒有解除分期付款的選項。★不透露信用卡資料-請勿隨意透露信用卡號與到期日。★求證相關單位-懷疑來電者身份,請撥警政署防詐騙專線165查證。==================================================博客來網站:https://www.books.com.tw客服專線:886-2-2653-5588傳真電話:886-2-2788-5008\r\n\r\n"
OK ! 看樣子解決了
trash_message(id = email_ids[8]) # 嘗試把一封 mail 丟進垃圾桶吧
## Id: 159bb29933dc244f
## To:
## From:
## Date:
## Subject:
##
看樣子成功丟進垃圾桶囉