通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息

  • 需求:通过高德api查询所有店铺地址信息
  • 需求分析
  • 具体实现
    • 1、申请高德appkey
    • 2、下载types city 字典值
    • 3、具体代码调用

需求:通过高德api查询所有店铺地址信息

需求分析

查询现有高德api发现现有接口关键字搜索API服务地址:

https://developer.amap.com/api/webservice/guide/api/search
参数需要主要参数:key、types、city
其中types city可以查询:
https://developer.amap.com/api/webservice/download

具体实现

1、申请高德appkey

地址:https://console.amap.com/dev/key/app

2、下载types city 字典值

并将字典值解析读取到代码中,如图
在这里插入图片描述

3、具体代码调用

类说明:

Api  调用方法
CityUtil 城市编码查询工具类
ReaderFile 文件读写工具类
Shop 地点实体类
ShopUtil 地点查询工具类

具体代码

package com.gaode;

import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson2.JSON;

import java.util.ArrayList;
import java.util.List;

/**
 * 时间:2024/6/21
 * 描述:
 */

public class Api {
    /**
     * 需要设置自己的apikey
     */
    public static String apiKey = "";
    public static void main(String[] args)  throws Exception{
        //查询单个城市
        List<Shop> AllShopList = new ArrayList<>();
        List<String> types = ReaderFile.getTypes();
        List<String> citys = ReaderFile.getCitys();
        for (int i = 0; i < types.size(); i++) {
            String type = types.get(i);
            for (int j = 0; j < citys.size(); j++) {
                String city = citys.get(i);
                List<Shop> shopList = ShopUtil.queryShops(city,type);
                if(CollectionUtil.isNotEmpty(shopList)){
                    AllShopList.addAll(shopList);
                }
                if(CollectionUtil.isNotEmpty(AllShopList)){
                    System.out.println(shopList.size());
                    System.out.println(shopList);
                    continue;
                }
            }
        }
        System.out.println("结束===================");
        System.out.println("=============="+AllShopList.size());
        System.out.println(JSON.toJSONString(AllShopList));

    }


    public static  List<Shop> queryAll() {
        List<Shop> shopList = new ArrayList<>();
        List<String> list = CityUtil.queryCitys();
        if (CollectionUtil.isNotEmpty(list)) {
            for (String city : list) {
                List<Shop> oneShopList = ShopUtil.queryShops(city,null);
                if (CollectionUtil.isNotEmpty(oneShopList)) {
                    shopList.addAll(oneShopList);
                }
            }
        }
        return shopList;
    }
}
package com.gaode;

/**
 * 描述:
 */

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


public class CityUtil {
    public static List<String> queryCitys(){
        String apiKey  = Api.apiKey;
        List<String> ls = new ArrayList<>();
        // 获取所有城市列表
        String cityListUrl = "https://restapi.amap.com/v3/config/district?key=" + apiKey + "&subdistrict=1";
        String cityListResponse = null;
        try {
            cityListResponse = sendGetRequest(cityListUrl);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        JSONObject cityListJson = new JSONObject(cityListResponse);
        JSONArray cityList = cityListJson.getJSONArray("districts").getJSONObject(0).getJSONArray("districts");
        for (int i = 0; i < cityList.size(); i++) {
            JSONObject city = cityList.getJSONObject(i);
            String cityName = city.get("name", String.class);
            ls.add(cityName);
        }
        return ls;
    }

    // 发送GET请求
    private static String sendGetRequest(String url) throws Exception {
        StringBuilder response = new StringBuilder();
        HttpURLConnection connection = null;
        BufferedReader reader = null;

        try {
            URL requestUrl = new URL(url);
            connection = (HttpURLConnection) requestUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);

            reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
        } finally {
            if (reader != null) {
                reader.close();
            }
            if (connection != null) {
                connection.disconnect();
            }
        }

        return response.toString();
    }
}

package com.gaode;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 时间:2024/6/23
 * 描述:
 */

