rets-client 无法获取照片 ReplyCode 20403 (NO_OBJECT_FOUND)
rets-client cannot get photo ReplyCode 20403 (NO_OBJECT_FOUND)
我从 npm 安装了 rets-client
包。
我 运行 其他 query
并得到 meta
这工作正常但是当我尝试做 photo streaming example
我不断收到错误
Error: RetsReplyError: RETS Server reply while attempting getObject - ReplyCode 20403 (NO_OBJECT_FOUND); ReplyText: No Object Found [260978536:1].
我遵循了示例中的代码
https://github.com/sbruno81/rets-client#photo-streaming-example
try {
rets.getAutoLogoutClient(clientSettings, async (client) => {
const photoIds = {
'260978536': '*', // get all photos for listingId 260978536
};
const photoStream = await client.objects.stream.getObjects('Property', 'Photo', photoIds, {
alwaysGroupObjects: true,
ObjectData: '*'
});
console.log("========================================");
console.log("======== Photo Stream Results ========");
console.log("========================================");
return new Promise(function (resolve, reject) {
let i = 0;
photoStream.objectStream.on('data', function (event) {
try {
if (event.type === 'headerInfo') {
console.log(' ~~~~~~~~~ Header Info ~~~~~~~~~');
outputFields(event.headerInfo);
return
}
console.log(" -------- Photo " + (i + 1) + " --------");
if (event.type === 'error') {
console.log(" Error: " + event.error);
} else if (event.type === 'dataStream') {
outputFields(event.headerInfo);
fileStream = fs.createWriteStream(
"/tmp/photo_" + event.headerInfo.contentId + "_" + event.headerInfo.objectId + "." + event.headerInfo.contentType.match(/\w+\/(\w+)/i)[1]);
event.dataStream.pipe(fileStream);
}
i++;
} catch (err) {
reject(err);
}
});
photoStream.objectStream.on('error', function (errorInfo) {
reject(errorInfo);
});
photoStream.objectStream.on('end', function () {
resolve();
});
})
})
} catch (errorInfo) {
const error = errorInfo.error || errorInfo;
console.log(" ERROR: issue encountered:");
outputFields(error);
console.log(' ' + (error.stack || error).replace(/\n/g, '\n '));
}
我使用该照片 ID 的原因是,当我进行查询时,我可以看到此列表 ID 有 PictureCount
个 20
,但不知何故它没有找到任何对象。
相同 ID
的示例列表查询 return
{ L_Area: 'Islands-Van. & Gulf',
L_ListingID: '260978536',
L_Status: 'Expired',
L_PictureCount: '20',
L_Last_Photo_updt: '2015-07-15T04:27:00',
L_DisplayId: 'V1064230' }
有人可以帮我看看我哪里做错了吗?
在此先感谢您的帮助和建议。
P.S。我也尝试使用一个 L_ListingID
和 L_Status
作为 Active
而不是 Expired
但结果是相同的
您要连接的 RETS 服务器不允许下载图像,因为它是临时服务器并且他们希望保持低带宽。您必须针对他们的生产服务器测试您的代码,或者要求 MLS 允许从他们的临时环境下载。
从RETS服务器下载图片的注意事项:
- 确保您有权访问列表图像。
- 其次检查您是否有图像下载权限或public图像url访问权限(CDN link)?取决于 RETS 服务器将授予一个或两个权限。
- 要下载 images/imageURLs,您需要照片 ID。这里 "listingId" 或 "listingKey" 都可以工作,同样取决于 RETS 服务器。所以两者都试试。
- 您可以访问多种图像类型,例如缩略图、正常尺寸和高分辨率。您也可以在 "getObject" 方法中提及。
- 下载 image/imageURL 后,经常交叉检查照片修改时间戳字段以识别对 image/imageURL 的任何修改。
- 一些 RETS 服务器将通过媒体、旅游等资源提供图像 URL 作为数据
我从 npm 安装了 rets-client
包。
我 运行 其他 query
并得到 meta
这工作正常但是当我尝试做 photo streaming example
我不断收到错误
Error: RetsReplyError: RETS Server reply while attempting getObject - ReplyCode 20403 (NO_OBJECT_FOUND); ReplyText: No Object Found [260978536:1].
我遵循了示例中的代码
https://github.com/sbruno81/rets-client#photo-streaming-example
try {
rets.getAutoLogoutClient(clientSettings, async (client) => {
const photoIds = {
'260978536': '*', // get all photos for listingId 260978536
};
const photoStream = await client.objects.stream.getObjects('Property', 'Photo', photoIds, {
alwaysGroupObjects: true,
ObjectData: '*'
});
console.log("========================================");
console.log("======== Photo Stream Results ========");
console.log("========================================");
return new Promise(function (resolve, reject) {
let i = 0;
photoStream.objectStream.on('data', function (event) {
try {
if (event.type === 'headerInfo') {
console.log(' ~~~~~~~~~ Header Info ~~~~~~~~~');
outputFields(event.headerInfo);
return
}
console.log(" -------- Photo " + (i + 1) + " --------");
if (event.type === 'error') {
console.log(" Error: " + event.error);
} else if (event.type === 'dataStream') {
outputFields(event.headerInfo);
fileStream = fs.createWriteStream(
"/tmp/photo_" + event.headerInfo.contentId + "_" + event.headerInfo.objectId + "." + event.headerInfo.contentType.match(/\w+\/(\w+)/i)[1]);
event.dataStream.pipe(fileStream);
}
i++;
} catch (err) {
reject(err);
}
});
photoStream.objectStream.on('error', function (errorInfo) {
reject(errorInfo);
});
photoStream.objectStream.on('end', function () {
resolve();
});
})
})
} catch (errorInfo) {
const error = errorInfo.error || errorInfo;
console.log(" ERROR: issue encountered:");
outputFields(error);
console.log(' ' + (error.stack || error).replace(/\n/g, '\n '));
}
我使用该照片 ID 的原因是,当我进行查询时,我可以看到此列表 ID 有 PictureCount
个 20
,但不知何故它没有找到任何对象。
相同 ID
的示例列表查询 return{ L_Area: 'Islands-Van. & Gulf',
L_ListingID: '260978536',
L_Status: 'Expired',
L_PictureCount: '20',
L_Last_Photo_updt: '2015-07-15T04:27:00',
L_DisplayId: 'V1064230' }
有人可以帮我看看我哪里做错了吗? 在此先感谢您的帮助和建议。
P.S。我也尝试使用一个 L_ListingID
和 L_Status
作为 Active
而不是 Expired
但结果是相同的
您要连接的 RETS 服务器不允许下载图像,因为它是临时服务器并且他们希望保持低带宽。您必须针对他们的生产服务器测试您的代码,或者要求 MLS 允许从他们的临时环境下载。
从RETS服务器下载图片的注意事项:
- 确保您有权访问列表图像。
- 其次检查您是否有图像下载权限或public图像url访问权限(CDN link)?取决于 RETS 服务器将授予一个或两个权限。
- 要下载 images/imageURLs,您需要照片 ID。这里 "listingId" 或 "listingKey" 都可以工作,同样取决于 RETS 服务器。所以两者都试试。
- 您可以访问多种图像类型,例如缩略图、正常尺寸和高分辨率。您也可以在 "getObject" 方法中提及。
- 下载 image/imageURL 后,经常交叉检查照片修改时间戳字段以识别对 image/imageURL 的任何修改。
- 一些 RETS 服务器将通过媒体、旅游等资源提供图像 URL 作为数据