2

我正在通过像这里这样的 PHP 代理访问 XML API(航班搜索比较) 。

API 总是有一个完整的文件供下载。第一个版本声明有 0 个结果,然后在调用它几次后弹出第一个结果。

API 文档说:

result 方法将始终为您提供搜索结果的当前状态。您可以多次调用它(可能使用 ajax 调用)

我的问题是,我不知道何时完成,即何时交付所有结果。

我试过这个:

  1. 读到feof,然后通过重置文件位置指示器并像这里一样fseek()等待,但这不起作用,因为流不支持.fseek()

  2. 等待秒钟,然后显示结果,但这效果不佳,因为 API 有时需要很长时间(而且我没有得到所有内容)

  3. read until feof,然后使用ftell()来查看是否已将新内容写入文件,但我缺乏事后做某事的可能性...

    $handle = fopen($flights_url, "r");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = fgets($handle);
            echo $buffer;
        }
        fclose($handle);
    }
    

我现在没有主意了。这应该如何以一种好的方式完成?

-T

编辑:更改格式并添加了一些代码

4

1 回答 1

0

好的,我联系了 API 的一位开发人员。

他告诉我,他们没有发送就绪信号,因为他们也不知道响应何时结束。这是因为它们可以与许多其他 API 一起使用(毕竟这是一个比较 API)。

他给我的建议/解决方案,他们使用的是,轮询几次,每次轮询之间有几秒钟的延迟,然后把剩下的拿走。

对我来说,这似乎是务实而不是优雅,但他们就是这样做的:-) 感谢所有试图提供意见的人!

于 2012-06-17T12:52:48.037 回答