一 簡單介紹以及apikey擷取
就我個人而言,目前有兩個API是比較不錯的,一個是百度的接口,另一個是圖靈機器人(http://www.tuling123.com/)的接口。前者調用簡單,而且沒有使用次數限制(PS:據說還是有限制?);後者需要進行一系列身份認證,而且每天次數限制是5000(PS:貌似可以免費增加次數),但是它的優勢是可以進行個性化設定,這點比較好。
<a href="http://s3.51cto.com/wyfs02/M00/78/0B/wKiom1Z0uQuAZTVLAACTxl68oz0253.png" target="_blank"></a>
<a href="http://s1.51cto.com/wyfs02/M01/78/0B/wKiom1Z0uTWgn90DAAE-vFOFEUY082.png" target="_blank"></a>
可以看到,請求參數有三個,分别是:key,info,userid,其中key和userid用預設值就可以了。當然最重要的是要在請求的header裡添加上apikey這一項,點選這裡就可以免費擷取了:
<a href="http://s4.51cto.com/wyfs02/M00/78/0B/wKiom1Z0uVnCbYVkAAB6EI65mFQ786.png" target="_blank"></a>
注:要是對Java網絡程式設計不是很熟悉的話,可以參考下方的Demo
二 一個簡單的Demo
通過HttpURLConnection對指定的API發起GET請求,然後對傳回的JSON資料進行簡單的比對,然後擷取我們需要的回答,測試代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<code>package</code> <code>action;</code>
<code>import</code> <code>java.io.BufferedReader;</code>
<code>import</code> <code>java.io.IOException;</code>
<code>import</code> <code>java.io.InputStream;</code>
<code>import</code> <code>java.io.InputStreamReader;</code>
<code>import</code> <code>java.net.HttpURLConnection;</code>
<code>import</code> <code>java.net.MalformedURLException;</code>
<code>import</code> <code>java.net.URL;</code>
<code>import</code> <code>java.util.regex.Matcher;</code>
<code>import</code> <code>java.util.regex.Pattern;</code>
<code>public</code> <code>class</code> <code>TuringRobot {</code>
<code> </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>
<code> </code><code>TuringRobot turing = </code><code>new</code> <code>TuringRobot();</code>
<code> </code><code>String question = </code><code>"北京天氣"</code><code>;</code>
<code> </code>
<code> </code><code>String temp = turing.getResponse(</code><code>"879a6cb3afb84dbf4fc84a1df2ab7319"</code><code>,</code><code>"您自己的apikey"</code><code>, question, </code><code>"eb2edb736"</code><code>);</code>
<code> </code><code>System.out.println(</code><code>"小圖:"</code> <code>+ temp);</code>
<code> </code><code>String temp2 = turing.getResponse(</code><code>"879a6cb3afb84dbf4fc84a1df2ab7319"</code><code>,</code><code>"您自己的apikey"</code><code>, </code><code>"你這麼可愛,一定是個男孩子"</code><code>, </code><code>"eb2edb736"</code><code>);</code>
<code> </code><code>System.out.println(</code><code>"小圖:"</code> <code>+ temp2);</code>
<code> </code><code>}</code>
<code> </code>
<code> </code><code>/**</code>
<code> </code><code>* 使用百度圖靈機器人,擷取回答</code>
<code> </code><code>* </code>
<code> </code><code>* @param key 預設值:879a6cb3afb84dbf4fc84a1df2ab7319</code>
<code> </code><code>* @param ApiKey 在APIStore調用服務所需要的API密鑰,申請位址:http://apistore.baidu.com</code>
<code> </code><code>* @param info 想要請求的問題</code>
<code> </code><code>* @param userid 使用者id 預設值:eb2edb736</code>
<code> </code><code>* @return 擷取的回複</code>
<code> </code><code>* */</code>
<code> </code><code>public</code> <code>String getResponse(String key,String ApiKey,String info,String userid){</code>
<code> </code><code>String httpUrl = </code><code>"http://apis.baidu.com/turing/turing/turing?"</code><code>;</code>
<code>// try {</code>
<code>// info = URLEncoder.encode(info,"UTF-8"); //URL編碼,可以不加</code>
<code>// } catch (UnsupportedEncodingException e1) {</code>
<code>// e1.printStackTrace();</code>
<code>// }</code>
<code> </code><code>String httpArg = </code><code>"key="</code> <code>+ key + </code><code>"&info="</code> <code>+ info + </code><code>"&userid="</code> <code>+ userid;</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>URL url = </code><code>new</code> <code>URL(httpUrl + httpArg);</code>
<code> </code><code>HttpURLConnection connection = (HttpURLConnection) url.openConnection();</code>
<code> </code><code>connection.setRequestMethod(</code><code>"GET"</code><code>);</code>
<code> </code><code>connection.setRequestProperty(</code><code>"apikey"</code><code>, ApiKey);</code>
<code> </code>
<code> </code><code>InputStream inputStream = connection.getInputStream();</code>
<code> </code><code>BufferedReader reader = </code><code>new</code> <code>BufferedReader(</code><code>new</code> <code>InputStreamReader(inputStream,</code><code>"UTF-8"</code><code>));</code>
<code> </code><code>String line = </code><code>""</code><code>;</code>
<code> </code><code>String reg = </code><code>"\"text\":\"(.*)?\",\"code\""</code><code>;</code>
<code> </code><code>Pattern pattern = Pattern.compile(reg);</code>
<code> </code><code>Matcher matcher;</code>
<code> </code><code>while</code><code>((line = reader.readLine()) != </code><code>null</code><code>){</code>
<code> </code><code>matcher = pattern.matcher(line);</code>
<code> </code><code>if</code><code>(matcher.find())</code>
<code> </code><code>return</code> <code>matcher.group(</code><code>1</code><code>);</code>
<code> </code><code>} </code>
<code> </code><code>} </code><code>catch</code> <code>(MalformedURLException e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>} </code><code>catch</code> <code>(IOException e) {</code>
<code> </code><code>}</code>
<code> </code><code>return</code> <code>""</code><code>;</code>
<code>}</code>
三 測試結果:
<a href="http://s1.51cto.com/wyfs02/M02/78/0B/wKiom1Z0uZbD5HcdAAA1Drdl0WA176.png" target="_blank"></a>
本文轉自 pangfc 51CTO部落格,原文連結:http://blog.51cto.com/983836259/1726260,如需轉載請自行聯系原作者