Mengambil script R dari sebuah artikel di <Rpubs.com> tanpa melakukan copy-paste manual.
Package R yang akan digunakan hanya rvest (dan dependencies-nya).
library(rvest)
Mungkin Anda pernah menemukan sebuah artikel tentang melakukan suatu analisis data di Rpubs.com. Rpubs adalah sebuah situs yang dapat digunakan untuk menulis artikel, khusunya tentang R, seperti layaknya sebuah blog yang disediakan oleh RStudio. Anda dapat menulis artikel dan mem-publish-nya ke Rpubs dengan menggunakan RMarkdown di RStudio.
Misalnya ada sebuah artikel yang menarik perhatian Anda dan ingin mencobanya dengan menggunakan script yang penulis artikel tersebut buat. Karena artikel yang di-publish di Rpubs bersifat terbuka untuk umum, maka bukan sebuah pelanggaran jika Anda meng-copy script yang ada.
Sebuah pertanyaan kemudian muncul. Bisakah saya meng-copy semua script yang ada di artikel tersebut tanpa melakukan copy-paste manual \(\Rightarrow\) block-copy-paste? Jika script yang ingin di-copy cukup banyak atau bahkan sangat banyak, maka akan cukup merepotkan. Jika Anda hanya ingin mengambil script saja dari artikel tersebut, maka berikut ini cara yang dapat Anda lakukan dengan script sederhana langsung dari R dan disimpan ke dalam sebuah file *.txt.
Setelah mendapatkan artikel yang Anda inginkan, copy alamat artikel tersebut. Misalnya saya akan mengambil script dari artikel http://rpubs.com/aephidayatuloh/sendgmail.
Pertama, Anda perlu mengambil atau “membaca” html dari artikel tersebut. Halam yang muncul tidak bisa langsung Anda ambil script-nya karena yang ditampilkan adalah hasil dari javascript. Jika Anda inspect halaman tersebut, Anda akan di arahkan ke sebuahh node/tag <iframe src="//rstudio-pubs-static.s3.amazonaws.com/515826_0fa137fa3ff040d38d0e0b2725ce02bc.html">. Dari link inilah Anda dapat mengambil script tersebut. Cara mendapatkan link dari tag iframe tersebut dapat dilakukan dengan script berikut.
url <- "http://rpubs.com/aephidayatuloh/sendgmail"
pg <- url %>% read_html()
iframe_link <- pg %>%
html_nodes("body") %>%
html_nodes("div#pagebody") %>%
html_nodes("div#payload") %>%
html_nodes("iframe") %>%
html_attr("src") %>%
paste0("http:", .)
iframe_link
[1] "http://rstudio-pubs-static.s3.amazonaws.com/515826_0fa137fa3ff040d38d0e0b2725ce02bc.html"
Jika Anda buka halaman tersebut, sekilas tidak ada perbedaan kecuali pada bagian header dan footer yang menghilang. Kemudian Anda perlu membaca halaman tersebut dan mengambil script di sana dengan script berikut.
code <- iframe_link %>%
read_html() %>%
html_nodes("pre") %>%
html_text()
code
[1] "# install.packages(\"gmailr\")\r\n# # or\r\n# devtools::install_github(\"jimhester/gmailr\")\r\nlibrary(gmailr)"
[2] "msgbody <- \"Hi, %s.\"\r\nmsg <- mime() %>%\r\n from(\"your@gmail.com\") %>%\r\n to(\"send_to@email.com\") %>%\r\n text_body(sprintf(msgbody, \"Aep Hidayatuloh\"))"
[3] "msg %>% \r\n send_message()"
[4] "# Use a local file to cache OAuth access credentials between R sessions?\r\n# 1: Yes\r\n# 2: No\r\n# \r\n# Selection: "
[5] "Authentication complete. Please close this page and return to R."
[6] "Id: <id>\r\nTo: \r\nFrom: \r\nDate: \r\nSubject:"
Di halaman ini terdapat 6 blok script-like, termasuk output dari R sehingga menjadi 6 elemen di vector tersebut. Jika Anda ingin script R saja yang diambil, maka tambahkan class r pada tag pre.
code <- iframe_link %>%
read_html() %>%
html_nodes("pre.r") %>%
html_text()
code
[1] "# install.packages(\"gmailr\")\r\n# # or\r\n# devtools::install_github(\"jimhester/gmailr\")\r\nlibrary(gmailr)"
[2] "msgbody <- \"Hi, %s.\"\r\nmsg <- mime() %>%\r\n from(\"your@gmail.com\") %>%\r\n to(\"send_to@email.com\") %>%\r\n text_body(sprintf(msgbody, \"Aep Hidayatuloh\"))"
[3] "msg %>% \r\n send_message()"
Setelah itu Anda simpan ke dalam file text.
writeLines(code, con = "code.txt")
Terakhir Anda dapat merapihkan dan merubah script tersebut sesuai dengan kebutuhan Anda.