public class ReaderFile {
    public static void main(String[] args)throws Exception {
        System.out.println(getTypes());
        System.out.println(getCitys());
    }
    public static  List<String> getCitys() throws Exception {
        String filePath = "D:\\workspace\\codeStr\\studyCode\\address\\src\\main\\resources\\citycode.xlsx";
        FileInputStream file = new FileInputStream(filePath);
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

        Map<String,String> map = new HashMap<>();
        String cellValue = "";
        List<String> result = new ArrayList<>();
        try{
            for (Row row : sheet) {
                for (Cell cell : row) {
                    int columnIndex = cell.getColumnIndex();
                    String stringCellValue =null;
                    if(columnIndex==2){
                        try{
                            stringCellValue = cell.getStringCellValue();
                        }catch (Exception e){
                            stringCellValue = String.valueOf(cell.getNumericCellValue());
                        }
                        stringCellValue = stringCellValue.replace(".0","");
                    }
                    if(stringCellValue!=null){
                        String substring = stringCellValue;
                        if(!substring.equals("citycode")){
                            map.put(substring,substring);
                        }
                        continue;
                    }
                }
            }

           for (String key : map.keySet()){
               result.add(key);
           }
        }catch (Exception e){
            System.out.println("==========="+cellValue);
            e.printStackTrace();
        }
        return result;

    }


    public static List<String> getTypes() throws Exception {
        String filePath = "D:\\workspace\\codeStr\\studyCode\\address\\src\\main\\resources\\poi.xlsx";
        List<String> list = new ArrayList<>();
        FileInputStream file = new FileInputStream(filePath);
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

        Map<String,String> map = new HashMap<>();
        String cellValue = "";
        List<String> result = new ArrayList<>();
        try{
            for (Row row : sheet) {
                for (Cell cell : row) {
                    int columnIndex = cell.getColumnIndex();
                    String stringCellValue =null;
                    if(columnIndex==1){
                        try{
                            stringCellValue = cell.getStringCellValue();
                        }catch (Exception e){
                            stringCellValue = String.valueOf(cell.getNumericCellValue());
                        }
                        stringCellValue = stringCellValue.replace(".0","");
                    }
                    if(stringCellValue!=null){
                        String substring = stringCellValue.substring(0, 2);
                        if(!substring.equals("NE")){
                            map.put(substring,substring);
                        }
                        continue;
                    }
                }
            }

            for (String key : map.keySet()){
                result.add(key);
            }
        }catch (Exception e){
            e.printStackTrace();
        }

        return result;
    }

}

package com.gaode;

/**
 * 时间:2024/6/21
 * 描述:
 */

import lombok.Data;

import java.util.List;

@Data
public class Shop {
    private String pname;
    private String cityname;
    private String address;

    private String type;
    private String location;
    private String tel;
    private String name;
}


package com.gaode;

/**
 * 时间:2024/6/21
 * 描述:
 */

import com.alibaba.fastjson2.JSON;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ShopUtil {
    public static  List<Shop>   queryShops(String city,String types) {
        OkHttpClient client = new OkHttpClient();
        String apiKey = Api.apiKey;

        // 设置offset参数来获取更多的数据
        int pageSize = 100; // 每页显示的POI数量
        int currentPage = 0; // 当前页码

        JSONObject poi = null;
        List<Shop> shopList = new ArrayList<>();
        while (true) {
            int offset = currentPage * pageSize;
            String url = "https://restapi.amap.com/v3/place/text?key=" + apiKey + "&types="+types+"&city=" + city + "&offset=" + offset + "&page=" + (currentPage + 1);
//            String url = "https://restapi.amap.com/v3/place/text?key=" + apiKey +"&offset=" + offset + "&page=" + (currentPage + 1);

            Request request = new Request.Builder()
                    .url(url)
                    .build();

            try (Response response = client.newCall(request).execute()) {
                if (!response.isSuccessful()) {
                    throw new IOException("Unexpected code " + response);
                }

                String responseBody = response.body().string();
                JSONObject jsonResponse = new JSONObject(responseBody);


                if (jsonResponse.has("pois")) {
                    JSONArray pois = jsonResponse.getJSONArray("pois");
                    if (pois.length() == 0) {
                        // 如果当前页没有数据,说明已经查询完毕
                        break;
                    }
                    for (int i = 0; i < pois.length(); i++) {
                        poi = pois.getJSONObject(i);
                        Shop shop = new Shop();
                        shop.setPname(JSON.toJSONString(poi.get("pname")));
                        shop.setCityname(JSON.toJSONString(poi.get("cityname")));
                        shop.setAddress(JSON.toJSONString(poi.get("address")));
                        shop.setType(JSON.toJSONString(poi.get("type")));
                        shop.setLocation(JSON.toJSONString(poi.get("location")));
                        shop.setTel(JSON.toJSONString(poi.get("tel")));
                        shop.setName(JSON.toJSONString(poi.getString("name")));
                        shopList.add(shop);
                    }
                } else {
                    System.out.println("没有找到相关的店铺信息。");
                    break;
                }
                currentPage++;
            } catch (Exception e) {
                System.out.println("异常信息-----" + JSON.toJSONString(poi));
                e.printStackTrace();
                break;
            }

        }
        return shopList;
    }
}

