前回jsoupでxmlを読み取る方法について紹介した。その際、Yahoo!ニュースの記事のURLはリダイレクトするものになっており、いきなりJsoup.connectメソッドを使ってもうまくいかないと指摘した。では、jsoupではどうやってリダイレクトすれば良いだろうか。

以下のように、Jsoup.connectでリダイレクトするURLを文字列urlとして渡してやるところまでは同じだが、そこから更にfollowRedirectsを呼び出し、引数にtrueを渡してやる。これによってリダイレクトの許可を与える事になる。そして、最後に呼び出すのがexecute()で、その戻り値はResponseインスタンスとなる。

このResponseにはHTTPレスポンスの情報が入っており、response.headers()と呼び出せば、レスポンスヘッダ情報がMap<String,String>で返ってくる。ヘッダ値を取得したいヘッダ名が分かっている場合は、response.header(String name)でヘッダ値を取得できる。

リダイレクト先のURLを取る前に、statudCode()メソッドでステータスコードを確認するのが無難だろう。ステータスコードが200である場合、urlI()メソッドでリダイレクト先URLをURLインスタンスの形で取得できる。

これを再びJsoup.connect…と前回までの例と同じようにしてDocumentを取得すれば良い。

では、次回から記事の内容を読み取っていこう。