0

私は、php を使用して msql 顧客データベースを調べる内部サイトを持っています。緯度と経度のフィールドが入力されていない顧客を見つけます。郵便番号を取得し、緯度と経度をデータベースにポストしてジオコーディングし、顧客を地図上にプロットします。これは、1 日に 1 回、cron ジョブによって実行されます。これは、Google APIのv.2を使用して正常に機能しました。3 月または 4 月以来、その停止。v.3のせいだと思います。

私の jl_jobscoordinates.cron.php ファイルはデータベースを検索して、空の緯度と経度のフィールドのすべての郵便番号を取得します。次に、xml を使用してまとめて結果を検索し、緯度と経度を保存する doGeocode と呼ばれる geocode.class.php から関数を呼び出します。geocodeclass 内では、構成ファイル内に保存されている googleapi url である m_url を参照します。この URL をhttp://maps.googleapis.com/maps/api/geocode/xml?address=%s&sensor=falseである新しい v.3 URL に更新しました。私のマップはバックアップされて実行されていますが、何もジオコーディングされません。

jl_jobscooedinates.cron.php と geocode.class.php の 2 つのファイルを貼り付けます。古い URL で使用されていたジオコードの古い xml をコメントアウトしました。

私のcronの結果は、座標を取得していないということです。例 -- [2013 年 3 月] Google はこの郵便番号を見つけることができませんでした: [COO041] Test Company Name, Oxfordshire OX26 4SS

jl_jobcoordinates.cron.php

require_once("../includes/config.php");     
require_once(_PATH_JMS."/classes/session.class.php");   
require_once(_PATH_JMS."/classes/db.class.php");
require_once(_PATH_JMS."/classes/lib.class.php");
require_once(_PATH_JMS."/classes/security.class.php");
require_once(_PATH_JMS."/classes/emails.class.php");
require_once(_PATH_JMS."/classes/geocode.class.php");

require_once(_PATH_JMS."/services/actiontrail.ds.php"); 
require_once(_PATH_JMS."/services/jobsdue.ds.php"); 

//-----------------------------------------------------
// Main Object Instances - Initialize what we require    
//-----------------------------------------------------

$DB             = new DB();
$Security       = new Security($DB->i_db_conn);
$Lib            = new Lib();
$Session        = new Session();
$ActionTrail    = new ActionTrail($DB, $Session, $Security);
$JobsDue        = new JobsDue($DB, $Session, $Security, $ActionTrail);
$Geocode        = new Geocode($Session, $Security);
$Emails         = new Emails($DB, $Session, $Security);

//-----------------------------------------------------
// Save as a valid system user   
//-----------------------------------------------------

$Session->save('USR_AUTH',_CRON_USER_NAME);
$Session->save('USR_PASS',_CRON_USER_PASS);
$Session->save('USR_IS_EMPLOYED', '1');
$Session->save('CONS',$Session->get('USR_AUTH'));

//-----------------------------------------------------
// Postcodes to Ignore - we cannot geocode these
//-----------------------------------------------------

$m_ignore = array("IRL","IRELAND","IRE","ITA","USA","BEL","EGY","GER","FR","FRA","HOL","POL");

//-----------------------------------------------------
// Get Jobs Due for all consultants for this year and next
//-----------------------------------------------------

$mY = (int) date("Y");

//-----------------------------------------------------
// Find t-cards without lat & lng
//-----------------------------------------------------

$m_errors = array();





for ($y=$mY;$y<=$mY+1;$y++) 
{
    for ($i=1;$i<=12;$i++) 
    {
        $mM = (int) $i; 
        //echo "<br> mM =".$mM ." i =".$i;  
        $mJobs = $JobsDue->getAllJobsDue('%',$mM,$y,'%',NULL,NULL,FALSE); /* DON'T GET MISSED JOBS AS WE WILL START FROM JAN */
        //echo "<br>mJobs =".$mJobs;
        foreach ($mJobs as $row)
        {
            $m_postcode = $Lib->lib_str_clean(trim($row->postcode)); //this loops through each of the records and gets the post codes. m_postcodes are the postcodes found
            echo "<br>m_postcode =".$m_postcode;
            if (($row->latlngexists == 1)||(in_array($m_postcode,$m_ignore))||(in_array($row->card_id,$m_ignore))||(strlen($m_postcode)<=0)) continue;
            if ($Lib->lib_ispostcode($m_postcode)) {
                $m_coordinates = $Geocode->doGeocode($m_postcode);
                echo "<br>m_coords =".$m_coordinates;//nothing displayed
                if ($m_coordinates != NULL) {
                    $DB->setGeoTCard($row->card_id,$m_coordinates['lat'],$m_coordinates['lng']);
                } else {
                    $m_err_desc = sprintf("[%s-%s] Google could not find this Postcode",$mM,$y);

                    $m_error = array(
                        "err_desc" => $m_err_desc,
                        "err_code" => $row->client_code,
                        "err_comp" => $row->title,
                        "err_depo" => $row->description,
                        "err_post" => $m_postcode
                    );
                    $m_errors[] = $m_error;
                    $m_ignore[] = $row->card_id;
                }
                sleep(_GEOCODE_PAUSE);
            } else {
                $m_err_desc = sprintf("[%s-%s] Postcode is invalid please check",$mM,$y);
                $m_error = array(
                    "err_desc" => $m_err_desc,
                    "err_code" => $row->client_code,
                    "err_comp" => $row->title,
                    "err_depo" => $row->description,
                    "err_post" => $m_postcode
                );
                $m_errors[] = $m_error;
                $m_ignore[] = $row->card_id;
            }
        }
    }
}
if (count($m_errors) > 0) {
    $Emails->doGeocodeErrNotify($m_errors);
}

geocode.class.php

    class Geocode {

private $m_session = NULL;
private $m_security = NULL;

private $m_session_user;
private $m_session_pass;

private $m_key = _GMAP_KEY;
private $m_url = _GMAP_URL;
private $m_res = Array();

public function __construct($p_session,$p_security) 
{
    $this->m_session    = $p_session;
    $this->m_security   = $p_security;  

    $this->m_session_user   = $this->m_session->get('USR_AUTH');
    $this->m_session_pass   = $this->m_session->get('USR_PASS');

    if ($this->m_security->doLogin($this->m_session_user,$this->m_session_pass) <= 0) 
    { 
        return NULL;
        die; 
    } 
}

public function doGeocode($p_postcode)
{
    try {
    //  //$xml = new SimpleXMLElement(sprintf($this->m_url,$p_postcode,$this->m_key),0,TRUE); //OLD FOR V.2
        $xml = new SimpleXMLElement(sprintf($this->m_url,$p_postcode),0,TRUE);

    } catch (Exception $e) {
        echo sprintf('Caught exception: %s', $e->getMessage());
        return NULL;
        die;
    }
    $st = $xml->Response->Status->code;
    if (strcmp($st, "200") == 0) 
    {
        $co = $xml->Response->Placemark->Point->coordinates;
        $cs = preg_split("/[\s]*[,][\s]*/", $co);

        $this->m_res = Array(
                "lng" => $cs[0],
                "lat" => $cs[1],
                "alt" => $cs[2]
            );
        return $this->m_res;
    } else {
        return NULL;
    }
}

}

誰かが私を助けてくれれば本当に感謝します。構成ファイルの新しい URL と現在の xml がセンサーに対して適切に設定されていないことに関係があると思いますか??

4

1 に答える 1