【Android】定期的にサイト情報を取得3
~サイトにGETリクエスト~
前回の続きです。
「GET」をプログラミングしていきます。
まず、「GET」を実現するために、「HttpURLConnection」を使用します。
「MainActivity」の「onCreate」に以下のように記述してみます。
// URLの設定
val url = URL(“https://サイトURL”)
val connection = url.openConnection() as HttpURLConnection
// レスポンスを取得
val responseStream = InputStreamReader(connection.inputStream)
val br = BufferedReader(responseStream)
val sb = StringBuilder()
for(line in br.readLines()){ // すべてをまとめる
sb.append(line)
}
val body = sb.toString()
val url = URL(“https://サイトURL”)
val connection = url.openConnection() as HttpURLConnection
// レスポンスを取得
val responseStream = InputStreamReader(connection.inputStream)
val br = BufferedReader(responseStream)
val sb = StringBuilder()
for(line in br.readLines()){ // すべてをまとめる
sb.append(line)
}
val body = sb.toString()
上記ソースを実行すると、エラー「NetworkOnMainThreadException」が発生しました。。
どうやら、HTTP通信は非同期処理をしなければいけないとのこと。
そこで、定期的に実行する実装も兼ねて、Timerを使いたいと思います。
以下のようにソースを修正します。
Timer().scheduleAtFixedRate( object : TimerTask() {
override fun run() {
// URLの設定
val url = URL(“https://サイトURL”)
val connection = url.openConnection() as HttpURLConnection
// レスポンスを取得
val responseStream = InputStreamReader(connection.inputStream)
val br = BufferedReader(responseStream)
val sb = StringBuilder()
for(line in br.readLines()){ // すべてをまとめる
sb.append(line)
}
val body = sb.toString()
}
}, 0, 60000)//1分に1回起動させる
override fun run() {
// URLの設定
val url = URL(“https://サイトURL”)
val connection = url.openConnection() as HttpURLConnection
// レスポンスを取得
val responseStream = InputStreamReader(connection.inputStream)
val br = BufferedReader(responseStream)
val sb = StringBuilder()
for(line in br.readLines()){ // すべてをまとめる
sb.append(line)
}
val body = sb.toString()
}
}, 0, 60000)//1分に1回起動させる
そうするとエラー「Permission denied (missing INTERNET permission?)」が発生します。
これは権限の問題なので、以下の文言を「AndroidMainfest.xml」に追加しましょう。
<uses-permission android:name=”android.permission.INTERNET”>
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”>
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”>
以下のような感じになります。

もう一度実行してみましょう。
そうすると、body(sb.toString())の中に前回取得したようなHTMLが入っているはずです。

これで、HTMLを取得するところまでプログラムで記述できました。
「正規表現」までプログラミングしたかったですが、次回に持ち越します。