2012-06-13 48 views
2

我正在通过PHP代理like here访问XML API(航班搜索比较)。PHP:读取正在通过XML API更新的远程文件

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

API文档说:

结果方法将总是给你 信息搜索结果的当前状态。你可以多次拨打电话(可能用阿贾克斯电话)

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

我尝试这样做:

  1. 读,直到feof,然后通过fseek()重置文件指针位置,并等待一点点like here但是,这并不工作,因为该流不支持fseek()

  2. 等待秒,然后显示结果,但是,这并不正常工作的API有时需要很长的(和我没有得到的一切)

  3. 读,直到feof,然后使用ftell()看到新的东西是否已经被写入文件,但是我没有可能做一些事情之后...

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

我现在没有想法。这应该如何以好的方式完成?

-T

编辑:改变格式,并添加一些代码

+0

XML API像你正在提出一个http请求?那么你正在发送文件的快照,而不是正确的流?你的fopen或类似的电话是什么样的? –

+0

它非常依赖于你正在使用的API。没有通用的方法来完成你所要求的。 – lanzz

+0

@MikeB:添加了一些代码。 – thomas

回答

0

好吧,我接触的API的开发者之一。

他告诉我,他们不发送准备好信号,因为他们也不知道,当响应结束时。这是因为他们使用了许多其他API(毕竟这是一个比较API)。

他给我的建议/解决方案他们使用的是投票几次,每次投票之间有几秒钟的延迟,然后把剩下的放在那里。

似乎比我更优雅,但这就是他们如何做到的:-)感谢所有试图提供输入的人!