Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从批处理文件执行rga.open(instance=“ga”,其中=“~/ga.rga”)时出错_R_Batch File_Google Analytics - Fatal编程技术网

从批处理文件执行rga.open(instance=“ga”,其中=“~/ga.rga”)时出错

从批处理文件执行rga.open(instance=“ga”,其中=“~/ga.rga”)时出错,r,batch-file,google-analytics,R,Batch File,Google Analytics,我正在尝试通过批处理文件运行r脚本,以便可以计划定期运行r脚本。R脚本从Google Analytics检索数据,并将数据转储到SQL Server数据库中 R脚本在R Studio下运行得非常好,但当我尝试通过批处理文件执行相同的R脚本时,它无法给出以下错误- 正文\u configbody中出错,多部分:找不到对象重定向.uri 呼叫rga.open。。。修改_-config->setdiff->as.vector->body_-config 停止执行 我的批处理文件如下所示: C:\Pro

我正在尝试通过批处理文件运行r脚本,以便可以计划定期运行r脚本。R脚本从Google Analytics检索数据,并将数据转储到SQL Server数据库中

R脚本在R Studio下运行得非常好,但当我尝试通过批处理文件执行相同的R脚本时,它无法给出以下错误-

正文\u configbody中出错,多部分:找不到对象重定向.uri 呼叫rga.open。。。修改_-config->setdiff->as.vector->body_-config 停止执行

我的批处理文件如下所示: C:\Program Files\R\R-3.0.2\bin\Rscript.exe C:\Users\sc\Documents\R Sources\SocialMedia\ExtractBlogStats.R 停顿

我的Rscript看起来像:

library(devtools)

#install_github("rga", "skardhamar")
library(rga)

#install.packages("RODBC")
library(RODBC)

myconn <- odbcDriverConnect('driver={SQL Server};server=localhost;database=SocialMedia;trusted_connection=true')


options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))

#rga.open(instance="ga")


rga.open(instance="ga", where="~/ga.rga")


id <- "XXXXXXXX" # Valid ID in actual script file

end <- Sys.Date() - 1
start <- end - 1

by.practice <- ga$getData(id, start.date = start, end.date= end, 
                        metrics = "ga:sessions,ga:totalEvents",
                        dimensions = "ga:eventAction",
                        sort = "",
                        filters = "",
                        segment = "",
                        start = 1,
                        max = 1000)
步骤: RStudio中执行的rga.openinstance=ga

这让我找到了一个URL并生成了一个代码

c在RStudio控制台中粘贴代码

d本地文件系统上保存的ga对象-savega,file=C:/Users/sc/Documents/R 资料来源/社交媒体/ga.rga

e从函数-extract.blog.stats.by.practice中删除了rga.open调用

extract.blog.stats.by.practice = function(id = "XXXXXXX") {
library(devtools)
library(rga)
library(RODBC)
myconn <- odbcDriverConnect('driver={SQL Server};server=localhost;database=SocialMediaSink;trusted_connection=true')

options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))

#rga.open(instance="ga")
setwd("C:/Users/sc/Documents/R Sources/SocialMedia")

end <- Sys.Date() - 1
start <- end - 1

by.practice <- NULL

by.practice <- ga$getData(id, start.date = start, end.date= end, 
                        metrics = "ga:sessions,ga:totalEvents",
                        dimensions = "ga:eventAction",
                        sort = "",
                        filters = "",
                        segment = "",
                        start = 1,
                        max = 1000)


# Convert Numeric To Integer
practice <- by.practice[,1]
sessions <- as.integer(by.practice[,2])
totalEvents <- as.integer(by.practice[,3])

# Create a dataframe that mimics the structure of the database table - BlogPracticeStats
practice.stats <- data.frame(practice, end, sessions, totalEvents, stringsAsFactors = FALSE)

# Assign columnnames that match the table's column name in the database
colnames(practice.stats) <- c("Practice", "Date", "Sessions", "TotalEvents")

# Insert rows in the table
sqlSave(myconn, practice.stats, "BlogPracticeStats", safer = FALSE, append = TRUE, rownames = FALSE)
odbcClose(myconn)

 }
执行批处理文件

"C:\Program Files\R\R-3.0.2\bin\Rscript.exe" "C:\Users\sc\Documents\R Sources\SocialMedia\RunFunction.r"
pause

我想发布整个解决方案-

步骤1-创建初始身份验证对象

#Initial Objects
# dev tools is needed because we need to use it's function install_github

# install.packages("devtools")
library(devtools)

# install_github("rga", "skardhamar")
library(rga)

library(RODBC)

config.folder.location <- "C:\\Users\\sc\\Documents\\R Sources\\SocialMedia\\Config"

working.directory <- config.folder.location

rga.open(instance="ga")

save(ga, file="C:/Users/sc/Documents/R Sources/SocialMedia/config/ga.rga")


connection.string <- 'driver={SQL Server};server=localhost;database=SocialMedia;trusted_connection=true'

save(connection.string,  file = paste0(config.folder.location,'\\connection.string '))


# Google Analytics ID for ur site
google.analytics.id <- "XXXXXX"

save(google.analytics.id, file="google.analytics.id")

