読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【R】RからChatworkAPIを叩いて計算終了を通知する

社内でChatworkが使われているのですが、Rの計算が終わったときに通知してくれると便利だと思い、 ChatworkのAPIを叩いて通知する関数を作ってみました。 chatworkにbotアカウントを用意し、計算終了時にメッセージを投稿させます。

こちらのコードを参考にしました。ありがとうございます。 qiita.com

APIの申請方法等はChatworkの公式ドキュメントを見ましょう。 developer.chatwork.com

RCurlというライブラリを使えば割と簡単でした。

stackoverflow.com

しかし、ベクトルやリストの関数で引数があるもの( c( = )の部分とかlist(=, =) )が言語の中でどういう扱いなのか分かりません…。

library(utils)
library(RCurl)

setConfig <- function(roomid, token) {
  # 他の言語ならクラスを作ってset_urlやset_tokenなどのメソッドを作るところですが、
  # Rのクラスの仕組みがよく分からなかったのでとりあえずクロージャで実装しました。
  url <- paste0("https://api.chatwork.com/v1/rooms/", roomid, "/messages")
  httpheader <- c('X-ChatWorkToken' = token)
  return(
    function(message) {
      body <- utils::URLencode(paste0('body=', message))
      return(
        RCurl::postForm(url, .opts=list(httpheader=httpheader, postfields=body))
      )
    }
  )
}

postChatwork <- setConfig(405*****, '82*******') # 部屋のIDとアクセストークンを用意
postChatwork("hello chatwork!") # 投稿完了!
# 成功するとこんな値が返ってきます
# => [1] "{\"message_id\":985697220}"
#    attr(,"Content-Type")
#                                  charset 
#    "application/json"            "utf-8"