使用 GET 将 HTML 搜索框参数化为查询 API

Parametrize HTML Search Box to Query API with GET

提问人:Hack-R 提问时间:10/16/2014 最后编辑:Hack-R 更新时间:10/16/2014 访问量:564

问:

我有一个 API,它作为给定的搜索输入和 API 密钥返回搜索结果。JSON

我想创建一个搜索框,将关键字提交到 API 并返回结果。

我正在使用这个代码模板:

<!DOCTYPE html>
<html>
<head>
<title>Search Box Example 1</title>
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
<!-- CSS styles for standard search box -->
<style type="text/css">
    #tfheader{
        background-color:#c3dfef;
    }
    #tfnewsearch{
        float:right;
        padding:20px;
    }
    .tftextinput{
        margin: 0;
        padding: 5px 15px;
        font-family: Arial, Helvetica, sans-serif;
        font-size:14px;
        border:1px solid #0076a3; border-right:0px;
        border-top-left-radius: 5px 5px;
        border-bottom-left-radius: 5px 5px;
    }
    .tfbutton {
        margin: 0;
        padding: 5px 15px;
        font-family: Arial, Helvetica, sans-serif;
        font-size:14px;
        outline: none;
        cursor: pointer;
        text-align: center;
        text-decoration: none;
        color: #ffffff;
        border: solid 1px #0076a3; border-right:0px;
        background: #0095cd;
        background: -webkit-gradient(linear, left top, left bottom, from(#00adee), to(#0078a5));
        background: -moz-linear-gradient(top,  #00adee,  #0078a5);
        border-top-right-radius: 5px 5px;
        border-bottom-right-radius: 5px 5px;
    }
    .tfbutton:hover {
        text-decoration: none;
        background: #007ead;
        background: -webkit-gradient(linear, left top, left bottom, from(#0095cc), to(#00678e));
        background: -moz-linear-gradient(top,  #0095cc,  #00678e);
    }
    /* Fixes submit button height problem in Firefox */
    .tfbutton::-moz-focus-inner {
      border: 0;
    }
    .tfclear{
        clear:both;
    }
</style>
</head>
<body>
    <!-- HTML for SEARCH BAR -->
    <div id="tfheader">
        <form id="tfnewsearch" method="get" action="http://www.google.com">
                <input type="text" class="tftextinput" name="q" size="21" maxlength="120"><input type="submit" value="search" class="tfbutton">
        </form>
    <div class="tfclear"></div>
    </div>
</body>
</html>

在语言中(我比 HTML 更了解),我可以成功提交查询并使用以下行捕获结果:R

test <- GET(url="https://api.domain.com/store/data/unique_indentifier/_query?input/search_query=BLACK%20BOX&_user_unique_indentifier&_apikey=xxxxxx/MZgI01RVu+fI6x/cd+riqIpg==")

然而,我不清楚如何弥合两者之间的差距。这意味着,我不知道如何从 R 中获取我的非参数化 GET 查询示例,并将其调整为参数化良好的 HTML Google 搜索示例。

在上面的查询中,我选择了“黑匣子”作为任意搜索词。实际查询可以是 1 个或多个单词,大写或小写。

HTML 搜索 获取

评论

0赞 hrbrmstr 10/16/2014
但是,您的示例已参数化。或者,您的意思是您不知道如何创建动态参数?GET
0赞 Hack-R 10/16/2014
示例中的@hrmstr是针对 Google 搜索进行参数化的,但如果我只是替换我的 API 的 URL,它将不起作用,因为 (a) 它没有解决 API 密钥的使用问题,并且 (b) 我的 API 所需的 URL 字符串与 Google 显然需要的 URL 字符串不同,正如您在我在 R 中给出的示例中看到的那样GET

答:

0赞 hrbrmstr 10/16/2014 #1

假设它是“构建参数列表”,也许是这样的。我将使用 httpbin.org 服务,它将吐回 JSON 中发布的内容:get

library(httr)

pg <- GET("http://httpbin.org/get",
          query=list(search="word1 word2 word3",
                     someoption="param2",
                     anotheroption="param3"), verbose())

## -> GET /get?search=word1%20word2%20word3&someoption=param2&anotheroption=param3 HTTP/1.1
## -> User-Agent: curl/7.30.0 Rcurl/1.95.4.3 httr/0.5
## -> Host: httpbin.org
## -> Accept-Encoding: gzip
## -> accept: application/json, text/xml, */*
## -> 
## <- HTTP/1.1 200 OK
## <- Access-Control-Allow-Credentials: true
## <- Access-Control-Allow-Origin: *
## <- Content-Type: application/json
## <- Date: Wed, 15 Oct 2014 21:39:15 GMT
## <- Server: gunicorn/18.0
## <- Content-Length: 522
## <- Connection: keep-alive
## <- 

ret <- content(pg, as="parsed")

str(ret)

## List of 4
##  $ args   :List of 3
##   ..$ anotheroption: chr "param3"
##   ..$ search       : chr "word1 word2 word3"
##   ..$ someoption   : chr "param2"
##  $ headers:List of 6
##   ..$ Accept         : chr "application/json, text/xml, */*"
##   ..$ Accept-Encoding: chr "gzip"
##   ..$ Connection     : chr "close"
##   ..$ Host           : chr "httpbin.org"
##   ..$ User-Agent     : chr "curl/7.30.0 Rcurl/1.95.4.3 httr/0.5"
##   ..$ X-Request-Id   : chr "f2d9f3d9-320c-4a00-99a5-b89adc64ad26"
##  $ origin : chr "132.177.197.105"
##  $ url    : chr "http://httpbin.org/get?search=word1 word2 word3&someoption=param2&anotheroption=param3"

只需构建一个参数列表并将其传递给 。GET

评论

0赞 Hack-R 10/16/2014
谢谢,但我不是想在 R 中这样做,因为我正在尝试制作一个带有搜索框的网站。我在 R 中展示了 GET() 示例,因为我更熟悉 are,所以我知道如何在那里执行 GET(),但我试图使该 HTML 搜索框与 R 中 GET() 查询中的信息一起使用。我刚刚删除了 R 标签,这可能具有误导性。