我有从XML记录中获取一些值的脚本。
有代码:
a -> Maybe a
问题取决于生成第二个XML文件的时间。 $ result_xml花了几秒钟,所以我必须使用sleep(6)函数。 如果删除此链接,则需要刷新页面(至少三次)以获取第二个XML到生成图像的链接。
您有一个更专业的想法吗?我无法确定每张图片会在6秒内生成(有时更短,有时更长)。 是否只有在收到$ result_img后才可以生成结果的方法?预先感谢您的帮助!
我认为值得写。 实际上,它看起来像这样: 脚本从站点返回$ request_xml和XML:
<?php
//Data
$xml_data = '<image_process_call><image_url>https://i.pinimg.com/originals/e4/41/54/e44154308e3466d987665c6d50887f06.jpg</image_url><methods_list><method><name>collage</name><params>template_name=Nun Face in Hole;</params></method></methods_list><result_format>jpg</result_format><result_size>800</result_size><template_watermark>false</template_watermark></image_process_call>';
//Settings
$app_id = '';
$key = '';
$sign_data = hash_hmac('SHA1', $xml_data, $key);
//Send request
$request_url = 'http://opeapi.ws.pho.to/addtask?data='. $xml_data .'&sign_data='. $sign_data .'&app_id='. $app_id;
$request_xml = simplexml_load_file($request_url);
$request_id = strval($request_xml -> request_id);
if (isset($request_id)) {
$result_url = 'http://opeapi.ws.pho.to/getresult?request_id='. $request_id;
sleep(6);
$result_xml = simplexml_load_file($result_url);
$result_status = strval($result_xml -> status);
$result_img = strval($result_xml -> result_url);
if (isset($result_img)) {
echo $result_img;
} else {
echo 'Result image not found';
}
} else {
echo 'Request ID not found';
}
?>
脚本从此XML获取request_id并执行$ result_xml。但是,这是XML,脚本不会立即获取图像的url。需要等待几秒钟。 经过三次刷新页面或使用sleep(6)函数,最终我们得到:
<image_process_response>
<request_id>2d8d4dec-4344-4df0-a1e1-0c8df304ad11</request_id>
<status>OK</status>
<description/>
<err_code>0</err_code>
</image_process_response>
编辑:
尝试立即生成图像后,我得到了这样的XML:
<image_process_response>
<request_id>2d8d4dec-4344-4df0-a1e1-0c8df304ad11</request_id>
<status>OK</status>
<result_url>
http://worker-images.ws.pho.to/i1/9F1E2EAF-5B31-4407-8779-9A85F35862D3.jpg
</result_url>
<result_url_alt>
http://worker-images.ws.pho.to.s3.amazonaws.com/i1/9F1E2EAF-5B31-4407-8779-9A85F35862D3.jpg
</result_url_alt>
<limited_image_url>
http://worker-images.ws.pho.to/i1/3F797C83-2C2E-401C-B4AF-C4D36BBD442D.jpg
</limited_image_url>
<nowm_image_url>
http://worker-images.ws.pho.to/i1/9F1E2EAF-5B31-4407-8779-9A85F35862D3.jpg
</nowm_image_url>
<duration>2950.879097ms</duration>
<total_duration>2956.124067ms</total_duration>
</image_process_response>
这就是为什么我看到空白页的原因...
有人知道如何强制脚本与第二个XML重新连接,直到找到result_url吗?
答案 0 :(得分:0)
问题取决于生成第二个XML文件的时间。 $ result_xml花了几秒钟,所以我必须使用sleep(6)函数。如果我 删除此内容,我需要刷新页面(至少3次)才能获得一个 链接到第二个XML生成的图像。
您有一个更专业的想法吗?我不确定 每张图片将在6秒内生成(有时更短) 有时更长)。是否有任何方法只能将结果遗传化 收到$ result_img之后?预先感谢您的帮助!
根据Pho.to API,添加任务请求是排队的POST请求。
我认为,在while循环中发送请求,但要等待更短的时间,而不是固定的6秒,请检查status
中的image_process_response
,继续循环直到没有InProgress
,此后,您可以安全地发送第二个请求以获取处理后的图像结果。
如果您在Web服务器上(通过CGI / FastCGI)运行此脚本,则可能由于DoS protection的超时配置较低而遇到超时问题,要解决此情况,您需要一个队列以在HTTP请求中添加任务,然后离线处理(意味着没有网络环境)。