2016-08-01 128 views
0

我有一個JAVA程序從URL中提取數據。Java獲取谷歌地圖信息

Extract.java

public class Uni_Extract { 
    protected static String lat; 
    protected static String lng; 
    public static void main(String[] args) throws Exception { 
     System.out.println("Started"); 

     String csvFile = "C://Users/Kennedy/Desktop/university.csv"; 
     FileWriter writer = new FileWriter(csvFile); 

     for (int i=2; i<=2; i++){ 
      String url = "http://www.4icu.org/reviews/index"+i+".htm"; 

      Document doc = Jsoup.connect(url).userAgent("Mozilla").get(); 

      Elements cells = doc.select("td.i"); 

      Iterator<Element> iterator = cells.iterator(); 
      while (iterator.hasNext()) { 
       Element cell = iterator.next();    
       String university = Jsoup.parse((cell.select("a").text())).text(); 
       String country = cell.nextElementSibling().select("img").attr("alt"); 
       LatLngBackup LatLngBackup = new LatLngBackup(); 
       LatLngBackup.getLatLongPositions(university); 
       System.out.print(university); 
       System.out.printf(", lat : %s, lng : %s %n", lat, lng); 
       CSVUtils.writeLine(writer,Arrays.asList(country,university,lat,lng),',','"'); 
      } 
     } 
     writer.flush(); 
     writer.close(); 
    } 
} 

然後我還呼籲Java類經緯度呼籲從谷歌地圖API的經度和緯度。

public class LatLngBackup extends Uni_Extract 
{ 
public String[] getLatLongPositions(String address) throws Exception 
    { 
    int responseCode = 0; 
    String api = "https://maps.googleapis.com/maps/api/place/textsearch/xml?query=" + URLEncoder.encode(address, "UTF-8") + 
      "&key=AIzaSyCTBvomwAMvq0pSxgN0y2I_wALFJ8cx57Y"; 
    URL url = new URL(api); 
    HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection(); 
    httpConnection.connect(); 
    responseCode = httpConnection.getResponseCode(); 
    if(responseCode == 200) 
    { 
     DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();; 
     Document document = builder.parse(httpConnection.getInputStream()); 
     XPathFactory xPathfactory = XPathFactory.newInstance(); 
     XPath xpath = xPathfactory.newXPath();  
     XPathExpression expr = xpath.compile("/PlaceSearchResponse/status"); 
     String status = (String)expr.evaluate(document, XPathConstants.STRING); 
     if(status.equals("OK")) 
     { 
     expr = xpath.compile("//geometry/location/lat"); 
     super.lat = (String)expr.evaluate(document, XPathConstants.STRING); 
     expr = xpath.compile("//geometry/location/lng"); 
     super.lng = (String)expr.evaluate(document, XPathConstants.STRING); 
     return new String[] {lat, lng}; 
     } 
     else 
     {  
      super.lat=""; 
      super.lng=""; 
     } 
    } 
    return null; 
    } 
} 

但是,它給了我一個達到API密鑰請求限制的消息。有沒有其他的方法可以做到這一點?

+0

也許你應該使用例如sigleton來防止每次調用這個函數時進行連接。當然你應該閱讀一些關於OOP的內容。 –

+0

支付訂閱谷歌服務,所以你可以要求所有你需要的數據。免費的API密鑰用於開發目的,並有一個請求限制。 –

+0

@ shutdown-hnow可否請您解釋一下。我不是那種使用Google Map API和JAVA的expoertise –

回答

0

「它給我提供了API密鑰請求限制的消息。」

Usage limits

的谷歌Places API的Web服務強制執行每24小時1個000 請求,這可以增加免費的默認限制。如果您的應用超出限制,該應用將啓動失敗。通過在Google API控制檯上啓用 結算功能,驗證您的身份,從而每24小時內最多可獲得150 000個請求。 驗證需要信用卡。我們要求您的信用卡純粹是爲了驗證您的 身份。您的卡不會因使用Google Places API Web服務而收取費用。

免費使用的限制是每24小時150 000個請求。如果你的應用程序超出限制,該應用程序將再次啓動失敗。購買 Google Maps APIs Premium Plan許可證,每24小時可獲得超過150 000個 的請求。

免費使用只會讓你到目前爲止。考慮支付Premium License如果你想要更多。

附加閱讀: 有關使用和限制的完整信息,請參閱here