最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java如何根據(jù)IP獲取當前區(qū)域天氣信息詳解

 更新時間:2021年08月03日 12:29:38   作者:Kiss  
根據(jù)IP自動獲取當?shù)氐奶鞖忸A報信息這個功能大家應該都遇到過,天氣預報信息用途非常廣泛,篇文章主要給大家介紹了關于java如何根據(jù)IP獲取當前區(qū)域天氣信息的相關資料,需要的朋友可以參考下

大致思路是客戶端發(fā)起請求,我們首先根據(jù)請求獲取到外網(wǎng)IP,然后再根據(jù)外網(wǎng)IP獲取到用戶所在城市,最后根據(jù)城市獲取到天氣信息

獲取外網(wǎng)IP

萬網(wǎng)獲取外網(wǎng)IP地址:www.net.cn/static/cust

/**
 * @Description:獲取客戶端外網(wǎng)ip 此方法要接入互聯(lián)網(wǎng)才行,內(nèi)網(wǎng)不行
 **/
public static String getPublicIp() {
    try {
        String path = "http://www.net.cn/static/customercare/yourip.asp";// 要獲得html頁面內(nèi)容的地址(萬網(wǎng))

        URL url = new URL(path);// 創(chuàng)建url對象

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 打開連接

        conn.setRequestProperty("contentType", "GBK"); // 設置url中文參數(shù)編碼

        conn.setConnectTimeout(5 * 1000);// 請求的時間

        conn.setRequestMethod("GET");// 請求方式

        InputStream inStream = conn.getInputStream();
        // readLesoSysXML(inStream);

        BufferedReader in = new BufferedReader(new InputStreamReader(
                inStream, "GBK"));
        StringBuilder buffer = new StringBuilder();
        String line;
        // 讀取獲取到內(nèi)容的最后一行,寫入
        while ((line = in.readLine()) != null) {
            buffer.append(line);
        }
        List<String> ips = new ArrayList<>();

        //用正則表達式提取String字符串中的IP地址
        String regEx="((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)";
        String str = buffer.toString();
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        while (m.find()) {
            String result = m.group();
            ips.add(result);
        }

        // 返回公網(wǎng)IP值
        return ips.get(0);

    } catch (Exception e) {
        System.out.println("獲取公網(wǎng)IP連接超時");
        return "";
    }
}

根據(jù)外網(wǎng)IP獲取用戶所在城市

首先你待需要一個ip2region.db文件,大家可以百度一下,我在這里整理了一份放在網(wǎng)盤上了,有需要的可以下載一下

下載地址:點擊這里

ip2region準確率99.9%的ip地址定位庫,0.0x毫秒級查詢,數(shù)據(jù)庫文件大小只有1.5M,提供了java,php,c,python,nodejs,golang查詢綁定和Binary,B樹,內(nèi)存三種查詢算法

引入ip2region.db

maven依賴

<!--ip2region-->
<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>ip2region</artifactId>
    <version>1.7.2</version>
</dependency>

創(chuàng)建IPUtils工具類

@Log4j2
public class IPUtils {

    /**
     * 根據(jù)IP獲取地址
     *
     * @return 國家|區(qū)域|省份|城市|ISP
     */
    public static String getAddress(String ip) {
        return getAddress(ip, DbSearcher.BTREE_ALGORITHM);
    }

    /**
     * 根據(jù)IP獲取地址
     *
     * @param ip
     * @param algorithm 查詢算法
     * @return 國家|區(qū)域|省份|城市|ISP
     * @see DbSearcher
     * DbSearcher.BTREE_ALGORITHM; //B-tree
     * DbSearcher.BINARY_ALGORITHM //Binary
     * DbSearcher.MEMORY_ALGORITYM //Memory
     */
    @SneakyThrows
    public static String getAddress(String ip, int algorithm) {
        if (!Util.isIpAddress(ip)) {
            log.error("錯誤格式的ip地址: {}", ip);
            return "";
        }
        String dbPath = IPUtils.class.getResource("/db/ip2region.db").getPath();
        File file = new File(dbPath);
        if (!file.exists()) {
            log.error("地址庫文件不存在");
            return "";
        }
        DbSearcher searcher = new DbSearcher(new DbConfig(), dbPath);
        DataBlock dataBlock;
        switch (algorithm) {
            case DbSearcher.BTREE_ALGORITHM:
                dataBlock = searcher.btreeSearch(ip);
                break;
            case DbSearcher.BINARY_ALGORITHM:
                dataBlock = searcher.binarySearch(ip);
                break;
            case DbSearcher.MEMORY_ALGORITYM:
                dataBlock = searcher.memorySearch(ip);
                break;
            default:
                log.error("未傳入正確的查詢算法");
                return "";
        }
        searcher.close();
        return dataBlock.getRegion();
    }

根據(jù)城市獲取天氣信息

第三方天氣接口:portalweather.comsys.net.cn/weather03/a

調(diào)用第三方天氣接口獲取天氣信息,本文使用java自帶工具類HttpUtils

@GetMapping("/weather")
@DecryptBody(encode = true) //響應加密
public Result getWeather(){
    String publicIp = GetIPUtils.getPublicIp();//獲取外網(wǎng)IP
    if (StringUtils.isBlank(publicIp)) return ResultUtils.error("獲取失敗");
    String cityInfo = IPUtils.getAddress(publicIp);//國家|區(qū)域|省份|城市|ISP
    if (StringUtils.isBlank(cityInfo)) return ResultUtils.error("獲取失敗");
    String[] split = cityInfo.split("\|");
    String city = "";
    for (String aSplit : split) if (aSplit.contains("市")) city = aSplit;//拿取市級名稱
    if (StringUtils.isBlank(city)) return ResultUtils.error("獲取失敗");
    String weatherInformation = HttpUtil.get("http://portalweather.comsys.net.cn/weather03/api/weatherService/getDailyWeather?cityName=" + city);//調(diào)用天氣接口
    if (StringUtils.isBlank(weatherInformation)) return ResultUtils.error("獲取失敗");
    Object o = ObjectMapperUtils.strToObj(weatherInformation,Object.class);
    return ResultUtils.success("獲取成功",o);
}

總結

到此這篇關于java如何根據(jù)IP獲取當前區(qū)域天氣信息的文章就介紹到這了,更多相關java獲取當前區(qū)域天氣信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中使用Java?Mail實現(xiàn)郵件服務功能示例

