Java培訓Day02——製作疫情地圖(一)

一、前言

此次培訓,是為期三天的網上培訓。最終的目的是製作出疫情地圖。首先我們來看看主要的講課內容大綱。

  Day1

    |-Java語法學習(個人感覺講得還可以,主要圍繞本次培訓作出的講解,沒有像網上的基礎課程那樣,長篇大論,有基礎的童鞋可以看看複習一下的)

    |-遊戲化記憶體分析(印象中是拿了植物大戰殭屍這個單機遊戲來講解的,通過抓包的形式,給我們介紹了太陽【這個遊戲的遊戲金幣】在程式開發中就是一個變數)

    |-製作自動關機程式

  Day2

    |-IDEA的使用(竟然在培訓班中獎了,今天就來個IDEA寫程式)

    |-網路資源定位詳解

    |-疫情數據分析讀取

    |-對話圖靈機器人

    |-手機簡訊發送

  Day3

    |-疫情地圖展示

    |-阿里雲伺服器搭建

    |-微信公眾號入口

 

二、IDEA的使用

    1、首先,我們到IDEA官網註冊帳號,然後下載我們的IDEA。這步我們跳過吧,官網雖然英文居多,但是我們可以用Google瀏覽器的自帶翻譯功能輔助,也相信各位童鞋能下載下來。

    2、我們的安裝包下載後,也是傻瓜式安裝,基本就是先選路徑,然後選運行的JDK位數(我們1.7以後好像都是64位了,所以選擇64位),然後選安裝的插件,完成後,差不多就是登陸激活的帳號密碼(帳號密碼誰都可以註冊,重要的是我們要有激活碼激活的帳號)

    3、安裝好後,我們就先來寫個HelloWorld(這裡說一下IDEA和VScode的一個特點:前一次關閉軟體的介面,這一次打開會顯示那個介面)

      |-我們選擇:File→New→Project

 

 

     |-新建空項目

 

 

     |-下一步,然後點finish(完成)

 

 

     |-這個新版本,會在點擊完成項目後,提示你是在當前項目同一窗口展示,還是新窗口展示,我們這裡試試點New Window

 

 

 

 

 

     |-點擊New Window後會新建一個新窗口和一個新的彈窗Modules,我們點擊Modules選項上的「+」,然後點擊New Module,會有一個新彈窗

 

    |-IDEA真的越來越完善,這一步以前的要手動選JDK的安裝路徑,我們這裡新版本,只要打開後,點擊JAVA,點擊Module SDK的下拉框,會提示你之前在環境變數配好的Java1.8的

 

 

 

 

     |-選擇好JDK後,我們點下面Next,到這一步,我們修改一下Module Name,然後點Finish就完成配置了

 

 

     |-然後上一個彈窗,就出現了配置好的一些數據,我們直接點下面的OK就可以了

 

    |-到上面為止,我們只創建了項目的工程文件,class還沒創建的

 

 

     |-接著我們要去新建一個類,在我們eclipse新建類的時候,我們有新建包這個操作,而在我們IDEA中,這一操作我們分開來,先新建包,然後新建類

 

 

     |-這裡,我們新建好類後,我們寫個HelloWorld來學習一下

 

 

     |-好的,沒有問題,接下來,我們看看我們的class文件現在保存到哪裡了,我們可以看一下Hello頭頂上的E盤路徑

 

 

     |-又是新版本更新的功能,我們直接點開上面鏈接,會有一個彈窗,我們直接點到我們包創建的最後

 

 

 

 

 

     |-好了,我們目前為止,基本的IDEA的基本操作就完成了,下面我們回顧一下上述操作

①創建一個空項目(sendmessage)
②創建一個新模組(sendmessage)
③在sendmessage模組下的Src下創建一個包(com.baidu.CionDa.SendMessage)
④在com.baidu.CionDa.SendMessage包下新建一個類(SendMessage)
⑤在SendMessage類中寫程式碼
⑥在idea中執行程式

    |-然後我們看看IDEA中項目結構:

    項目project ->模組 ->包 ->java文件

    |-接著我們了解一下基本的IDEA操作

      |-眼神不好,修改字體:File -> Setting ->Font ->Size(修改16-20基本OK)

 

 

 

 

 

       |-IDEA中的快捷鍵

        |-psvm回車產生public static void main(String[] args){}方法

 

        |-sout回車產生System.out.println();

 

        |-Ctrl+Alt+Space(空格鍵)我們可以通過這個快捷鍵實現:內容提示,程式碼補全等

        |-注釋:

          單行:選中程式碼,Ctrl+/,再來一次就是取消單行注釋

          多行:選中程式碼,Ctrl+Shift+/,再來一次就是取消多行注釋

        |-格式化:Ctrl+Alt+L

        |-IDEA中模組操作

          新建模組(首先,我們的新建模組在前面內容已經涉及到,我們這裡跳過)

          刪除模組(模組只在IDEA刪除,在原先的保存路徑並沒有刪除,若要徹底刪除,需要自行前往保存路徑刪除)

          導入模組

刪除模組:

 

 

 導入模組

 

 

 

 

 

 

 

 