这只是一个猜测,但你是在代理人后面工作吗?这也许可以解释为什么它在RStudio中工作,而不是作为批处理脚本调用。您是否在运行RStudio的同一台机器上运行批处理文件?作为同一个用户?路径中的~用于特定于用户的主页,如果批处理脚本由调度程序运行,则可能会为~使用不同的用户主页。也许可以尝试在那里设置完整路径?@MrFlick-是的,我正在运行RStudio的同一台机器上以同一用户的身份运行批处理文件。批处理文件中的两个路径都是完整路径。你是在暗示什么吗?@user3749083它只是看起来像where=~/ga.rga可能会很麻烦,因为有一个地方它使用了缓存身份验证,而在另一个地方它没有。只需检查是否可以打印路径。展开~/ga.rga以查看它的解析位置。如果在rga.open之后仍然出现错误,您可能还需要添加一个回溯,以了解它当时试图执行的操作。@MrFlick-I包括path.expand,并注意到在RStudio C:/Users/sc/Documents/ga.rga与批处理文件C:\\Users\\sc\\Documents/ga.rga中运行时,值有所不同。我阅读了where子句,发现如果要在本地存储实例,可以通过添加where属性来实现。因此,我修改了我的代码来指定显式路径,而不是tilde[where=C:/Users/sc/Documents/R Sources/SocialMedia/ga.rga],但它没有帮助。此外,我还添加了setwdC:/Users/sc/Documents/R Sources/SocialMedia,但这也没有帮助。
#Initial Objects
# dev tools is needed because we need to use it's function install_github

# install.packages("devtools")
library(devtools)

# install_github("rga", "skardhamar")
library(rga)

library(RODBC)

config.folder.location <- "C:\\Users\\sc\\Documents\\R Sources\\SocialMedia\\Config"

working.directory <- config.folder.location

rga.open(instance="ga")

save(ga, file="C:/Users/sc/Documents/R Sources/SocialMedia/config/ga.rga")


connection.string <- 'driver={SQL Server};server=localhost;database=SocialMedia;trusted_connection=true'

save(connection.string,  file = paste0(config.folder.location,'\\connection.string '))


# Google Analytics ID for ur site
google.analytics.id <- "XXXXXX"

save(google.analytics.id, file="google.analytics.id")
# dev tools is needed because we need to use it's function install_github
# install.packages("devtools")
library(devtools)

# install_github("rga", "skardhamar")
library(rga)

# install.packages("RODBC")
library(RODBC)


#*********************************************************************************************************************
# Read arguments and store them in variables -- START
#*********************************************************************************************************************
args <- commandArgs(trailingOnly = TRUE)

# First argument is read as working directory (location where config folder resides)
working.directory <- as.character(args[1])

if (length(args) >= 2){
  # Second argument is used as start date in GA Query
  start <- as.Date(args[2])
}else{
 start <- Sys.Date() - 1
}

if (length(args) == 3){
# Third argument is used as end date in GA Query  
 end <- as.Date(args[3]) 
}else{
 end <- start
}

#*********************************************************************************************************************
# Read arguments and store them in variables -- END
#*********************************************************************************************************************

#*********************************************************************************************************************
# Use arguments values to setup the environment and load initial objects -- START
#*********************************************************************************************************************

# Set working directory to the passed value
setwd(working.directory)

# load Google Analytics ID from Config folder
load("google.analytics.id")

# Load SQL Connection String
load("connection.string")

options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))

# load pre-authentcated Google Analytics object "ga"
load("ga.rga")

# Check if the ga token has expired. If it has then refersh token.
if (ga$isTokenExpired()){
  ga$refreshToken()
}

#*********************************************************************************************************************
# Use arguments values to setup the environment and load initial objects -- END
#*********************************************************************************************************************

# Runs Google Analytics query for the provided id and limits data by date (i.e., start.date = date and end.date = date)
# Wrapped in try/catch to handle scenarios when GA does not return any rows



blog.stats = tryCatch({
 ga$getData(google.analytics.id, 
            start.date = start, 
            end.date = end, 
            metrics = "ga:sessions, ga:users, ga:newUsers, ga:sessionDuration, ga:timeOnPage, ga:pageviews",
            dimensions = "ga:date, ga:pageTitle, ga:medium, ga:hasSocialSourceReferral, ga:source, ga:referralPath",
            sort = "",
            filters = "",
            segment = "",
            start = 1,
            max = 10000)           
 }, warning = function(w) { 
    # print("warning")
    return(NULL)
 }, error = function(e) {
    # print("error")
    return(NULL)
 }, finally = {  
    # print("inside Finally")
}
)

if(length(blog.stats)>0 ){
# Convert Numeric To Integer
  blog.stats[,"sessions"] <- as.integer(blog.stats[,"sessions"])
  blog.stats[,"users"] <- as.integer(blog.stats[,"users"])
  blog.stats[,"newUsers"] <- as.integer(blog.stats[,"newUsers"])
  blog.stats[,"sessionDuration"] <- as.integer(blog.stats[,"sessionDuration"])
  blog.stats[,"timeOnPage"] <- as.integer(blog.stats[,"timeOnPage"])
  blog.stats[,"pageviews"] <- as.integer(blog.stats[,"pageviews"])


# Assign columnnames that match the table's column name in the database
colnames(blog.stats) <- c("Date", "PageTitle", "Medium", "HasSocialSourceReferral", "TrafficSource", "ReferralPath", "Sessions", "Users", "NewUsers", "SessionDurationSeconds", "TimeOnPageSeconds", "PageViews" )

# Open a Connection
myconn <- odbcDriverConnect(connection.string)

# Prepare Delete Query
delete.query <- paste0("DELETE  FROM  GoogleAnalyticsBlogStats WHERE Date >='",start,"' AND Date <='",end,"'")

# Execute Delete Query
sqlQuery(myconn,delete.query,  errors= FALSE)


# Insert rows in the table
sqlSave(myconn, blog.stats, "GoogleAnalyticsBlogStats", safer = FALSE, append = TRUE, rownames = FALSE)

# Close the connection to the database
odbcClose(myconn)
}
"C:\Program Files\R\R-3.1.0\bin\Rscript.exe" "D:\Social Media Analytics\R Scripts\ExtractGoogleAnalyticsBlogStats.r" "D:\\Social Media Analytics\\R Scripts\\Config"