我有一个大型数据集,我需要将其推送到Google Merchant Center中的帐户级送货设置。我通过PHP客户端库使用Google Shopping API。
如果我加载了一部分数据并在结尾处调用一次,那么它可以正常工作:
$settings = $clientservice->shippingsettings->get('XXXXXX', 'XXXXXX');
for each data point that represents a service
for each data point that represents a rate group
create weight/destination state table
next
next
$settings->setServices($services);
$updatedSettings = $clientservice->shippingsettings->update('XXXXXX', 'XXXXXX', $settings);
但是,如果我加载整个数据集并尝试立即应用它,我会收到413请求太大的响应。所以我想逐步加载它,一次加载一个服务。我试过这个:
$settings = $clientservice->shippingsettings->get('XXXXXX', 'XXXXXX');
for each data point that represents a service
for each data point that represents a rate group
create weight/destination state table
next
$settings->setServices([$service]);
$updatedSettings = $clientservice->shippingsettings->patch('XXXXXX', 'XXXXXX', $settings);
next
但是,每项服务只会覆盖前一项服务。 "膜片"似乎操作就像"更新",尽我所知。任何人都知道如何使这项工作?
答案 0 :(得分:1)
不是100%确定我理解你问题的问题部分。但是,我可以告诉您此更新将更新您随请求发送的所有字段。说我们有一个对象
class Foo {
public $aname= 'Jane';
public $aaddress = '12 Blueberry Hill';
public $aage = '23';
}
如果我进行更新
update('Jane Doe', '12 Blueberry Hill');
它希望在此实例中发送的所有文件可能都会设置为null,因为它没有包含在请求中。
现在补丁只会更新您包含的字段
update('Jane Doe', '112 Blueberry Hill');
所以此请求将更新姓名和地址,而不是年龄。
如果您遇到大小问题,那么您应该看看您使用的API是否包含字段可选参数我认为大多数Google apis都会这样做。然后,您只能请求要更新的字段,然后发送一个补丁。