【问题标题】:Speedier method to using HTTP Requests in a for loop在 for 循环中使用 HTTP 请求的更快方法
【发布时间】:2012-09-05 20:23:32
【问题描述】:

我有一个 for 循环,它遍历 MySQL 查询的结果数组。

查询从登录用户创建的表wait_times中选择所有行,如下:

SELECT * FROM `wait_times` WHERE `user_id` = ?

我的问题是我需要检索每一行的场地信息。目前,我正在遍历该数组并向foursquare 发送单独的请求以获取场地信息。此方法可能非常慢,具体取决于查询返回的行数。

为了加快速度,我计划将场地信息存储在一个单独的表中,这最终应该比向 Foursquare API 发送 curl 请求更快。

请告诉我是否有任何其他方法可以加快这个过程?

我查看了多个查询,但用户可能没有 Foursquare 帐户,并且 API 要求用户注册并登录。

这是我的代码:

$query = $this->db->query("SELECT * FROM `wait_times` WHERE `user_id` = ?", array($uid));

$wait_times = $query->result();

foreach ($wait_times as $wait_time) {

    $wait_time->venue = $this->venue_info($wait_time->venue_fq_id);

}

function venue_info($vid) {

    $v = date('Ymd');
    $url = "https://api.foursquare.com/v2/venues/{$vid}?client_id=" . FQ_CLIENT_ID . "&client_secret=" . FQ_CLIENT_SECRET . "&v={$v}";
    curl_setopt($this->ch, CURLOPT_URL, $url);
    $resp = curl_exec($this->ch) or die(curl_error($this->ch));
    $json = json_decode($resp, TRUE);

    if ($json['meta']['code'] == 400)
         return FALSE;

    $venue = $json['response']['venue'];

    return $venue;

}

【问题讨论】:

  • 我得看看foursquare的api,看看他们有没有办法做批处理。
  • 似乎是唯一的办法:developer.foursquare.com/docs/multi/multi
  • 如果 api 仅限于每次调用一个场地详细信息,那么在本地缓存它是您的最佳选择
  • 除了 db 有什么推荐的缓存位置吗?
  • 如果你有 memcached,一定要使用它。

标签: php mysql curl foursquare


【解决方案1】:

你可以做某种形式的缓存吗?我强烈建议改用参考表。 FS 可能对 API 请求有一些规则,您最终可能会被列入黑名单。由于多次握手,任何形式的 HTTPS 通信都很慢。如果可以的话,把时间花在一张桌子上。您甚至可以作弊并使用序列化对象。

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2017-08-16
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多