通过高德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>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库精选题(五)(事务、并行控制与恢复系统)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;数据库 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 概论 事务 并发控制 恢复系统 三…

游戏AI的创造思路-技术基础-机器学习(2)

本篇存在大量的公式&#xff0c;数学不好的孩子们要开始恶补数学了&#xff0c;尤其是统计学和回归方程类的内容。 小伙伴们量力而行~~~~~ 游戏呢&#xff0c;其实最早就是数学家、元祖程序员编写的数学游戏&#xff0c;一脉相承传承至今&#xff0c;囊括了更多的设计师、美术…

QT拖放事件之五:自定义拖放操作-拖动中的修饰符操作

1、效果 2、代码 #include "SelfButton.h" #include <QApplication>SelfButton::SelfButton(QString str ,QWidget* parent):Q

JAVA系列---HttpServletRequest

Servlet 处理 HTTP 请求的流程 一般情况下&#xff0c;浏览器&#xff08;客户端&#xff09;通过 HTTP 协议来访问服务器的资源&#xff0c;Servlet 主要用来处理 HTTP 请求。核心对象有三个 Servlet&#xff1a;提供service()方法处理请求ServletRequest&#xff1a;请求信…

linux中的调试工具gdb

目录 1.背景知识补充 2.使用 知识补充 1.背景知识补充 1.gcc下编译默认是release方式发布的&#xff0c;无法直接进行调试 如果要以debug方式发布&#xff0c;需要携带-g 可以使用grep查询 因为携带debug信息&#xff0c;其文件体积要大一些 2.使用 1.gdb 可执行程序 …

北邮《计算机网络》网络层笔记

文章目录 单词复习网络层前言路由算法&#xff08;构造路由表的算法&#xff09;静态路由算法自适应算法 拥塞控制QoS 服务质量&#xff08;小小的一节&#xff09;网络互联&#xff08;还是小小的一节&#xff09;Internet 单词复习 estimates boot off-line in advance refl…

【PyTorch单点知识】神经元网络模型剪枝prune模块介绍(上,非结构化剪枝)

文章目录 0. 前言1. 剪枝prune主要功能分类2. torch.nn.utils.prune中的方法介绍3. PyTorch实例3.1 BasePruningMethod3.2PruningContainer3.3 identity3.4random_unstructured3.5l1_unstructured 4. 总结 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己…

AI办公自动化:免费批量将英语电子书转成有声书

Edge-TTS是由微软推出的文本转语音Python库&#xff0c;通过微软Azure Cognitive Services转化文本为自然语音。可以作为付费文本转语音TTS服务的替代品&#xff0c;Edge-TTS支持40多种语言和300种声音&#xff0c;提供优质的语音输出 。 edge-tts支持英语、汉语、日语、韩语、…

基于Netron库的PyTorch 2.0模型可视化

【图书推荐】《从零开始大模型开发与微调&#xff1a;基于PyTorch与ChatGLM》_《从零开始大模型开发与微调:基于pytorch与chatglm》-CSDN博客 前面章节带领读者完成了基于PyTorch 2.0的MNIST模型的设计&#xff0c;并基于此完成了MNIST手写体数字的识别。此时可能有读者对我们…

C语言结构体包含结构体

C语言结构体可以包含另一个结构体&#xff1b; 下面通过一个例子看一下&#xff1b; struct Date {int day;int month;int year; };struct Person {char *name;struct Date birthday; }; ...... void CTestView::OnDraw(CDC* pDC) {CTestDoc* pDoc GetDocument();ASSERT_VAL…

C语言 | Leetcode C语言题解之第189题轮转数组

题目&#xff1a; 题解&#xff1a; void swap(int* a, int* b) {int t *a;*a *b, *b t; }void reverse(int* nums, int start, int end) {while (start < end) {swap(&nums[start], &nums[end]);start 1;end - 1;} }void rotate(int* nums, int numsSize, int…

国内邮件推送如何避免拦截?内容优化技巧?

国内邮件推送的平台怎么选择&#xff1f;如何提高邮件推送效果&#xff1f; 邮件营销是企业与客户沟通的重要方式&#xff0c;但在国内邮件推送过程中&#xff0c;邮件被拦截的问题屡见不鲜。为了确保邮件能够顺利送达目标用户&#xff0c;AokSend将探讨一些有效的策略&#x…

【Android】实现图片和视频混合轮播(无限循环、视频自动播放)

目录 前言一、实现效果二、具体实现1. 导入依赖2. 布局3. Banner基础配置4. Banner无限循环机制5. 轮播适配器6. 视频播放处理7. 完整源码 总结 前言 我们日常的需求基本上都是图片的轮播&#xff0c;而在一些特殊需求&#xff0c;例如用于展览的的数据大屏&#xff0c;又想展…

跟着DW学习大语言模型-什么是知识库,如何构建知识库

建立一个高效的知识库对于个人和组织来说非常重要。无论是为了个人学习和成长&#xff0c;还是为了组织的持续创新和发展&#xff0c;一个完善的知识管理系统都是不可或缺的。那么&#xff0c;如何建立一个高效的知识库呢&#xff1f; 在建立知识库之前&#xff0c;首先需要确定…

第3章 小功能大用处-事务与Lua

为了保证多条命令组合的原子性&#xff0c;Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题。 首先简单介绍Redis中事务的使用方法以及它的局限性&#xff0c;之后重点介绍Lua语言的基本使用方法&#xff0c;以及如何将Redis和Lua脚本进行集成&#xff0c;最后给出Red…

项目实训-vue(十三)

项目实训-vue&#xff08;十三&#xff09; 文章目录 项目实训-vue&#xff08;十三&#xff09;1.概述2.处理按钮 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.处理按钮 实现了图片的上传之后&#xff0c;还需要设置具体的上传按钮。 这段代码使用 Element UI 的 …

Spring学习02-[Spring容器核心技术IOC学习]

Spring容器核心技术IOC学习 什么是bean?如何配置bean?Component方式bean配合配置类的方式import导入方式 什么是bean? 被Spring管理的对象就是bean,和普通对象的区别就是里面bean对象里面的属性也被注入了。 如何配置bean? Component方式、bean配合配置类的方式、import…

C语言 | Leetcode C语言题解之第190题颠倒二进制位

题目&#xff1a; 题解&#xff1a; const uint32_t M1 0x55555555; // 01010101010101010101010101010101 const uint32_t M2 0x33333333; // 00110011001100110011001100110011 const uint32_t M4 0x0f0f0f0f; // 00001111000011110000111100001111 const uint32_t M8…

【containerd】Containerd高阶命令行工具nerdctl

前言 对于习惯了使用docker cli的用户来说&#xff0c;containerd的命令行工具ctr使用起来不是很顺手&#xff0c;此时别慌&#xff0c;还有另外一个命令行工具项目nerdctl可供我们选择。 nerdctl是一个与docker cli风格兼容的containerd的cli工具。 nerdctl已经作为子项目加入…

秋招突击——6/24——复习{完全背包问题——买书,状态转换机——股票买卖V}——新作{两数相除,LRU缓存实现}

文章目录 引言复习完全背包问题——买书个人实现 状态转换机——股票买卖V个人实现参考实现 新作两数相除个人实现 新作LRU缓存实现个人实现unordered_map相关priority_queue相关 参考实现自己复现 总结 引言 今天知道拼多多挂掉了&#xff0c;难受&#xff0c;那实习就是颗粒无…