Exemple de code pour appeler l'API Yahoo! Local Search en Java

Code source

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 = "Tour de Tokyo";
      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);
  }
}

Résultat d'exécution

$ javac LocalSearch.java 
$ java LocalSearch
Stade spécial Tokyo Tower Observatory Club333
 35.65870316, 139.74540779

Tour de Tokyo
 34.729707500000, 136.519455833333

Mother Ranch CAFE Tokyo Tower Store
 35.658703055556, 139.745407777778

Matériel de référence

Recommended Posts

Exemple de code pour appeler l'API Yahoo! Local Search en Java
Exemple de code pour appeler l'API Yahoo! Shopping Product Search (v3) avec Spring RestTemplate
Exemple de code pour appeler l'API Yahoo! Shopping Product Search (v3) avec l'API client HTTP officiellement introduite à partir de Java 11
Appelez l'API de notification Windows en Java
Exemple de code pour convertir List en List <String> dans Java Stream
[Java] J'ai essayé de mettre en œuvre la recherche de produits de l'API Yahoo
Exemple de code pour obtenir les valeurs de type SQL clés dans Java + MySQL 8.0
Comment appeler et utiliser l'API en Java (Spring Boot)
Devinez le code de caractère en Java
Analyser l'analyse syntaxique de l'API COTOHA en Java
Appelez la super méthode en Java
Exemple de code pour obtenir les valeurs des principaux types SQL dans Java + Oracle Database 12c
Exemple de code utilisant JMustache, le moteur de modèles Moustache en Java
Référence Java à comprendre dans la figure
Essayez d'utiliser l'API Stream en Java
Comment obtenir la date avec Java
[Java] Nouvelle spécification Implémentation de l'API de recherche de produits Yahoo!
Exemple pour décompresser le fichier gz en Java
Exemple de code pour obtenir les valeurs de type JDBC clés dans la base de données Java + H2
Exemple de code pour la sérialisation et la désérialisation des énumérations Java Enum et JSON dans Jackson
J'ai appelé l'analyse de la syntaxe de l'API COTOHA 100 fois en Java pour mesurer les performances.
Exemple de code Java 02
Exemple de code Java 03
Exemple de code Java 04
Exemple de code Java 01
ChatWork4j pour l'utilisation de l'API ChatWork en Java
Code de démonstration qui recherche récursivement les répertoires avec Files.walkFileTree
Code pour échapper aux chaînes JSON en Java
[API] J'ai essayé d'utiliser l'API de recherche par code postal
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
Exemple de code source pour trouver le multiple commun minimum de plusieurs valeurs en Java
Branchement conditionnel du résultat de l'instruction SQL pour n'en rechercher qu'une seule en Java
[Java] Comment omettre le constructeur privé dans Lombok
Source utilisée pour obtenir l'URL de la source de redirection en Java
[Pour les débutants] Exemple minimum pour afficher RecyclerView en Java
API Zabbix en Java
Classes et instances Java comprises dans la figure
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
Exemple de code pour attribuer une valeur dans le fichier de propriétés à un champ du type attendu
Différences de code lors de l'utilisation du système de longueur en Java
Exemple de code Java pour acquérir et afficher les données source et de destination DBLINK dans Oracle Database à l'aide de DBLINK
Ce chat de Metadata Co., Ltd. Appelle l'API cat en Java.
Reportez-vous à C ++ dans le module Android Studio (Java / kotlin)
[Android, Java] Méthode pratique pour calculer la différence en jours
Je souhaite utiliser l'API Java 8 DateTime lentement (maintenant)
Créer une méthode pour renvoyer le taux de taxe en Java
Essayez d'utiliser l'API de recherche de code postal avec Spring Boot
Exemple de code pour analyser la date et l'heure avec SimpleDateFormat de Java
Éléments à prendre en compte lors de l'écriture de code en Java
Corrigez le code de caractère en Java et lisez à partir de l'URL
Conseils autour de l'exemple pour publier Lambda de Java sur CodePipeline
Comment dériver le dernier jour du mois en Java
Comment changer Java à l'ère d'OpenJDK sur Mac
Comment lire un fichier MIDI à l'aide de l'API Java Sound
Je souhaite simplifier l'instruction if-else de la branche conditionnelle en Java
Collection d'exemples de code parallèle Java
API Java Stream en 5 minutes
Java avec Visual Studio Code
Écrire du code de type Java8 en Java8