以上为具体代码
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>address</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <hutool.version>5.8.22</hutool.version>
        <lombok.version>1.18.26</lombok.version>
        <druid.version>1.1.20</druid.version>
        <mybatis.springboot.version>3.0.2</mybatis.springboot.version>
        <mysql.version>8.0.11</mysql.version>
        <swagger3.version>2.2.0</swagger3.version>
        <mapper.version>4.2.3</mapper.version>
        <fastjson2.version>2.0.40</fastjson2.version>
        <persistence-api.version>1.0.2</persistence-api.version>
        <spring.boot.test.version>3.1.5</spring.boot.test.version>
        <spring.boot.version>3.2.0</spring.boot.version>
        <spring.cloud.version>2023.0.0</spring.cloud.version>
        <spring.cloud.alibaba.version>2022.0.0.0-RC2</spring.cloud.alibaba.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>

        <!--SpringCloud consul discovery -->

        <!-- 引入自己定义的api通用包 -->
        <dependency>
            <groupId>com.atguigu.cloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--SpringBoot集成druid连接池-->

        <!--mybatis和springboot整合-->


        <!--hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
        </dependency>
        <!-- fastjson2 -->
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>${fastjson2.version}</version>

        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
            <scope>provided</scope>
        </dependency>
        <!--test-->

        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>${swagger3.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>${fastjson2.version}</version>
        </dependency>
        <!-- 其他依赖项 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.11</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20210307</version>
        </dependency>
    </dependencies>


</project>


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/740422.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ai智能写作一键生成的软件盘点,4款宝藏!

在信息爆炸的时代&#xff0c;内容创作已成为各行各业的刚需。然而&#xff0c;对于许多创作者来说&#xff0c;如何高效、高质量地输出内容却是一个不小的挑战。幸运的是&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI智能写作软件应运而生&#xff0c;它们凭借一键生…

在Vue表单中设置缺省值

有个需求&#xff0c;在新增记录的时候&#xff0c;打开新增页面&#xff0c;员工姓名处获取到当前登录用户的用户名&#xff0c;并将其设置为缺省值。 /** 新增按钮操作 */handleAdd() {this.reset();this.open true;// this.form.employeeName this.$store.state.user.name…

【Spine学习15】变换约束

变换约束&#xff1a;能让一个骨骼受另一个骨骼的变化影响。 1、选择m创建一个变换约束&#xff1a; 2、点击这个约束&#xff0c; 将移动数值拉的越满&#xff0c;m越接近s骨骼 当约束为0也就是默认的时候&#xff0c;m骨骼将不会受影响&#xff0c;变换约束可有可无。 tips…

基于Pytorch框架构建AlexNet模型

Pytorch 一、判断环境1.导入必要的库2.判断环境 二、定义字典1.定义字典 三、处理图像数据集1.导入必要的模块2.定义变量3.删除隐藏文件/文件夹 四、加载数据集1.加载训练数据集2.加载测试数据集3.定义训练数据集和测试集路径4.加载训练集和测试集5.创建训练集和测试集数据加载…

Java基础:IO流

目录 一、定义 1.引言 2.分类 &#xff08;1&#xff09;按照流的方向分 &#xff08;2&#xff09;按操作文件的类型分 3.体系结构 二、字节流&#xff08;以操作本地文件为例&#xff09; 1. FileOutputStream 类 &#xff08;1&#xff09;定义 &#xff08;2&am…

每日一题——Python代码实现PAT甲级1059 Prime Factors(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码点评 时间复杂度分析 空间复杂度分析 改进建议 我要更强 时间复杂度…

大学生综合能力测评系统(安装+讲解+源码)

【毕设者】大学生综合能力测评系统(安装讲解源码) 分为管理员老师学生端 技术栈 后端: SpringBoot Mysql MybatisPlus 前端: Vue Element 功能截图: 给你安装运行

从WebM到MP3:利用Python和wxPython提取音乐的魔法

前言 有没有遇到过这样的问题&#xff1a;你有一个包含多首歌曲的WebM视频文件&#xff0c;但你只想提取其中的每一首歌曲&#xff0c;并将它们保存为单独的MP3文件&#xff1f;这听起来可能有些复杂&#xff0c;但借助Python和几个强大的库&#xff0c;这个任务变得异常简单。…

开源的网络瑞士军刀「GitHub 热点速览」

上周的开源热搜项目可谓是精彩纷呈&#xff0c;主打的就一个方便快捷、开箱即用&#xff01;这款无需安装、点开就用的网络瑞士军刀 CyberChef&#xff0c;试用后你就会感叹它的功能齐全和干净的界面。不喜欢 GitHub 的英文界面&#xff1f;GitHub 网站汉化插件 github-chinese…

Vite: 关于预构建的毫秒级响应

概述 在我们的项目代码中&#xff0c;我们所说的模块代码其实分为两部分 一部分是源代码&#xff0c;也就是业务代码另一部分是第三方依赖的代码&#xff0c;即 node_modules 中的代码 Vite 是一个提倡 no-bundle 的构建工具&#xff0c;相比于传统的 Webpack能做到开发时的模…

【通用技巧】自动获取日志存放路径,无需手动修改配置文件

我们在部署环境的时候&#xff0c;常常会手动修改一些配置文件的存放地址&#xff0c;比如日志的路径、截图的路径&#xff0c;这是因为我们的环境不一样&#xff0c;部署应用的位置也不一样导致的。如果位置写死了&#xff0c;那么就会造成通用性很差&#xff0c;所以我们经常…

(深度学习记录)第TR5周:Transformer中的位置编码详解

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 &#x1f3e1;我的环境&#xff1a; 语言环境&#xff1a;Python3.11.4编译器&#xff1a;Jupyter Notebooktorcch版本&#xff1a;2.0.…

[FreeRTOS 基础知识] 信号量 概念

文章目录 信号量定义信号量特性 信号量定义 信号量是一个抽象的数据类型&#xff0c;通常包含一个整数值以及一个等待该值变为正数的任务列表&#xff08;也称为等待队列&#xff09;。信号量的整数值代表了系统中某种资源的可用数量。 在操作系统中信号量用于控制对共享资源访…

[FreeRTOS 内部实现] 信号量

文章目录 基础知识创建信号量获取信号量释放信号量信号量 内部实现框图 基础知识 [FreeRTOS 基础知识] 信号量 概念 创建信号量 #define queueQUEUE_TYPE_BINARY_SEMAPHORE ( ( uint8_t ) 3U ) #define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( uint8_t ) 0U ) #define xSe…

elementUI相关知识及搭建使用过程

​​​​​​ 目录 ​​​​​​ 一.elementUI相关的知识 1.什么是elementUI 2.如何在创建的项目中使用elementUI的组件(1)安装 ​ (2)在项目的main.js中引入elementUI (3)使用elementui里的组件 一.elementUI相关的知识 1.什么是elementUI Element&#xff0c;一套为开…

基于Pytorch框架构建LeNet-5模型

Pytorch 一、训练模型1.导入必要的库2.设置超参数3.数据预处理4.读取数据 二、定义卷积神经网络1.定义卷积神经网络2.定义学习率3.实例化模型并且移动到GPU4.选择优化器 三、定义调整学习率的函数1.定义调整学习率的函数 四、训练模型1.设置模型为训练模式2.遍历训练数据加载器…

嵌入式计算器模块实现

嵌入式计算器模块规划 计算器混合算法解析 上面我们的算法理论已经完善, 我们只用给一个混合运算式, 计算器就可以帮助我们计算出结果. 但是存在一个痛点, 每次计算算式,都要重新编译程序, 所以我们想到了, 利用单片机, 读取用户输入的按键, 组成算式, 输入给机器, 这样我们就…

Docker编译nanopc-t4源码流程介绍

官方文档 Android系统编译 vnc加环境变量配置 https://github.com/friendlyarm/docker-cross-compiler-novnc 下载 git clone https://github.com/friendlyarm/docker-ubuntu-lxde-novnc cd docker-ubuntu-lxde-novnc docker build --no-cache -t docker-ubuntu-lxde-novnc …

板凳--------第20章-信号:基本概念1

tlpi_hdr.h头文件使用及设置 liao__ran 于 2020-09-29 15:12:01 发布 阅读量1.6k 收藏 5 点赞数 1 分类专栏&#xff1a; linux系统编程手册 版权 linux系统编程手册 专栏收录该内容 7 篇文章 1 订阅 订阅专栏 使用的头文件&#xff0c;主要如下&#xff1a; ename.c.inc erro…

python实训day4

1、查看数据库的版本 2、查看当前用户 3、查看当前数据库 4、计算表达式的结果; 任何一个数据库,无论大小,都首先是一个超级计算器 5、查看当前MySQL环境中所有的数据库; 系统数据库(只能看)和自定义数据库(任何操作) 6、先建数据库 gaoming 7、如果表已经存在,则创建不能成功 …