    Java中使用Java?Mail實現(xiàn)郵件服務功能示例

    這篇文章主要介紹了Java中使用Java?Mail實現(xiàn)郵件服務功能的相關資料,文章還提供了一個發(fā)送郵件的示例代碼,包括創(chuàng)建參數(shù)類、郵件類和執(zhí)行結果,需要的朋友可以參考下
    2025-01-01
  • java GUI編程之監(jiān)聽操作實例分析

    java GUI編程之監(jiān)聽操作實例分析

    這篇文章主要介紹了java GUI編程之監(jiān)聽操作,結合實例形式分析了java GUI編程監(jiān)聽操作的Button監(jiān)聽、TextField文本輸入監(jiān)聽等相關操作技巧與注意事項,需要的朋友可以參考下
    2020-01-01
  • springmvc 獲取@Requestbody轉(zhuǎn)換的異常處理方式

    springmvc 獲取@Requestbody轉(zhuǎn)換的異常處理方式

    這篇文章主要介紹了springmvc 獲取@Requestbody轉(zhuǎn)換的異常處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring Boot多模塊化后,服務間調(diào)用的坑及解決

    Spring Boot多模塊化后,服務間調(diào)用的坑及解決

    這篇文章主要介紹了Spring Boot多模塊化后,服務間調(diào)用的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java中字符串常見的拼接方式小結

    Java中字符串常見的拼接方式小結

    在Java中,字符串拼接是開發(fā)過程中非常常見的操作,根據(jù)不同的需求和性能考慮,有多種方式可以實現(xiàn)字符串的拼接,本文給大家介紹了五種拼接方式,并通過代碼講解的非常詳細,需要的朋友可以參考下
    2024-10-10
  • java類的定義與使用舉例詳解

    java類的定義與使用舉例詳解

    這篇文章主要給大家介紹了關于java類的定義與使用的相關資料,類的方法是用來定義類的行為,在方法中通過操作類的成員變量、編寫業(yè)務邏輯、返回 結果等實現(xiàn)類的業(yè)務行為,需要的朋友可以參考下
    2023-11-11
  • mybatis-plus開啟sql打印的三種方式總結

    mybatis-plus開啟sql打印的三種方式總結

    這篇文章主要給大家介紹了mybatisplus開啟sql打印的三種方式,文章通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的參考價值,需要的朋友可以參考下
    2023-11-11
  • RabbitMQ修改默認密碼的操作步驟

    RabbitMQ修改默認密碼的操作步驟

    這篇文章主要給大家介紹了關于RabbitMQ修改默認密碼的操作步驟,在RabbitMQ中默認用戶guest的密碼是guest,出于安全考慮,最好不要在生產(chǎn)環(huán)境中使用默認用戶和密碼,需要的朋友可以參考下
    2024-11-11
  • SpringBoot Tomcat漏洞修復的解決方法

    SpringBoot Tomcat漏洞修復的解決方法

    本文主要介紹了SpringBoot Tomcat漏洞修復的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • SpringMVC使用@Valid注解實現(xiàn)數(shù)據(jù)驗證的代碼示例

    SpringMVC使用@Valid注解實現(xiàn)數(shù)據(jù)驗證的代碼示例

    在 Web 開發(fā)中,數(shù)據(jù)驗證是一個非常重要的環(huán)節(jié),它可以確保數(shù)據(jù)的合法性和正確性,保護系統(tǒng)不受到惡意攻擊或用戶誤操作的影響,在 SpringMVC 中,我們可以使用 @Valid 注解來實現(xiàn)數(shù)據(jù)驗證,所以本文就給大家介紹具體的使用方法,需要的朋友可以參考下
    2023-07-07

最新評論

察雅县| 禄丰县| 东阿县| 迭部县| 中西区| 司法| 莱芜市| 武定县| 门头沟区| 伊金霍洛旗| 吉水县| 丰都县| 柳州市| 行唐县| 徐水县| 正定县| 阳新县| 抚州市| 平山县| 密山市| 炉霍县| 锡林郭勒盟| 衡山县| 蒙自县| 榆树市| 胶州市| 洱源县| 格尔木市| 青浦区| 镇江市| 开远市| 邛崃市| 星子县| 宁阳县| 玉树县| 垦利县| 隆化县| 庆阳市| 桂平市| 南漳县| 镇赉县|