我正在使用XML API,搜索不支持分页/限制。推荐的方法是只请求所有ID,然后在第二个请求中获取数据并自己处理分页。
第一次请求:
http://example.com?search=foobar&columns=ID
<results>
<item><id>1</id></item>
<item><id>2</id></item>
<item><id>3</id></item>
<item><id>4</id></item>
<item><id>5</id></item>
<item><id>6</id></item>
<item><id>7</id></item>
<item><id>8</id></item>
<item><id>9</id></item>
<item><id>10</id></item>
</results>
第二次请求:
http://example.com?search=1,2,3,4,5&columns=ID,title,description
<results>
<item><id>1</id><title>foobar</title><description /></item>
<item><id>2</id><title>foobar</title><description /></item>
<item><id>3</id><title>foobar</title><description /></item>
<item><id>4</id><title>foobar</title><description /></item>
<item><id>5</id><title>foobar</title><description /></item>
</results>
是否可以将YQL与搜索结果计数和分页支持的单个请求结合使用?
答案 0 :(得分:0)
我没有直接的文档,但你可以这样做:
1)创建一个查询http://example.com?search=foobar&columns=ID的YQL表A. 2)创建一个查询http://example.com?search=1,2,3,4,5&columns=ID,title,description的YQL表B. 3)现在,创建一个YQL表C,它在A和B的连接上执行y.query,如下所示:
从B中选择*进行搜索(从A中选择ID,其中search =“foobar”)
当然,查询语法将根据其中定义的表名和键进行更改。有关YQL join的更多信息,请参阅here
希望这很清楚,如果你在这种情况下找到更好的东西,请告诉我:)
答案 1 :(得分:0)
使用分页创建一个YQL表:
<paging model="offset" matrix="true">
<start id="internalIndex" default="0" />
<pagesize id="internalPerPage" max="250" />
</paging>
使用Javascript处理两次提取和分页:
var internalIndex = parseInt( request.matrixParams['internalIndex'] );
var internalPerPage = parseInt( request.matrixParams['internalPerPage'] );
var interimURL = 'http://example.com?columns=ID';
interimURL += '&search=' + request.queryParams['search'];
var interimQueryParameter = {url:interimURL};
var interimQuery = y.query("SELECT * FROM xml WHERE url=@url", interimQueryParameter);
var rows = interimQuery.results.*;
// get subset
var xml = rows;//this.copy(); // clone XML
var from = internalIndex;
var to = ((from + internalPerPage) < xml.length()) ? (from + internalPerPage) : xml.length();
var sliced = [];
for (; from < to; from++) {
sliced.push(xml[from].@["ID"]);
}
var finalURL = 'http://example.com?';
finalURL += '&search=' + sliced.join(",");
finalURL += "&columns=ID,title,description"
var finalQueryParameter = {url:finalURL};
var finalQuery = y.query("SELECT * FROM xml WHERE url=@url", finalQueryParameter);
var finalResults = finalQuery.results.response;
finalResults.node += <internalCurserPositon>{internalIndex}</internalCurserPositon>
finalResults.node += <internalCount>{rows.length()}</internalCount>
response.object = finalResults;