rets-client无法获取照片ReplyCode 20403(NO_OBJECT_FOUND)

问题描述 投票:0回答:2

我从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有PictureCount20,但不知怎的,它给了我没有找到的对象。

样本列表查询返回相同的id

{ 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' }

有人可以帮我看看我在这里做错了吗?提前感谢您的任何帮助和建议。

附:我也尝试使用一个L_ListingIDL_Status作为Active而不是Expired,但结果是相同的

javascript photo rets mls
2个回答
1
投票

您要连接的RETS服务器不允许图像下载,因为它是一个临时服务器,他们希望保持较低的带宽。您必须针对其生产服务器测试代码,或要求MLS允许从其临时环境下载。


1
投票

从RETS服务器下载图像时需要注意的事项:

  1. 确保您有权访问列表图像。
  2. 其次检查你有图像下载访问或公共图像网址访问(CDN链接)?取决于RETS服务器,将给出一个或两个权限。
  3. 要下载图像/ imageURL,您需要photoIds。这里“listingId”或“listingKey”将起作用,再次依赖于RETS服务器。所以尝试两者。
  4. 您可以访问多种图像类型,如缩略图,正常大小和高分辨率。你也可以在“getObject”方法中提到。
  5. 下载image / imageURL后,经常交叉检查Photo Modification Timestamp字段以识别对image / imageURL的任何修改。
  6. 一些RETS服务器将通过Media,Tour等资源提供图像URL作为数据。
© www.soinside.com 2019 - 2024. All rights reserved.