我正在编写一个脚本,检查Instagram用户是否跟随他的粉丝。我将列表存储在数据库中,出于测试目的,该列表中只有20个用户ID。剧本很疯狂。对于35个人来说,加载页面需要大约12秒。任何人都可以看到为什么这个基本脚本如此之慢?或者它只是instagrams API?
注意:我隐藏了访问令牌和我的用户ID - 不确定是否公开这样做。
代码:
<?php
require_once 'instagram.class.php';
session_start();
$mysqli = new mysqli("***","***","***","***");
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
};
if ($result = $mysqli->query("SELECT * FROM Jobs")) {
while($obj = $result->fetch_object()){
$group_arr[] = $obj;
};
$userid = $group_arr[0]->id;
$token = $group_arr[0]->token;
$status = $group_arr[0]->status;
$list = explode(",", $group_arr[0]->follower_list);
$result->close();
};
echo "<pre>";
print_r($group_arr);
echo "</pre>";
// check authentication
if ($token === false) {
// authentication failed - throw an error
//error placeholder
} else {
$instagram->setAccessToken($token);
foreach($group_arr as $job) {
if($status=="start"){
foreach($list as $entry){
$call = $instagram->getUserRelationship($entry)->data->outgoing_status;
if($call == "follows"){
echo "follows<br>";
}else{
echo "doesn't follow<br>";
};
};
}else{
//it's marked as stop, do nothing.
};
};
};//close it out
?>
这就是回应:
阵列( [0] =&gt; stdClass对象 ( [id] =&gt;的 * [token] =&gt; * [status] =&gt;开始 [following_list] =&gt; 1161426957,191435508,1440954439,1463650509,1367056800,1446648791,1014674606,410710231,295958914,438752574,24520438,616513427,186915865,894461147,1395519590,256814697,1445364137,493354751,1455922632,1385122226,1161426957,191435508,1440954439,1463650509,1367056800, 1446648791,1014674606,410710231,295958914,438752574,24520438,616513427,186915865,894461147,1395519590 )
)
不跟随不遵循不跟随不遵循 不遵循不遵循不遵循不遵循不遵循 遵循不遵循不遵循不遵循不遵循 不遵循不遵循不遵循不遵循不遵循 遵循不遵循不遵循不遵循不遵循 不遵循不遵循不遵循不遵循不遵循 遵循不遵循不遵循不遵循不遵循 不跟随不遵循不遵循不遵循
答案 0 :(得分:0)
我认为问题是API。 您确定API是否打算以这种方式使用?
我建议你为Instagram API的调用做一个基准测试,这样你就可以检查它需要多少秒。
所以,您应该添加以下代码:
foreach($group_arr as $job) {
if($status=="start"){
foreach($list as $entry){
//MODIFY HERE---
$start_time = microtime(true);
$call = $instagram->getUserRelationship($entry)->data->outgoing_status;
$end_time = microtime(true);
echo "getUserRelationship for: ", $entry, " takes ", ($end_time - $start_time), "ms\n<br />\n";
//--------------
if($call == "follows"){
echo "follows<br>";
}else{
echo "doesn't follow<br>";
};
};
}else{
//it's marked as stop, do nothing.
};
};
如果您在开发环境中遇到此问题,可以查看生产环境需要多长时间。
我希望这对你有所帮助。
答案 1 :(得分:0)
我应该从开始做curl_multi
。完全解决了一切,脚本运行得更快。
对于浏览此内容的任何其他人来说,Instagram API都很慢而且很麻烦。每次互动可以做的次数越少越好。如果您有100多个电话,我建议curl_multi