问题描述
情况:
我正在使用谷歌自定义搜索引擎、谷歌云平台和 R 来搜索给定术语出现的网页数量。由于给定术语的同义词存在,我正在尝试获取数量网页中出现的给定术语或其同义词(“或”在此处以其非排他的含义使用)。
问题:
我尝试用几种不同的方式来制定查询,所有这些都产生了不连贯的结果(即带有“term1”的网页数量>带有“term1”或“term2”的网页数量)。
以下是我尝试过的配方(此处 term1 = Alsophis antiguae,term2 = Alsophis leucomelas):
URL_1 <- paste0(URL,key,"&cx=",cx,"&q=\'",URLencode("Alsophis antiguae | Alsophis leucomelas"),"\'")
URL_2 <- paste0(URL,URLencode("Alsophis antiguae OR Alsophis leucomelas"),"\'")
URL_3 <- paste0(URL,"Alsophis%20antiguae","OR","Alsophis%20leucomelas","\'")
URL_4 <- paste0(URL,"%20OR%20","\'")
URL_5 <- paste0(URL,"\'","\'")
生成 URL 后,我运行以下行:
js <- fromJSON(base::url(URL_1))
问题:
搜索“term1”或“term2”的正确语法是什么。您能否提供网址的查询块作为示例(例如“&q='Alsophis%20antiguae'”)?
非常感谢
解决方法
如果有人感兴趣,正确的语法是 \"term1\"+OR\"term2\"
。
这种语法似乎也适用于 AND。
双引号可以正常工作,而单引号似乎会产生错误的结果。所以应该使用单引号来分隔字符串,而不是在查询中。
以下代码生成一个工作查询
term1 <- "aaaa"
term2 <- "bbbb"
dummy.query <- paste0("\"",term1,"\"","+OR",# works with "+AND"
"\"",term2,"\"")
然后,如果 key
是您的 API 密钥,而 cx
是您的自定义谷歌搜索引擎的 ID,则完整的工作网址为:
URL = paste0("https://www.googleapis.com/customsearch/v1?key=",key,"&cx=",cx,"&q=",dummy.query)