我每天通过 C# 作业将所有产品导出到 SQL Server。代码的重要部分如下。
使用OCAPI Data ProductSearch,您将首先创建一个请求以查看您拥有的产品总数。一次只能获取200个产品,所以需要计算调用api的总次数。
var countQuery = "{ \"query\": { \"term_query\": { \"fields\": [\"id\"], \"operator\": \"is_not_null\" }}}";
var countContent = new StringContent(countQuery, Encoding.UTF8, "application/json");
var urlUri = new Uri(url);
var countResponse = await client.PostAsync(urlUri, countContent);
string countResponseString = await countResponse.Content.ReadAsStringAsync();
dynamic countJson = JsonConvert.DeserializeObject(countResponseString);
int records = countJson["total"];
// determine number of times to call api, rounding up.
int calls = (records + (200 - 1)) / 200;
在循环中一次拉出 200 个产品。我们每天使用它来比较新产品和已删除产品的列表。将产品与价格变化进行比较也很好。或者只是为了其他用途。
for (var i = 0; i < calls; i++)
{
var query = "{ \"query\": { \"term_query\": { \"fields\": [\"id\"], \"operator\": \"is_not_null\" } },\"select\":\"(**)\",\"expand\":[\"all\"], \"start\": " + i * 200 + ", \"count\": 200 }";
var content = new StringContent(query, Encoding.UTF8, "application/json");
var response = await client.PostAsync(urlUri, content);
string responseString = await response.Content.ReadAsStringAsync();
dynamic json = JsonConvert.DeserializeObject(responseString);
Console.WriteLine("DW products status: " + i * 200 + " records.");
foreach (var obj in json.hits)
{
// Do stuff (create csv, write to db, etc)
}
}