起初

最近搞那个qq机器人,然后我的大部分功能都是调用API,所以也来 写一下,我是这么用这个的。

一开始,我是用的最原始的方法,这个方法就是java基础里面的IO流和网络
一开始写的比这个还要糟糕一些
这个就是抽出来的一个工具类,这就传入url,就可以获取一个jsonObject对象。

public JSONObject connectMethod(String url){
        String resultStr = "";
        BufferedReader in = null;
        try {
            URL rea = new URL(url);//封装为URL类
            HttpURLConnection connection = (HttpURLConnection) rea.openConnection();
            connection.setRequestMethod("GET");//设置请求属性
            //设置通用请求方式(模拟window浏览器访问,直接复制,不需要改)
            connection.setRequestProperty("Charset","UTF-8");
            connection.setRequestProperty("accept","*/*");
            connection.setRequestProperty("connection","Keep_Alive");
            connection.setRequestProperty("user-agent",
                    "Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1)");
            connection.connect();//建立实际的连接
            Map<String, List<String>> map = connection.getHeaderFields();
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream(),"UTF-8"
            ));
            String line;
            while ((line = in.readLine())!=null){
                resultStr += line;
            }
            JSONObject parseObject = JSON.parseObject(resultStr);
            return parseObject;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

OKHttp

起初,我一直都是用上面那个工具类,不过过了一段,时间,我发现群友使用的不是这种方式,而是另一种更加简单、高效的方法,也就是这个OKHttp。

也就是okhttp,然后我迫不及待的找到官网,(果然很简单)。
需要导入相关的依赖 https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp/4.6.0
这样也是搞成一个工具类来使用,十分的方便

OkHttpClient client = new OkHttpClient();

public String run(String url) throws IOException {
  Request request = new Request.Builder()
      .url(url)
      .build();

  try (Response response = client.newCall(request).execute()) {
    return response.body().string();
  }
}

FastJSON的使用。

但是这个时候的问题就是,如何来使用这些JSON,
这里就要使用阿里巴巴的fastJson了,不得不说,阿里巴巴是真的强啊。

对于JSON来说,一共有三个东西, 对象,数组,字符串

public class OkHttpTest {
    public static void main(String[] args) throws IOException {
        OkHttpAPI okHttp = new OkHttpAPI();  //上面的工具类
        String connection = okHttp.connection("https://s.nmsl8.club/getloveword?type=4");
        JSONObject jsonObject = JSONObject.parseObject(connection);  //转化成JSON对象。
        System.out.println(jsonObject.getString("content")); //根据关键字来拿到值。

    }
}

一般常用的就是这三个方法。
数组 public JSONArray getJSONArray(String key)
字符串 public String getString(String key)
对象 public JSONObject getJSONObject(String key)

当然还有一个通用的get(),不过要强制类型转换才行

java爬虫(Jsoup)

一开始以为是什么很高深莫测的东西,结果一看其实也没有那么难,也许生活也是如此吧。。。

1、首先是导入依赖,maven就可以找到, Jsoup

参数一共有三个,第一个需要抓取的URL,第二个你要选择的元素(使用CSS选择器),第三个你要属性还是文本
这里就是一个抓取百度百科的一个实例,一句代码就可以写完,

String str =  Jsoup.Jsoup.parse(new URL("https://baike.baidu.com/item/" + name),180000).select("meta[name=description]").get(0).attr("content");

当然分开写,我觉得更好理解一点

URL url = new URL("https://baike.baidu.com/item/" + name); //你要搞的URL
Document document = Jsoup.parse(url, 18000);  //获取文档对象
Element element = document.select("meta[name=description]").get(0);  //具体获取的哪个元素
String str = element.attr("content");  //最终拿到了要的属性

一个好奇的人