Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 必要なパッケージ
- library(dplyr)
- library(xml2)
- library(rvest)
- library(readr)
- # 対応しているWebサイトと関数
- # 1. retest_qt... qiita.com
- # 2. retest_gh... github.com
- # 3. retest_so... stackoverflow.com
- retest_qt <- function(url, rank)
- {
- # 1. qiita.com でのコードまでのCSSパス
- path <- 'div .code-frame .highlight pre'
- # 2. コード部分を指定して.Rファイルを一時フォルダ内に作る
- cat(html_text(
- html_nodes(read_html(x = url),
- css = path)[rank]),
- file = tempfile(pattern = paste(rank, "retest", sep = "_"), fileext = ".r"))
- # 3. 2.で作成した一時ファイルまでのパス
- tmp.file.path <- paste(tempdir(), grep(pattern = paste(rank, "retest", sep = "_"), ".r$",
- x = list.files(tempdir()),
- value = TRUE), sep = "/")
- # 4. Rファイルをsourceとして実行。実行後は削除する
- tryCatch(
- {
- source(file = tmp.file.path, echo = TRUE)
- }, error = function()
- {
- file.remove(tmp.file.path)
- },
- finally = file.remove(tmp.file.path)
- )
- }
- retest_gh <- function(url, rank, lang = c("R", "plain"), execute = TRUE)
- {
- if (lang == "R") {
- path <- 'div .highlight.highlight-R'
- } else if (lang == "plain") {
- path <- 'pre code'
- }
- cat(html_text(
- html_nodes(read_html(x = url),
- css = path)[rank]),
- file = tempfile(pattern = paste(rank, "retest", sep = "_"), fileext = ".r"))
- tmp.file.path <- paste(tempdir(), grep(pattern = paste(rank, "retest", sep = "_"), ".r$",
- x = list.files(tempdir()),
- value = TRUE), sep = "/")
- tryCatch(
- {
- source(file = tmp.file.path, echo = TRUE)
- }, error = function()
- {
- file.remove(tmp.file.path)
- },
- finally = file.remove(tmp.file.path)
- )
- }
- retest_so <- function(url, rank)
- {
- path <- 'pre code'
- cat(html_text(
- html_nodes(read_html(x = url), css = path)[rank]),
- file = tempfile(pattern = paste(rank, "retest", sep = "_"), fileext = ".r"))
- tmp.file.path <- paste(tempdir(), grep(pattern = paste(rank, "retest", sep = "_"), ".r$",
- x = list.files(tempdir()),
- value = TRUE), sep = "/")
- tryCatch(
- {
- source(file = tmp.file.path, echo = TRUE)
- }, error = function()
- {
- file.remove(tmp.file.path)
- },
- finally = file.remove(tmp.file.path)
- )
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement