首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php curl steam-api超级慢

php curl steam-api超级慢
EN

Stack Overflow用户
提问于 2015-09-24 07:10:48
回答 1查看 819关注 0票数 1

我正在制作一个记分板,并实现steam API来为用户检索化身。一开始我用的是file_get,但它太慢了!所以有人建议我使用curl。

旧方法

代码语言:javascript
复制
$url = 'http://www.com';
$content = file_get_contents($url);
$json = json_decode($content, true);

然后,我使用foreach循环从数据中获取我想要的项。

代码语言:javascript
复制
foreach($output['response']['players'] as $item) {
}

新的卷曲代码,

代码语言:javascript
复制
$url = 'www.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
echo $output = curl_exec($ch);
curl_close($ch);
$json = json_decode($output, true);

我从json方法中得到了几乎相同的结果,但它的速度更快一些。但是它仍然非常慢,有没有办法提高它的速度?我可以先加载表,然后在头像可用时再加载吗?

记分板http://fyre.site.nfoservers.com/index.php

EN

回答 1

Stack Overflow用户

发布于 2019-09-04 06:07:18

考虑使用for循环,因为这些循环可以加快速度。如果您正在谈论加载时间(页面加载和显示之前的时间)很慢,请考虑像这样使用输出缓冲:

取消设置不再需要的数组或值。

请注意,steam API一次接受100个ID,因此朋友列表被分成100个的块。

一旦完成,它就会推送出信息,而网站不会等到完成。试试看,我猜。

代码语言:javascript
复制
$totalfriends = count($friends);
$chunkedfriends = array_chunk($friends, 100);
$chunks = ceil($totalfriends / 100);
if(ob_get_length() > 0) {
ob_end_flush();
ob_implicit_flush();}
for($i=0; $i < $chunks; $i++){
$url = "https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0001/?key=". $steamkey . "&steamids=". implode(',', $chunkedfriends[$i]) . "";
$friendscountchunk = count($chunkedfriends[$i]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_PIPEWAIT, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
$urlresult=curl_exec($ch);
curl_close($ch);
$json_decoded = json_decode($urlresult);
if(ob_get_length() > 0) {
ob_end_flush();
ob_implicit_flush();}
for($x=0; $x < $friendscountchunk; $x++){
  ?>
   <li class="friendsli"><a href="steamuser.php?id=<?=$json_decoded->response->players->player[$x]->steamid?>">
  <img src=' <?=$json_decoded->response->players->player[$x]->avatar?>'/><p class="friendname"> <?=$json_decoded->response->players->player[$x]->personaname?> </p>
</a></li> <?php
}}
 unset($friends); unset($player); unset($json_decoded);

我不认为这是最好的脚本或方法,但它肯定会有所帮助。您无法提高外部API的速度,但您可以改进和调整您的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32750926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档