Beispielcode zum Aufrufen der Yahoo! Local Search API in Java

Quellcode

import java.io.*;
import java.net.*;
import java.util.*;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;

public class LocalSearch {

  public static void main(String[] args) {
    try {
      String appid = "YOUR APPLICATION ID";
      String query = "Tokyo Turm";
      List<Properties> pois = new LocalSearch(appid).search(query);
      for (Properties p : pois) {
        System.out.println(p.getProperty("name"));
        System.out.println(" " + p.getProperty("lat") + ", " + p.getProperty("lon"));
        System.out.println();
      }
    } catch (Exception e) {
      System.out.println("ERROR: " + e.toString());
    }
  }

  private final String appid;

  public LocalSearch(String appid) {
    this.appid = appid;
  }

  private Document get(String url, Map<String, String> headers) throws Exception {

    URL urlObj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();

    // timeout
    con.setConnectTimeout(3 * 1000);
    con.setReadTimeout(3 * 1000);

    // HTTP method
    con.setRequestMethod("GET");

    // HTTP request headers
    for (Map.Entry<String, String> header : headers.entrySet()) {
      con.addRequestProperty(header.getKey(), header.getValue());
    }

    con.connect();

    InputStream is = con.getInputStream();
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
    is.close();

    return doc;
  }

  private List<Properties> xml2pois(Document doc) throws XPathExpressionException {

    List<Properties> result = new ArrayList<Properties>();

    XPath xpath = XPathFactory.newInstance().newXPath();
    NodeList features = (NodeList) xpath.evaluate("YDF/Feature", doc, XPathConstants.NODESET);
    for (int i = 0; i < features.getLength(); i++) {
      Node feature = features.item(i);
      String type = xpath.evaluate("Geometry/Type", feature);
      if (type.equals("point")) {
        String coordinates = xpath.evaluate("Geometry/Coordinates", feature);
        String[] ll = coordinates.split(",");
        Properties p = new Properties();
        p.setProperty("name", xpath.evaluate("Name", feature));
        p.setProperty("lat", ll[1]);
        p.setProperty("lon", ll[0]);
        result.add(p);
      }
    }
    return result;
  }

  private String encode(Map<String, String> params) throws UnsupportedEncodingException {
    String encoding = "UTF-8";
    List<String> list = new ArrayList<String>();
    for (Map.Entry<String, String> header : params.entrySet()) {
      String key = URLEncoder.encode(header.getKey(), encoding);
      String val = URLEncoder.encode(header.getValue(), encoding);
      list.add(key + "=" + val);
    }
    return String.join("&", list);
  }

  public List<Properties> search(String query) throws Exception {

    String baseURL = "https://map.yahooapis.jp/search/local/V1/localSearch";

    Map<String, String> params = new LinkedHashMap<String, String>();
    params.put("query", query);
    params.put("output", "xml");
    params.put("results", "3");
    params.put("sort", "score");

    String url = baseURL + "?" + encode(params);

    Map<String, String> headers = new LinkedHashMap<String, String>();
    headers.put("User-Agent", "Yahoo AppID: " + appid);

    Document doc = get(url, headers);
    return xml2pois(doc);
  }
}

Ausführungsergebnis

$ javac LocalSearch.java 
$ java LocalSearch
Sonderbühne des Tokyo Tower Grand Observatory Club333
 35.65870316, 139.74540779

Tokyo Turm
 34.729707500000, 136.519455833333

Mutter Ranch CAFE Tokyo Tower Store
 35.658703055556, 139.745407777778

Referenzmaterial

Recommended Posts

Beispielcode zum Aufrufen der Yahoo! Local Search API in Java
Beispielcode zum Aufrufen der Yahoo! Shopping Product Search (v3) -API mit Spring RestTemplate
Beispielcode zum Aufrufen der Yahoo! Shopping Product Search (v3) -API mit der offiziell von Java 11 eingeführten HTTP-Client-API
Rufen Sie die Windows-Benachrichtigungs-API in Java auf
Beispielcode zum Konvertieren von List in List <String> in Java Stream
[Java] Ich habe versucht, die Yahoo API-Produktsuche zu implementieren
Beispielcode zum Abrufen der wichtigsten SQL-Typwerte in Java + MySQL 8.0
Aufrufen und Verwenden der API in Java (Spring Boot)
Errate den Zeichencode in Java
Analysieren der COTOHA-API-Syntaxanalyse in Java
Rufen Sie die Super-Methode in Java auf
Beispielcode zum Abrufen der Werte der wichtigsten SQL-Typen in Java + Oracle Database 12c
Beispielcode mit JMustache, der Moustache-Vorlagen-Engine in Java
Java-Referenz zum Verständnis in der Abbildung
Versuchen Sie es mit der Stream-API in Java
So erhalten Sie das Datum mit Java
[Java] Neue Spezifikation Implementierung der Yahoo! -Produktsuch-API
Beispiel zum Entpacken einer gz-Datei in Java
Beispielcode zum Abrufen der wichtigsten JDBC-Typwerte in der Java + H2-Datenbank
Beispielcode zum Serialisieren und Deserialisieren von Java Enum-Enumerationen und JSON in Jackson
Ich habe die COTOHA-API-Syntaxanalyse 100 Mal in Java aufgerufen, um die Leistung zu messen.
Java-Beispielcode 02
Java-Beispielcode 03
Java-Beispielcode 04
Java-Beispielcode 01
ChatWork4j für die Verwendung der ChatWork-API in Java
Demo-Code, der Verzeichnisse mit Files.walkFileTree rekursiv durchsucht
Code zum Escapezeichen von JSON-Zeichenfolgen in Java
[API] Ich habe versucht, die Postleitzahlensuch-API zu verwenden
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
Beispielquellcode zum Ermitteln des minimalen gemeinsamen Vielfachen mehrerer Werte in Java
Bedingte Verzweigung des Ergebnisses einer SQL-Anweisung, die nur eine in Java durchsucht
[Java] So lassen Sie den privaten Konstruktor in Lombok weg
Quelle zum Abrufen der Umleitungsquell-URL in Java
[Für Anfänger] Mindestbeispiel für die Anzeige von RecyclerView in Java
Zabbix API in Java
In der Abbildung verstandene Java-Klassen und -Instanzen
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Beispielcode zum Zuweisen eines Werts in der Eigenschaftendatei zu einem Feld des erwarteten Typs
Unterschiede im Code bei Verwendung des Längensystems in Java
Java-Codebeispiel zum Erfassen und Anzeigen von DBLINK-Quell- und Zieldaten in Oracle Database mithilfe von DBLINK
Diese Katze von Metadata Co., Ltd. Ruft die Katzen-API in Java auf.
Siehe C ++ im Android Studio-Modul (Java / Kotlin)
[Android, Java] Praktische Methode zur Berechnung der Differenz in Tagen
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Beispielcode zum Parsen von Datum und Uhrzeit mit Java SimpleDateFormat
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
Tipps rund um das Beispiel, um Lambda von Java auf CodePipeline freizugeben
So leiten Sie den letzten Tag des Monats in Java ab
So wechseln Sie Java in der OpenJDK-Ära auf dem Mac
So spielen Sie eine MIDI-Datei mit der Java Sound API ab
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
Java Parallel Code Sample Collection
Java Stream API in 5 Minuten
Java mit Visual Studio Code
Schreiben Sie Java8-ähnlichen Code in Java8