3

クライアント用の Web ベースの RESTful API を開発中です。行ごとに Foursquare API を要求する必要がある 1 つの要求を除いて、すべてがうまく機能します。

このリクエストの URL はhttp://api.example.com/v1/users/timesです。

現在、その URL へのリクエストのレスポンスは次のとおりです。

{
"response": {
    "user": {
        ... some user info ...
        "times": [
            {
                "id": "8",
                "venue_fq_id": "4b81eb25f964a52000c430e3",
                "user_id": "1",
                "wait_length": "4468",
                "created_at": "2012-06-09 21:45:43"
            },
            {
                "id": "9",
                "venue_fq_id": "4aad285af964a520c05e20e3",
                "user_id": "1",
                "wait_length": "8512",
                "created_at": "2012-06-09 21:45:43"
            },
            {
                "id": "10",
                "venue_fq_id": "42377700f964a52024201fe3",
                "user_id": "1",
                "wait_length": "29155",
                "created_at": "2012-06-09 21:45:44"
            },
            {
                "id": "11",
                "venue_fq_id": "45c88764f964a5206e421fe3",
                "user_id": "1",
                "wait_length": "33841",
                "created_at": "2012-06-09 21:45:44"
            },
            {
                "id": "12",
                "venue_fq_id": "430d0a00f964a5203e271fe3",
                "user_id": "1",
                "wait_length": "81739",
                "created_at": "2012-06-09 21:45:44"
            }
        ]
    }
},
"stat": "ok"
}

ただし、配列venue_fq_idで返されるresponse.user.times値は、Foursquare API の会場に関連しています。行ごとに Foursquare API に curl リクエストを実行してみましたが、パフォーマンスが非常に遅くなります。毎回要求された F/Q API にアクセスした場合と同じ情報を取得しながら、パフォーマンスを高速化できる方法の例をいくつか挙げていただけますか?

これが私のコードです:

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

$wait_times = $query->result();

foreach ($wait_times as $wait_time) {

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

}

function venue_info($fq_id) {

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.foursquare.com/v2/venues/4b522afaf964a5200b6d27e3");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $response = json_decode(curl_exec($ch));
    curl_close($ch);

    return $response['response']['venue'];

}
4

2 に答える 2

9

CURLオブジェクトのインスタンス化/ティアダウンに膨大な時間を浪費しています。これにより、HTTPキープアライブを利用できなくなり、curlはリクエストごとに新しいtcp接続を開始するように強制されます。

カールハンドルは利用できます。例えば

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);


function venue_info($fq_id) {
   global $ch;
   curl_setopt($ch, CURLOPT_URL, "https://api.foursquare.com/v2/venues/4b522afaf964a5200b6d27e3");
   $resp = curl_exec($ch) or die(curl_error($ch));
   $json = json_decode($resp);
   return($json);
}
于 2012-08-12T18:43:18.557 に答える
0

Foursquare API は、multi最大 5 つのクエリを 1 つのリクエストに結合できるエンドポイントを提供します。

于 2012-08-12T18:48:55.047 に答える