有谁知道如何使用R制定以下SOAP请求?
POST /API/v201010/AdvertiserService.asmx HTTP/1.1
Host: advertising.criteo.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "https://advertising.criteo.com/API/v201010/clientLogin"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<clientLogin xmlns="https://advertising.criteo.com/API/v201010">
<username>string</username>
<password>string</password>
<source>string</source>
</clientLogin>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud) 所以我不是100%确定这是可能的,但我在Ruby和python中找到了一个很好的解决方案,所以我想知道类似的东西是否可以在R中起作用
基本上,给定一个URL,我想呈现该URL,将呈现的屏幕截图作为.png,并将屏幕截图保存到指定的文件夹.我想在无头的linux服务器上做所有这些.
我最好的解决方案是在运行CutyCaptsystem
这样的工具,还是存在一个基于R的工具集来帮我解决这个问题?
我有一个大约13,000个URL的列表,我想从中提取信息,但是,并非每个URL实际存在.事实上,大多数人没有.我刚尝试通过所有13,000个网址,html()
但需要很长时间.我试图找出如何在解析它们之前查看url是否实际存在html()
.我已经尝试使用httr
和GET()
功能,以及rcurls
和url.exists()
功能.由于某种原因,即使URL确实存在,也url.exist()
始终返回FALSE
值,并且我使用的方式GET()
总是返回成功,我认为这是因为页面被重定向.
以下URL表示我正在解析的页面类型,第一个不存在
urls <- data.frame('site' = 1:3, 'urls' = c('https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-1&unit=SLE010',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=HMM202',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=SLE339'))
urls$urls <- as.character(urls$urls)
Run Code Online (Sandbox Code Playgroud)
因为GET()
,问题是第二个URL实际上并不存在,但它被重定向,因此返回"成功".
urls$urlExists <- sapply(1:length(urls[,1]),
function(x) ifelse(http_status(GET(urls[x, 'urls']))[[1]] == "success", 1, 0))
Run Code Online (Sandbox Code Playgroud)
因为url.exists()
,即使第一个和第三个URL确实存在,我也会返回三个FALSE.
urls$urlExists2 <- sapply(1:length(urls[,1]), function(x) url.exists(urls[x, 'urls']))
Run Code Online (Sandbox Code Playgroud)
我查了一下这两个职位1,2,但我宁愿不使用的用户代理,只是因为我不知道如何找到我的,或者它是否会使用其他计算机上的验证码不同人的变化.因此,使代码更难以被其他人接收和使用.两篇帖子的答案建议使用GET()
in httr
.这似乎GET()
是首选的方法,但我需要弄清楚如何处理重定向问题.
在解析它们之前,任何人都可以建议在R中测试URL的存在html()
吗?我也很乐意为此问题提出任何其他建议的工作.
更新:
在查看了返回的值后,GET()
我想出了一个解决方法,详细了解答案.
我正在尝试使用此处的说明从命令行创建OAuth令牌.我可以curl
从命令行使用,并获得正确的响应
curl -u 'username:pwd' -d '{"scopes":["user", "gist"]}' \
https://api.github.com/authorizations
Run Code Online (Sandbox Code Playgroud)
现在,我想在R中使用RCurl
或复制相同的内容httr
.这是我尝试过的,但两个命令都返回错误.谁能指出我在这里做错了什么?
httr::POST(
'https://api.github.com/authorizations',
authenticate('username', 'pwd'),
body = list(scopes = list("user", "gist"))
)
RCurl::postForm(
uri = 'https://api.github.com/authorizations',
.opts = list(
postFields = '{"scopes": ["user", "gist"]}',
userpwd = 'username:pwd'
)
)
Run Code Online (Sandbox Code Playgroud) 我正在尝试自动登录英国的数据存档服务.该网站显然值得信赖.不幸的是,RCurl
与httr
在SSL验证休息.我的网络浏览器不会发出任何警告.我可以通过使用来解决这个问题ssl.verifypeer = FALSE
,RCurl
但我想了解发生了什么?
# breaks
library(httr)
GET( "https://www.esds.ac.uk/secure/UKDSRegister_start.asp" )
# breaks
library(RCurl)
cert <- system.file("CurlSSL/cacert.pem", package = "RCurl")
getURL("https://www.esds.ac.uk/secure/UKDSRegister_start.asp",cainfo = cert)
# works
library(RCurl)
getURL(
"https://www.esds.ac.uk/secure/UKDSRegister_start.asp" ,
.opts = list(ssl.verifypeer = FALSE)
) # note: use list(ssl.verifypeer = FALSE,followlocation=TRUE) to see content
Run Code Online (Sandbox Code Playgroud) 我想通过API代码从MARVEL DEVELOPER中提取数据并对其进行分析(使用R).
我从MARVEL网站获得以下网址:http://gateway.marvel.com:80/v1/public /characters?apikey = f389fcb49ad574e10ca570867f4bfa43
我使用httr包来收集数据:
install.packages("httr")
library(httr)
> url <- GET("http://gateway.marvel.com:80/v1/public/characters?orderBy=name&limit=100&apikey=f389fcb49ad574e10ca570867f4bfa43")
> content(url)
$code
[1] "MissingParameter"
$message
[1] "You must provide a hash."
Run Code Online (Sandbox Code Playgroud)
我想将所有这些数据提取到R.我应该做什么/读什么?
谢谢.
我正在尝试访问突出显示的响应标题:下面的屏幕截图中的位置文本仅使用R及其基于curl的webscraping库.通过访问http://www.worldvaluessurvey.org/WVSDocumentationWVL.jsp,点击任何数据文件的下载,并填写协议表单,可以轻松地在任何Web浏览器中找到这一点.下载在Web浏览器中自动开始.
我相信获取有效cookie的唯一方法是library(curlconverter)
(参见如何使用R下载半破javascript asp函数后面的文件)但该答案似乎不足以以编程方式确定文件的http url,只有在已知的压缩文件下载才能下载.
我在下面用不同的httr和curlconverter代码粘贴了一些代码,但我在这里遗漏了一些东西.同样,唯一的目标是以编程方式完全确定R(跨平台)内的突出显示文本.
library(curlconverter)
library(httr)
browserPOST <-
"curl 'http://www.worldvaluessurvey.org/AJDownload.jsp'
-H 'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
-H 'Accept-Encoding:gzip, deflate'
-H 'Accept-Language:en-US,en;q=0.8'
-H 'Cache-Control:max-age=0'
--compressed -H 'Connection:keep-alive'
-H 'Content-Length:188'
-H 'Content-Type:application/x-www-form-urlencoded'
-H 'Cookie:ASPSESSIONIDCASQAACD=IBLGBFOAEHFILMMJJCFEOEMI; JSESSIONID=50DABDEDD0B2FC370C415B4BD1855260; __atuvc=13%7C45; __atuvs=58224f37d312c42400c'
-H 'Host:www.worldvaluessurvey.org'
-H 'Origin:http://www.worldvaluessurvey.org'
-H 'Referer:http://www.worldvaluessurvey.org/AJDownloadLicense.jsp'
-H 'Upgrade-Insecure-Requests:1'
-H 'User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'"
form_data <-
list(
ulthost = "WVS" ,
CMSID = "" ,
LITITLE = "" ,
LINOMBRE …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的Shiny应用程序重定向到另一个页面.我正在使用httr
发送GET
请求并查看用户是否已登录.如果不是,我想将其重定向到另一个链接.
我可以只使用R/Shiny做到这一点,还是需要一些额外的库?
样品:
library(httr)
library(shiny)
shinyServer(function(input, output) {
rv <- reactiveValues()
rv$mytoken = session$request$token
observeEvent(input$button1, {
rv$a <- GET("my.url:3405/authtoken",
add_headers(
.headers = c("token" = rv$mytoken)
))
if (rv$a$status_code == 200) {
} else {
# redirect magic
}
})
}
shinyUI(fluidPage(
actionButton(button1, "btn")
))
Run Code Online (Sandbox Code Playgroud) 我在我的脚本中登录时遇到问题.尽管我在stackoverflow上找到了所有其他好的答案,但没有一个解决方案适合我.
我正在为我的博士研究抓一个网络论坛,其网址是http://forum.axishistory.com.
我想要抓取的网页是成员列表 - 列出所有成员个人资料的链接的页面.如果登录,则只能访问成员列表.如果您尝试在不登录的情况下访问成员列表,则会显示登录表单.
成员列表的URL是:http://forum.axishistory.com/memberlist.php.
我试过httr-package:
library(httr)
members <- GET("http://forum.axishistory.com/memberlist.php", authenticate("username", "password"))
members_html <- html(members)
Run Code Online (Sandbox Code Playgroud)
输出是登录表单.
然后我尝试了RCurl:
library(RCurl)
members_html <- htmlParse(getURL("http://forum.axishistory.com/memberlist.php", userpwd = "username:password"))
members_html
Run Code Online (Sandbox Code Playgroud)
输出是登录表单 - 再次.
然后我尝试了这个主题的list()函数 - 在R中刮掉受密码保护的网站:
handle <- handle("http://forum.axishistory.com/")
path <- "ucp.php?mode=login"
login <- list(
amember_login = "username"
,amember_pass = "password"
,amember_redirect_url =
"http://forum.axishistory.com/memberlist.php"
)
response <- POST(handle = handle, path = path, body = login)
Run Code Online (Sandbox Code Playgroud)
然后再次!输出是登录表单.
我正在研究的下一件事是RSelenium,但经过所有这些尝试,我试图弄清楚我是否可能遗漏了某些东西(可能是完全明显的东西).
我在这里查看了其他相关帖子,但无法弄清楚如何将代码应用于我的案例:
我正在尝试使用R从API中获取文档.在此文章中了解该过程的说明.我一直在按照上述步骤取得部分成功,但仍然无法访问文档内容的最后一步:
- 找到您感兴趣的文件归档(例如,为公司制作归档历史请求1).在"链接"字段中解析对文档链接的响应:{"document_metadata":"链接URI片段在这里"}.
没问题:
library(httr)
library(jsonlite)
library(openssl)
### retrieving filing history ####
company_num = 'FC013908'
key = 'my_key'
fh_path = paste0('/company/', str_to_upper(company_num), "/filing-history")
fh_url <- modify_url("https://api.companieshouse.gov.uk/", path = fh_path)
fh_test <- GET(fh_url, authenticate(key, "")) #status_code = 200
fh_parsed <- jsonlite::fromJSON(content(fh_test, "text",encoding = "utf-8"), flatten = TRUE)
docs <- fh_parsed$items
Run Code Online (Sandbox Code Playgroud)
完成.
2对于给定的文档,通过CH Document API3请求文档元数据.解析响应以获取可用的文档(mime)类型以及指向实际文档数据的链接(文档URI片段).
这里没问题:
md_meta_url = docs$links.document_metadata[1]
key_pass <- paste0(key,":")
decoded_auth <- paste0('Basic ', base64_encode(key_pass))
md_test <- GET(md_meta_url,
add_headers(Authorization = decoded_auth)
)
md_test #status_code = 200!
md_parsed <- jsonlite::fromJSON(content(md_test, …
Run Code Online (Sandbox Code Playgroud)