[問題] 呼叫奇摩api抓出大量地址的經緯度

看板Web_Design作者 (過馬路)時間15年前 (2009/09/02 05:37), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
您好 我有一些問題想請教版上的諸位高手 最近我要利用yahoo的map api來抓出地址的經緯度 而且是處理大量的地址 不過yahoo的map api是用javascript呼叫 而我從網頁取出地址的程式是用php寫的 而我的寫法如下: get_address.php: <? require 'test7.php'; for($u=50000;$u<=50000;$u++){ $filename = file_get_contents("C:\Program Files\Teleport Pro\Projects\ptt_food/{$u}.html"); $fp = fopen('C:\AppServ\www\geo\address', 'w'); $pattern = '/(([台臺][北中南東]|北|高|宜蘭|花蓮|金門|南投|屏東|苗栗|桃園|高雄| 基隆|連江|雲林|新竹|嘉義|彰化|澎湖)[縣市].{0,5}(鄉|鎮|市|區)?.{0,5}(路|街|村| 里|大道|段).{0,3}(段)?.{0,5}(號)?.{0,3}(樓|F|f)?[^ \n])/u'; preg_match($pattern, $filename,$matches); $pattern2 ='/([\x{0020} \x{002d} \x{0030}-\x{0039} \x{003f} \x{0041}-\x{005a} \x{0061}-\x{007a} \x{007e} \x{4e00}-\x{fa2d} \x{fe56} \x{fe63} \x{ff10}-\x{ff19} \x{ff21}-\x{ff3a} \x{ff41}-\x{ff5a}]+)/u'; preg_match($pattern2, $matches[0],$matches); if($a!=0){ for($p=0;$p<$a;$p++){ $catch[$p] = $matches[0][$p]; } } else{ $catch[]= $matches[0]; } $k=0; if($catch[$k]!=null){ while($catch[$k]!=null){ fwrite($fp,$catch[$k]); $k++; } $ok="C:/AppServ/www/geo/address"; $lol = file_get_contents("C:/AppServ/www/geo/address"); $lol= iconv("UTF-8","big5",$lol); if(file_put_contents($ok, $lol)){ map($u); } $userdata=null; $catch=null; $ll=null; $matches=null; $lol=null; $ok=null; } $userdata=null; $catch=null; $ll=null; $matches=null; fclose($fp); echo "<BR>"; } ?> test7.php: <? require 'get_latlon.php'; function map($u){?> <html> <head> <script type="text/javascript" src="" rel="nofollow">http://tw.api.maps.yahoo.com/ajaxymap?v=3.8&appid=bIBJX23V34FZfj_o_CnnjraiWBawSpmqVa8jXFr548QYnb5UYNI2deAQFEsu"></script> </head> <body> <div id="map"></div> <script type="text/javascript"> var map = new YMap(document.getElementById('map'),YAHOO_MAP_REG,new YSize(0,0)); var fso = new ActiveXObject("Scripting.FileSystemObject"); var fso2 = new ActiveXObject("Scripting.FileSystemObject"); var txtFile = fso.OpenTextFile("C:/AppServ/www/geo/lat_lon.txt", 2, false, 0); var txtFile2 = fso2.OpenTextFile("C:/AppServ/www/geo/address", 1, false, 0); var fText = txtFile2.ReadLine(); function startMap(){ YEvent.Capture(map, EventsList.endMapDraw , reportPosition); map.drawZoomAndCenter(fText, 1); function reportPosition(_e, _c){ var mapCoordCenter = map.convertLatLonXY(map.getCenterLatLon()); txtFile.WriteLine(map.YGeoPoint.Lat); txtFile.WriteLine(map.YGeoPoint.Lon); } } window.onload = startMap; </script> </body> </html> <? latlon($u); }?> get_latlon.php: <? function latlon($u){ $ll=file("C:/AppServ/www/geo/lat_lon.txt"); $ad=file("C:/AppServ/www/geo/address"); $post=array('address' => $ad, 'lat' => $ll[0], 'lon' => $ll[1]); if (($file_content = file_get_contents('C:/AppServ/www/geo/geoinfo')) === false) die("can't open geoinfo"); $userdata = unserialize($file_content); if (empty($userdata)) $userdata = array(); $userdata[$u]=$post; file_put_contents('C:/AppServ/www/geo/geoinfo', serialize($userdata)) or die ("can't save to geoinfo"); $ad=null; $ll=null; $userdata=null; $post=null; } ?> 我爬過文 先前有高手跟前輩分享過php跟javascript之間傳值的方法 不過我不知道為何 我沒辦法傳 所以我想了一個方法 就是先用php寫到文件檔 再用javascript去讀那個文件檔 我的流程如下: 從編號$u的網頁中取出地址 因為api只讀Big5 所以把utf-8轉為Big5 然後寫到檔案address裡 接著呼叫map($u) 利用map($u)裡的javascript 去讀檔案address的地址 然後傳給yahoo 等他傳回來 我再寫入lat_lon.txt 接著呼叫latlon($u) 把地址跟經緯度寫入檔案 我發現一次做一個ok 地址寫進去了 經緯度也抓到了 可是當我的for迴圈 要跑兩篇以上的網頁(例如:編號50000跟編號50001的網頁,這些網頁我已經事先抓好 存在電腦裡) 他就掛了 不曉得我到底該怎麼改 才能成功 是應該推倒 全部重寫 還是 到php.js 利用javascript全部寫出我php的程式 版上有高手前輩說過 php跟javascript分別是server端和client端語言 也說過 PHP跑完 跑出網頁 裡面有js 在瀏覽器上執行js 不會有什麼PHP跑到一半去呼叫js的 不過我還是蠻模糊的 煩請各位高不吝賜教 感謝 感謝 <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.64.112 ※ 編輯: KHW 來自: 114.32.64.112 (09/02 05:38) ※ 編輯: KHW 來自: 114.32.64.112 (09/02 05:53)
文章代碼(AID): #1AdPF-Jz (Web_Design)
文章代碼(AID): #1AdPF-Jz (Web_Design)