1

私は PHP が初めてで、場所の緯度と経度を取得して、それらを MySQL データベースに追加したいと考えています。

私はそれらを取得するために Google Geo-code API を使用しています。

for ($i = 0; $i<1000; $i++) {
        $sql = mysql_query("SELECT place_address FROM place_locator WHERE place_id =".$i, $this->db) or die('invalide request : ' . mysql_error());

        if (mysql_num_rows($sql)) {
            while ($place = mysql_fetch_assoc($sql)) {

                //Encode the place string I got, to get rid of space
                $encodePlace = str_replace(" ", "%20", $place["place_address"]);
                //Use Google API
                $url = 'http://maps.googleapis.com/maps/api/geocode/json?address='.$encodePlace.'&sensor=false';
                //Use Curl to send the request
                $ch = curl_init($url);

                curl_setopt($ch, CURLOPT_HEADER, 0);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

                $response = curl_exec($ch);
                $obj = json_decode($response, true);


                $updateSql = mysql_query("UPDATE  `place_locator`.`place_locator` SET
                `latitude` =  '".$obj["results"][0]["geometry"]["location"]["lat"]."',
                `longitude` =  '".$obj["results"][0]["geometry"]["location"]["lng"]."' WHERE  `place_locator`.`place_id` = ".$i, $this->db) or die('Invalide : ' . mysql_error());

                curl_close($ch);
            }
        }

これは 10 のループで機能しますが、1000 になると時間がかかり、多くの結果がデータベースに更新されませんでした。

マルチスレッドが役立つかもしれないと思いますが、それがどのように機能するのかよくわかりません。助けてください。

前もって感謝します

4

1 に答える 1

2

私も同じ問題を抱えていました。Google はリクエストの頻度を制限しています。ループ内で試してみるsleep(1);とうまくいきますが、もっと時間がかかります。

于 2013-08-04T18:03:27.060 に答える