三、網路資源定位詳解

  網路資源又叫URL(統一資源定位符Uniform Resource Locator),通俗地講就是我們的網址

  在萬維網上(world wide web) 每一個資訊和資源都有統一且唯一的地址

  |-網址的組成部分:

通訊協議://域名:埠號/虛擬路徑?參數列表#錨點

  |-通訊協議:

傳輸速率控制(通訊過程中,端與端的傳輸速度);

傳輸編碼控制(通訊過程中,端與端的交流要讀得懂,若我講日語,你聽不懂,那就沒辦法交流下去了);

出錯控制(通訊過程中,端與端之間要是因為網路,人為等原因會中斷通訊)等

  |-域名:ip地址的別名

  ip地址:是電腦在互聯網中的唯一表示 (公網ip)

  |-埠號:

範圍:0-65535之間

http協議訪問時,可以忽略埠號,自動尋找80

https協議訪問時,可以忽略埠號,自動尋找443

  |-參數列表(重要):

訪問網路時,給伺服器發送的參數內容.

參數列表由多個參數組成, 參數與參數之間使用&連接

每一個參數又由參數名稱和參數內容組成, 名稱與內容之間使用=號連接

對下面URL(網址進行解釋)

//www.cnblogs.com/raoqinglong/p/13056439.html

該網址傳輸協議是https協議,訪問時會自動定址443,域名為www.cnblogs.com,虛擬路徑raoqinglong/p/13056439

很多人就問:為什麼上面的沒有參數內容?因為我們要向伺服器發送參數才需要的。像上面的URL一樣,我們只是去讀取,去調用而言,沒有要上傳的意思

//account.cnblogs.com/signup?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F

而這個網址是同一個網址的,我們部落格園的註冊地址,這個?後面的就是我們的參數,參數名是returnUrl,參數內容就是https%3A%2F%2Fwww.cnblogs.com%2F

我們可能看不懂這個參數內容,沒關係,我們去解析一下,百度搜索UTF-8在線轉換,你就會得到解析上面https%3A%2F%2Fwww.cnblogs.com%2F這個網址就是//www.cnblogs.com/

  |-錨點:

一般在一些購物網站,篇幅比較長,還有模組化的頁面用到,用於快速跳轉到同一頁面的不同標題/模組下。例如我的博文在電腦上看

 

 

 但是很可惜,不太完善,不會跳標題,有點小尷尬。然後,對於URL的解釋分析,就到這裡了

四、疫情數據分析讀取

在讀取疫情數據前,我們先去學習一下JAVA是怎樣讀取URL的

下面有要標準的使用流程

標準使用流程:
//1. 創建一個URL類的對象url
URL url = new URL("網址");
//2. 通過URL類的對象url打開網路連接 , 並得到連接對象conn
URLConnection conn = url.openConnection();
//3. 通過連接對象 , 得到用於讀取網頁內容的輸入流 is
InputStream is = conn.getInputStream();
//4. 將上述的位元組流is 裝飾為字元流 , 將字元流再裝飾為一次能讀取一行的字元流br
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//若我們的讀取字元亂碼,我們可以把4換成下面這一句
BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
//5. 通過字元流br,讀取一行內容,並將內容存儲到變數text中
String text = br.readLine();
//6. 可以將讀取到的內容text 輸出顯示到控制台
System.out.println(text);

 編寫完上面程式碼,通常數據類型的位置會出現紅線 (需要導包) 解決方案:滑鼠懸停在紅線位置,點擊要導入的包即可。

本節任務需要導入的包:

1. java.io.xxx

2. java.net.xxx

3. java.util.xxx

導完包後,還會出現紅線,我們需要拋出異常

我們來一個讀取百度首頁的程式碼:

package com.baidu.cionda.readbaidu;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public  class ReadBaidu {
    public static void main(String[] args) throws IOException {
        //1. 創建一個URL類的對象url
        URL url = new URL("//www.baidu.com");
        //2. 通過URL類的對象url打開網路連接 , 並得到連接對象conn
        URLConnection conn = url.openConnection();
        //3. 通過連接對象 , 得到用於讀取網頁內容的輸入流 is
        InputStream is = conn.getInputStream();
        //4. 將上述的位元組流is 裝飾為字元流 , 將字元流再裝飾為一次能讀取一行的字元流br
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        //若我們的讀取字元亂碼,我們可以把4換成下面這一句
        //BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
        //5. 通過字元流br,讀取一行內容,並將內容存儲到變數text中
        //我們這裡來讀取四行看看
        String text1 = br.readLine();
        String text2 = br.readLine();
        String text3 = br.readLine();
        String text4 = br.readLine();
        //6. 可以將讀取到的內容text 輸出顯示到控制台
        System.out.println(text1);
        System.out.println(text2);
        System.out.println(text3);
        System.out.println(text4);
    }
}

 /*                   |-注釋:

                  單行:選中程式碼,Ctrl+/,再來一次就是取消單行注釋

                  多行:選中程式碼,Ctrl+Shift+/,再來一次就是取消多行注釋

                |-格式化:Ctrl+Alt+L
                     |-拋出異常:Alt+Shift+Enter
                |-IDEA中模組操作

                  新建模組(首先,我們的新建模組在前面內容已經涉及到,我們這裡跳過)

                  刪除模組(模組只在IDEA刪除,在原先的保存路徑並沒有刪除,若要徹底刪除,需要自行前往保存路徑刪除)

                  導入模組*/

 

 

