ðŠRStudioã§ã®äœæ¥ç¶æ³ãèªåã§èšé²ããWakaTimeãã©ã°ã€ã³ãäœæããŸãã
æ¥ã ã®ã§ãŠã ãã±ã³ãã¥ãŒã«è¿œãããçããã鲿ã©ãã§ããã鲿ãå¯èŠåã§ãããšæ¥œããã§ããä»äºã«å¯Ÿããææ¬²ãé«ããããã«è¯ãã§ãããããããªããšãå¯èœã«ããWakaTime ãšãããŠã§ããµãŒãã¹ããããŸããWakaTimeã§ã¯æ®æ®µã³ãŒãã£ã³ã°ãªã©ã§äœ¿çšããŠãããšãã£ã¿ã«å°çšã®ãã©ã°ã€ã³ãå°å ¥ããããšã§ã³ãŒããã©ã®ãããæžããããã©ã®ãããžã§ã¯ãã®ã©ã®ãã©ã³ãã§ã©ããããã®æéäœæ¥ãããŠããããããããŸãã
åèèšäº
ãã©ã°ã€ã³ã察å¿ããŠãããšãã£ã¿ã¯ãã®ããŒãžã«ããéãã§ããAtomãSublime Text 2ãEmacsãªã©æåã©ããã«ã¯å¯Ÿå¿ããŠããŸãããã ããããèå¿ã®RStudioã®ãã©ã°ã€ã³ã¯ãŸã éçºãããŠããªãæ§åã§ãã
...WakaTimeã¯äœ¿ããããããã©ãã©ã°ã€ã³ããªãããšããããã§éå
¬åŒã®WakaTimeãã©ã°ã€ã³ãRããã±ãŒãžãšããŠäœããŸãããWakaTimeã®R(RStudio)çšãã©ã°ã€ã³ãšããããšã§{wakatimer}
ã§ããPythonã䜿ã£ãŠãããšããå
¬åŒã®åœä»€ãç¡èŠããŠå®å
šã«Rã§ã§ããŠããŸãã
åæ§ã«ãRã§ã®äœæ¥æéãèšé²ããããã±ãŒãžãšããŠ@dichika ãããäœæããã{timecard}
ããããŸãã
æºå
å©çšããæã«ä»¥äžã®é ç®ã«ã€ããŠçšæããå¿ èŠããããŸãã
- WakaTimeã®ã¢ã«ãŠã³ã
- ã¢ã«ãŠã³ãäœææã«äžããããAPIããŒ
WakaTimeãžã®OAuth 2.0èªèšŒã«çšããã¢ããªã±ãŒã·ã§ã³ã®ç»é²
- ã¢ããªã±ãŒã·ã§ã³ã®ç»é²ã§ã¯ãAuthorized Redirect URIsã®ãšããã"http://localhost:1410"ã«ããŠãããŠãã ããããããŠãã®äžã«ãã%22App) ID"ãš"App Secret"ã®å€ãå¿ èŠã«ãªããŸãã
GitHubãã
{wakatimer}
ããã±ãŒãžã®ã€ã³ã¹ããŒã«devtools::install_github("uribo/wakatimer")
wakatimerã®äœ¿ãæ¹
ããã±ãŒãžãèªã¿èŸŒãã§ãwrite_scope()
ãšãã颿°ãå®è¡ããã ãã§ãã
詳ãã説æã¯ä»¥äžã®éãã«ãªããŸãã
ãŸãèå¿ã®ããã±ãŒãžãèªã¿èŸŒãã§ãã ããã
library(wakatimer) # Next, to run `write_scope()` and # authentication for file status record # :)
ããã±ãŒãžãèªã¿èŸŒããšãWakaTimeã«ããŒã¿ãéãããã«å¿
èŠãªèªèšŒãè¡ãwrite_scope()
ãããããã«ã¡ãã»ãŒãžãåºãŸããããã±ãŒãžãã€ã³ã¹ããŒã«ããŠããæåã®write_scope()
ã§ã¯WakaTimeã®èªèšŒãæ±ããããŸãïŒãããžã§ã¯ãããšã«èªèšŒãå¿
èŠïŒãwrite_scope()
ã«ã¯åŒæ°ãšããŠapp.idãšapp.secretãçšæãããŠããŸããããã«æž¡ãå€ã¯æºåã®ãšããã§ååŸããã¢ããªã®å€ã«ãªããŸãã
æ¯åå ¥åããã®ãé¢åãªã®ã§ãªã¹ã¹ã¡ã®äœ¿ãæ¹ãšããŠã.Rproileã«æ¬¡ã®ãããªèšè¿°ãããŠãããšè¯ãã§ãã
Sys.setenv(WAKATIME_KEY = "<your api key>", WAKATIME_ID = "<application id>", WAKATIME_SECRET = "<application secret>")
ãšããããã§æ¹ããŠwrite_scope()
ã宿œããŸãã
write_scope() # ð»R (3.2.3) ðµRStudio (0.99.868) ðŠwakatimer (0.1.2)
ããã§æºåå®äºã§ãããããããã¡ã€ã«ã®å€æŽãèšé²ããŠããä»çµã¿ã§ããä»ã«å¿
èŠãªããšã¯ãããŸãããããšã¯æ®æ®µéãRStudioã§ã³ãŒããæžããŠãããŸããq()
ã§RStudioãçµäºãããšãããŒã¿ãéä¿¡ãããŸãã®ã§ç¹ã«æ°ã«ãã䜿ãç¶ããããšãã§ããŸããããã±ãŒãžãèªã¿èŸŒãã ã ãã ã©èšé²ããªãç¹ã ãæ³šæããŠãã ããã
ã€ã³ã¿ãŒãããã«æ¥ç¶ãããŠããªãæã¯ããŒã«ã«ããŒã¿ããŒã¹ã«ããŒã¿ãä¿åããŠãããŠã次åããããã¯ãŒã¯æ¥ç¶ãããæã«write_scope()
ã宿œãããšããŒã¿ãWakaTimeãžéãããŸãã
APIã䜿ã£ã鲿ã®å¯èŠå
{wakatimer}
ããã±ãŒãžã§ã¯ãWakaTimeãæäŸããAPIãã©ãããã颿°ãçšæããŠããŸãããªã®ã§Räžã§ãé²æç¶æ³ã®ç¢ºèªãå¯èœã§ãã
wakatimer:::wt_api(resource = "heartbeats", key = Sys.getenv("WAKATIME_KEY"), param = list(date = format(Sys.Date(), "%m/%d/%Y"), time = "time", "entity")) %>% .$data %>% tail() %>% knitr::kable(format = "markdown")
entity | id | time | type | |
---|---|---|---|---|
6 | ~/git/r_pkg/wakatimer/vignettes/wakatimer-workflow.Rmd | adcbc187-8d5f-4583-a21e-d332dd8853ee | 1454080409 | file |
7 | ~/git/r_pkg/wakatimer/R/wt_sync.R | c42f025e-7526-49b2-ba90-572b526e4f60 | 1454080804 | file |
8 | ~/git/r_pkg/wakatimer/R/wt_sync.R | a701e936-71c7-4878-8335-be4e3643f01a | 1454080811 | file |
9 | ~/git/hatena_blog/160130_wakatimer.Rmd | ce3ea352-f1f4-493e-a5d2-aefd8f05fce1 | 1454080888 | file |
10 | ~/git/hatena_blog/160130_wakatimer.Rmd | 11295336-55f2-4622-8982-d49274d2abd0 | 1454080898 | file |
11 | ~/git/hatena_blog/160130_wakatimer.md | 76898711-1a7c-4bb5-8c27-c3136f5c48bf | 1454080982 | file |
ããŒã¿ããšã£ãŠããŠãããRã®æ¬é ãçºæ®ãããšèšã£ãŠãè¯ãã®ã§ãããã¯åãå ¥ããããšãããªã®ã§ãããäžéãã®APIãå©ãæ¹æ³ã¯vignettesã«æžããŠããŸããããŸã å®å šã«ã¯ã§ããŠããŸãããæ¬¡ã®ããŒãžã§ã³ãŸã§ã«WakaTimeã®ããã·ã¥ããŒãã§è¡šç€ºã§ããå 容ã«ã€ããŠã¯é¢æ°ã§äžçºè¡šç€ºã§ããããã«ãããã§ãã
諞泚æ
- éå ¬åŒã®ãã©ã°ã€ã³ãªã®ã§ãå©çšã®éã¯ããããæ°ãä»ããŠãã ãããå©çšã¯åèªã®è²¬ä»»ã§ã©ãã...
- æã æåãæªããã§ããæ£åžžã«POSTãããªããŠãããããã«ã³ãŒããæžããŠãã ããã
- Rã®çµäºãã¡ããŽã£ãšé ããªããŸãã
- 詊ããç°å¢ããšãŠãéå®çãªã®ã§å°ãªããããã°ããšã©ãŒããããŸããå ±åããã ããã°å¯Ÿå¿ããŸãã
{wakatimer}
ã§ã¯RStudioããã£ãŠãããæè¿éãããã¡ã€ã«ãã®æ å ±ãå©çšããŠããŸãããWindowsã®ãã¹ãããããŸãã...ãäžå¿èšå®ããŠããŸãããééã£ãŠãããããããŸããããã²ãç¥ãããã ããã