商品
使用产品 ID 和门店信息抓取 Kroger 产品页面数据,包括价格、可用性和履约选项。
该 kroger_product 数据源用于检索 Kroger 产品页面。
请求示例
在下面的示例中,我们发出请求以检索产品 ID 的产品页面 0021006550000,使用邮政编码指定交付位置 65401,将履约类型设置为 delivery,并将门店 ID 分配为 1100002.
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "kroger_product",
"product_id": "0021006550000",
"delivery_zip": "65401",
"fulfillment_type": "pickup",
"store_id": "01100002"
}'import requests
from pprint import pprint
# 构建负载(payload)。
payload = {
"source": "kroger_product",
"product_id": "0021006550000",
"delivery_zip": "65401",
"fulfillment_type": "pickup",
"store_id": "01100002",
}
# 获取响应。
response = requests.request(
"POST",
"https://realtime.oxylabs.io/v1/queries",
auth=("USERNAME", "PASSWORD"),
json=payload,
)
# 将美化后的响应打印到标准输出。
pprint(response.json())const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "kroger_product",
product_id: "0021006550000",
delivery_zip: "65401",
fulfillment_type: "pickup",
store_id: "01100002",
};
const options = {
hostname: "realtime.oxylabs.io",
path: "/v1/queries",
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization:
"Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
},
};
const request = https.request(options, (response) => {
let data = "";
response.on("data", (chunk) => {
data += chunk;
});
response.on("end", () => {
const responseData = JSON.parse(data);
console.log(JSON.stringify(responseData, null, 2));
});
});
request.on("error", (error) => {
console.error("Error:", error);
});
request.write(JSON.stringify(body));
request.end();https://realtime.oxylabs.io/v1/queries?source=kroger_product&product_id=0021006550000&delivery_zip=65401&fulfillment_type=pickup&store_id=01100002&access_token=12345abcdepackage main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
const Username = "USERNAME"
const Password = "PASSWORD"
payload := map[string]interface{}{
"source": "kroger_product",
"product_id": "0021006550000",
"delivery_zip": "65401",
"fulfillment_type": "pickup",
"store_id": "01100002",
}
jsonValue, _ := json.Marshal(payload)
client := &http.Client{}
request, _ := http.NewRequest("POST",
"https://realtime.oxylabs.io/v1/queries",
bytes.NewBuffer(jsonValue),
)
request.SetBasicAuth(Username, Password)
request.Header.Set("Content-Type", "application/json")
response, _ := client.Do(request)
defer response.Body.Close()
responseText, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(responseText))
}package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
const Username = "USERNAME"
const Password = "PASSWORD"
payload := map[string]interface{}{
"source": "kroger_product",
"product_id": "0021006550000",
"delivery_zip": "65401",
"fulfillment_type": "pickup",
"store_id": "01100002",
}
jsonValue, _ := json.Marshal(payload)
client := &http.Client{}
request, _ := http.NewRequest("POST",
"https://realtime.oxylabs.io/v1/queries",
bytes.NewBuffer(jsonValue),
)
request.SetBasicAuth(Username, Password)
request.Header.Set("Content-Type", "application/json")
response, err := client.Do(request)
if err != nil {
fmt.Println("Error:", err)
return
}
defer response.Body.Close()
responseText, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(responseText))
}using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
namespace OxyApi
{
class Program
{
static async Task Main()
{
const string Username = "USERNAME";
const string Password = "PASSWORD";
var parameters = new
{
source = "kroger_product",
product_id = "0021006550000",
delivery_zip = "65401",
fulfillment_type = "pickup",
store_id = "01100002"
};
var client = new HttpClient();
Uri baseUri = new Uri("https://realtime.oxylabs.io");
client.BaseAddress = baseUri;
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
requestMessage.Content = JsonContent.Create(parameters);
var authenticationString = $"{Username}:{Password}";
var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(authenticationString));
requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);
var response = await client.SendAsync(requestMessage);
var contents = await response.Content.ReadAsStringAsync();
Console.WriteLine(contents);
}
}
}package org.example;
import okhttp3.*;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;
public class Main implements Runnable {
private static final String AUTHORIZATION_HEADER = "Authorization";
public static final String USERNAME = "USERNAME";
public static final String PASSWORD = "PASSWORD";
public void run() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("source", "kroger_product");
jsonObject.put("product_id", "0021006550000");
jsonObject.put("delivery_zip", "65401");
jsonObject.put("fulfillment_type", "pickup");
jsonObject.put("store_id", "01100002");
Authenticator authenticator = (route, response) -> {
String credential = Credentials.basic(USERNAME, PASSWORD);
return response
.request()
.newBuilder()
.header(AUTHORIZATION_HEADER, credential)
.build();
};
var client = new OkHttpClient.Builder()
.authenticator(authenticator)
.readTimeout(180, TimeUnit.SECONDS)
.build();
var mediaType = MediaType.parse("application/json; charset=utf-8");
var body = RequestBody.create(jsonObject.toString(), mediaType);
var request = new Request.Builder()
.url("https://realtime.oxylabs.io/v1/queries")
.post(body)
.build();
try (var response = client.newCall(request).execute()) {
if (response.body() != null) {
try (var responseBody = response.body()) {
System.out.println(responseBody.string());
}
}
} catch (Exception exception) {
System.out.println("Error: " + exception.getMessage());
}
System.exit(0);
}
public static void main(String[] args) {
new Thread(new Main()).start();
}
}{
"source": "kroger_product",
"product_id": "0021006550000",
"delivery_zip": "65401",
"fulfillment_type": "pickup",
"store_id": "01100002"
}在我们的示例中,我们使用同步的 Realtime 集成方法。如果您想使用 Proxy Endpoint 或异步的 Push-Pull 集成,请参阅 集成方法 部分。
请求参数值
通用
用于抓取 Kroger 产品页面的基础设置和自定义选项。
- 必填参数
本地化
根据商店位置、送货区域和首选履约方式定制结果。
delivery_zip
指定送货地点的邮政编码。
-
当需要时 fulfillment_type 设置为时,这是必需的 delivery 或 发货.
fulfillment_type
指定订单履行方式。可用值: 发货, pickup, delivery, in_store.
pickup (如果仅提供 store_id )
需要 store_id 用于 pickup 和 in_store,或 delivery_zip 用于 delivery 和 发货.
依赖项说明:
pickup和in_store值使用store_id参数来确定正确的商店。delivery和发货使用delivery_zip参数来指定送货地点。如果仅提供
store_id,且未指定fulfillment_type,默认类型为pickup.
如果 fulfillment_type 和 store_id/delivery_zip 组合无效(Kroger 不支持),抓取的页面将返回 404 状态。
最后更新于
这有帮助吗?