在IDEA我們居然沒亂碼,要是我們移植到Eclipse就不一樣了,上才藝:

 

 

 

 為什麼會這樣呢,就是我們上面提到的UTF-8,我們不同公司的開發項目和使用編碼不同,但是UTF-8是我們通用的國際編碼,裡面包含了中文和英文等國際語言,我們也可以通過上面UTF-8轉換網站,轉換「更多產品」的亂碼看看

 

 

 

 我們把上面的百度地址換成我們的//zaixianke.com/yq/all,在這個網址我們可以獲取疫情的實時數據

五、對話圖靈機器人

原理跟我們獲取疫情數據很相似

首先我們要拿到智慧機器人API

伺服器地址: //api.jisuapi.com/iqa/query

參數列表 appkey:秘鑰,值為:62958a3a6ef3c56d

question:與智慧機器人的聊天內容 ,例如:北京天氣

使用方式:

 

 那在我們的程式碼怎麼玩呢?上才藝

 

 

package com.CionDa.readbaidu;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class ReadBaidu {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        //定義appkey變數
        String appkey = "62958a3a6ef3c56d";
        //我們的編譯器是Eclipse的話,不能直接發中文,所以要轉UTF-8
        String para = URLEncoder.encode("講個笑話","UTF-8");
        //1. 創建一個URL類的對象url
        URL url = new URL("//api.jisuapi.com/iqa/query?appkey="+appkey+"&question="+para);
        //2. 通過URL類的對象url打開網路連接 , 並得到連接對象conn
        URLConnection conn = url.openConnection();
        //3. 通過連接對象 , 得到用於讀取網頁內容的輸入流 is
        InputStream is = conn.getInputStream();
        //4. 將上述的位元組流is 裝飾為字元流 , 將字元流再裝飾為一次能讀取一行的字元流br
        //BufferedReader br = new BufferedReader(new InputStreamReader(is));
        //若我們的讀取字元亂碼,我們可以把4換成下面這一句
        BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
        //5. 通過字元流br,讀取一行內容,並將內容存儲到變數text中
        //我們這裡來讀取四行看看
        String text1 = br.readLine();
        
        //6. 可以將讀取到的內容text 輸出顯示到控制台
        System.out.println(text1);
        
    }

}
            

    |-亂碼處理 :讀取伺服器數據亂碼處理

電腦存儲的都是數字
編碼表:ASCII
65:A
66:B
67:C
97:a
簡體中文國標系列編碼:
GBK GB2312 GB18030
UTF-8 unicode
處理的程式碼如下:
//在is裝飾為字元流時,指定字符集UTF-8
BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));

參數亂碼的處理

將發送給伺服器的中文進行URL編碼即可
URL編碼: 將中文轉換為%+英文字母+阿拉伯數字
String para = URLEncoder.encode("中文文字","UTF-8");

六、手機簡訊發送

簡訊API 簡訊API伺服器地址: //api.jisuapi.com/sms/send

參數列表

appkey:秘鑰,值為:62958a3a6ef3c56d

mobile:接收驗證碼的手機號

content:簡訊內容,必須使用提供的模板,模板中能修改的只有六位驗證碼,模板如下:

恭喜你,作業已完成!驗證碼是:666666。如非本人操作,請忽略本簡訊!【開課吧新職課】

具體使用與上面控制圖靈機器人類似,我們來直接上程式碼

package com.CionDa.sendmessage;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Scanner;

public class SendMessage {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        
        int identifyingcode = (int) ((Math.random()*9+1)*100000);
        String para = URLEncoder.encode("恭喜你,作業已完成!驗證碼是:"+identifyingcode+"。如非本人操作,請忽略本簡訊!【開課吧新職課】","UTF-8");
        String appkey ="62958a3a6ef3c56d";
        System.out.println("請輸入手機號:");
        Scanner input = new Scanner(System.in);
        String moblie = input.nextLine();
        //1. 創建一個URL類的對象url
        URL url = new URL("//api.jisuapi.com/sms/send?appkey="+appkey+"&mobile="+moblie+"&content="+para);
        //2. 通過URL類的對象url打開網路連接 , 並得到連接對象conn
        URLConnection conn = url.openConnection();
        //3. 通過連接對象 , 得到用於讀取網頁內容的輸入流 is
        InputStream is = conn.getInputStream();
        //4. 將上述的位元組流is 裝飾為字元流 , 將字元流再裝飾為一次能讀取一行的字元流br
        BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
        //5. 通過字元流br,讀取一行內容,並將內容存儲到變數text中
        String text = br.readLine();
        //6. 可以將讀取到的內容text 輸出顯示到控制台
        System.out.println(text);


    }

}

 

Tags: