ggrksしてもトップに出てこなかったのでここに残す。
JavaとXMLについて(SAXとかDOMとか)はメンドクサイのでまとめたのを貼っとく。
http://www.evernote.com/shard/s22/sh/90411537-4697-4a68-98b0-e8631fc10a92/d2a48e34b43db9479751833209ad0150
○仕様
1.JavaでURL接続でXML形式のデータを取得する
2.1で取得したXMLをparseして出力する
で、実装したソース
import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.ProtocolException; import java.net.URL; import java.nio.charset.MalformedInputException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; /** * @author akira1908jp * */ public class Hogehoge { /** * @param args */ public static void main(String[] args) throws MalformedInputException, ProtocolException, IOException { URL url = new URL("http://tenki.wet.co.jp/forecast/day01tky.rdf"); HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); urlConn.setRequestMethod("GET"); urlConn.setInstanceFollowRedirects(false); urlConn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3"); urlConn.connect(); Document doc = null; try { doc = getDocumet(urlConn.getInputStream()); } catch (SAXException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } // ルートの要素名になっている子ノードを取得する Element root = doc.getDocumentElement(); System.out.println("ルート要素名:" + root.getTagName()); // 各ノードリストを取得 NodeList nodeList = root.getElementsByTagName("channel"); System.out.println("ノードリストの数は:" + nodeList.getLength()); for (int i = 0; i < nodeList.getLength(); i++) { Element element = (Element)nodeList.item(i); // System.out.println(getChildren(element, "title")); System.out.println(getChildren(element, "description")); System.out.println(getChildren(element, "pubDate")); // 各ノードリストを取得 NodeList list = element.getElementsByTagName("item"); System.out.println("リストの数は:" + nodeList.getLength()); for (int j = 0; j< list.getLength(); j++) { Element element2 = (Element)list.item(j); System.out.println(getChildren(element2, "title")); System.out.println("Link:" + getChildren(element2, "link")); System.out.println("description:" + getChildren(element2, "description")); System.out.println(getChildren(element2, "pubDate")); } } urlConn.disconnect(); } private static Document getDocumet(InputStream is) throws SAXException, IOException, ParserConfigurationException { DocumentBuilder docbuilder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); return docbuilder.parse(is); } /** * 指定されたエレメントから子要素の内容を取得。 * * @param element 指定エレメント * @param tagName 指定タグ名 * @return 取得した内容 */ public static String getChildren(Element element, String tagName) { NodeList list = element.getElementsByTagName(tagName); Element cElement = (Element)list.item(0); return cElement.getFirstChild().getNodeValue(); } }
で実行して、出力すると↓な感じ
ルート要素名:rss ノードリストの数は:1 天気 -東京都- ウェザーテック 11日17時発表 東京地方 今夜〔雨〕 明日〔曇 のち 雨〕 明後日〔曇 一時 雨〕 ウェザーテック Wed, 11 May 2011 17:31:49 +0900 リストの数は:1 11日17時発表 東京地方 今夜〔雨〕 明日〔曇 のち 雨〕 明後日〔曇 一時 雨〕 ウェザーテック Link:http://tenki.wet.co.jp/forecast/day01tky.htm#area1 description:11日17時発表 東京地方 今夜〔雨〕 明日〔曇 のち 雨〕 明後日〔曇 一時 雨〕 ウェザーテック Wed, 11 May 2011 17:31:49 +0900 [ CM ] ホームページに天気予報をのせるなら、ここを見てください。 Link:http://wicon.wet.co.jp/?day01rss31 description:[ CM ] ホームページに天気予報をのせるなら、ここを見てください。 Wed, 11 May 2011 17:31:49 +0900 11日17時発表 伊豆諸島北部 今夜〔雨〕 明日〔雨〕 明後日〔晴 一時 雨〕 ウェザーテック Link:http://tenki.wet.co.jp/forecast/day01tky.htm#area2 description:11日17時発表 伊豆諸島北部 今夜〔雨〕 明日〔雨〕 明後日〔晴 一時 雨〕 ウェザーテック Wed, 11 May 2011 17:31:49 +0900
ついでにAtndもやってみた。
import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.ProtocolException; import java.net.URL; import java.nio.charset.MalformedInputException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; /** * @author akira1908jp * */ public class AtndRSS { /** * @param args */ public static void main(String[] args) throws MalformedInputException, ProtocolException, IOException { URL url = new URL("http://atnd.org/events.rss"); HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); urlConn.setRequestMethod("GET"); urlConn.setInstanceFollowRedirects(false); urlConn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3"); urlConn.connect(); Document doc = null; try { doc = getDocumet(urlConn.getInputStream()); } catch (SAXException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } // ルートの要素名になっている子ノードを取得する Element root = doc.getDocumentElement(); System.out.println("ルート要素名:" + root.getTagName()); // 各ノードリストを取得 NodeList nodeList = root.getElementsByTagName("channel"); System.out.println("ノードリストの数は:" + nodeList.getLength()); for (int i = 0; i < nodeList.getLength(); i++) { Element element1 = (Element)nodeList.item(i); // System.out.println(getChildren(element1, "title")); System.out.println(getChildren(element1, "description")); System.out.println(getChildren(element1, "pubDate")); // 各ノードリストを取得 NodeList list = element1.getElementsByTagName("item"); System.out.println("リストの数は:" + nodeList.getLength()); for (int j = 0; j< list.getLength(); j++) { Element element2 = (Element)list.item(j); System.out.println(getChildren(element2, "title")); System.out.println("author:" + getChildren(element2, "author")); System.out.println("Link:" + getChildren(element2, "link")); System.out.println("description:" + getChildren(element2, "description")); System.out.println(getChildren(element2, "pubDate")); } } urlConn.disconnect(); } private static Document getDocumet(InputStream is) throws SAXException, IOException, ParserConfigurationException { DocumentBuilder docbuilder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); return docbuilder.parse(is); } /** * 指定されたエレメントから子要素の内容を取得。 * * @param element 指定エレメント * @param tagName 指定タグ名 * @return 取得した内容 */ public static String getChildren(Element element, String tagName) { NodeList list = element.getElementsByTagName(tagName); Element cElement = (Element)list.item(0); return cElement.getFirstChild().getNodeValue(); } }
イベント詳細のdescriptionが取得出来なかった。
分かる人がいたら、是非教えてください。
勢いでやっただけなので、もっと上手いやり方があったら教えてください。