XMLで記述したパラメータを読み込み、トラックバックする例です。
■以下XML <?xml version="1.0" encoding="Shift_JIS" ?> <definition> <data> <ping_url> http://www.myblog.info/oh-my-spa/mt.cgi?s0912j3ka0o3223 </ping_url> <title> 新潟で震度6強3回 3人死亡・4人不明、新幹線脱線 </title> <blog_name> 私のBLOG </blog_name> <url> http://www.asahi.com/national/update/1023/020.html </url> <excerpt> 23日午後5時56分ごろ、新潟県を中心に、北陸から東北、関東にかけての広い範囲で強い地震があり、同県中越地方で震度6強を観測した。その後も震度6強を観測する地震が2回あった。新潟県警によると、死者は3人。十日町市で、建物の下敷きになった34歳の男性が、地震によるショックで65歳の女性が、それぞれ死亡した。小千谷市では55歳の男性が首の骨を折って死亡した。このほか、長岡市で家屋の倒壊で4人が行方不明。同県によると、県内のけが人は約120人で、さらに増える可能性が高い。上越新幹線は浦佐―長岡間で、下り「とき」が脱線した。乗客を乗せた新幹線の脱線は初めて。この事故でのけが人はなかった。総務省消防庁によると、各地で火災が起きたほか、小千谷市で数人が土砂崩れで生き埋めになっているという。ガス漏れや停電も相次いでいる。 気象庁によると、震度6強の地震の震源は、いずれも新潟県中越地方。1度目の地震の震源の深さは約20キロで、規模(マグニチュード)は6.8と推定される。同庁によると、内陸の浅い地下で起きる直下型地震という。震度6強の地震3回の後も、強い余震が続いている。今後1週間以内に震度6規模の余震がなお起きる可能性があるという。 新潟県警によると、十日町市で建物が倒壊し、崩れてきた壁の下敷きになった同市錦町2丁目、金崎昌彦さん(34)が頭を強く打つなどして死亡した。 また、十日町市本町西、蕪木トシエさん(65)が自宅で倒れて死亡していた。心臓に持病があったといい、県警の調べで地震によるショック死とわかった。 また、小千谷市桜町、小川利夫さん(55)が地震で家から飛び出したところ、車庫が崩れ、コンクリートの壁の下敷きになって首の骨を折って死亡した。 このほか、長岡市蓬平町で家屋2棟が倒壊し、住民4人が行方不明になっている。 JR東日本によると、上越新幹線浦佐―長岡間で東京発新潟行き「とき325号」が脱線した。最後尾など2両が斜めに傾いた。乗客を乗せた新幹線の脱線は初めて。約155人の乗客にけが人はなかったという。上越新幹線は全線で送電が止まり、上下線とも運転を見合わせた。 十日町市役所によると、同市内だけで50〜60人のけが人がいる。柏崎市の刈羽郡総合病院によると、ガラスで手を切ったり落ちてきた物にぶつかったりしたけがで数十人が手当てを受けた。小千谷市のJA魚沼病院では、けが人は約30人。長岡市内の立川総合病院ではけが人は約20人、全員軽傷という。 長野県でもけが人が出ており、長野県警によると、同県栄村で、停電で暗くなった自宅玄関で転倒した女性(63)が右腕を骨折した。 新潟県警小千谷署によると、川口町で民家が1棟倒壊したほか、小千谷市浦柄で土砂崩れが発生し、乗用車数台が巻き込まれたという情報がある。数人が生き埋めになっているという。 総務省消防庁に入った連絡によると、長岡市で7件、新潟市で1件火災が発生した。 長岡市内では各所で道路が陥没した。停電で信号が消え、交通事故が多発しているという。栃尾市では石油タンクが2つ横倒しになった。湯之谷村の奥只見ダムでは変電所から火花が発生した。 東北電力によると、午後9時現在、中越地方を中心に約28万戸が停電している。 日本道路公団(JH)北陸支社によると、陥没や地割れなどのため、関越道や磐越道、上信越道、北陸道など新潟県内の全線を一時通行止めにした。 国土交通省や航空各社によると、新潟空港では滑走路に亀裂などは見つからず、発着も正常に行われている。 東京電力広報部によると、地震直後の現地報告では、新潟県内の柏崎刈羽原子力発電所に被害はないという。同発電所5号機直下に設置してある観測機器によると、地震加速度は55.9ガルを観測した。 最初の地震で、震度5弱以上が観測されたのは以下の通り。震度6強―新潟県中越。震度5強―上越。震度5弱―福島県会津、群馬県北部・南部、埼玉県北部、新潟県下越、長野県北部など。 </excerpt> </data> </definition> ■以下ソース import java.io.*; import java.util.*; import java.net.*; import javax.xml.parsers.*; import org.w3c.dom.*; import org.w3c.dom.traversal.*; import org.apache.xpath.*; class TrackBackPing { /* $Id: url-ping.html,v 1.1 2009/06/22 16:12:32 kishi Exp kishi $ */ /* Description: TRACKBACKのテストです */ static HashMap hm = new HashMap(); public static void main( String[] args ) { try { // XMLで記述されたパラメータを読み込む readParam( "TrackBackPing.xml", "//data/*" ); // PING先のURLを指定 URL ping_url = new URL( (String)hm.get("ping_url") ); // 送信電文の作成 String title = (String)hm.get("title"); String blog_name = (String)hm.get("blog_name"); String url = (String)hm.get("url"); String excerpt = (String)hm.get("excerpt"); StringBuffer poststr = new StringBuffer(); poststr.append( "title=" + URLEncoder.encode( title, "UTF8" ) ); poststr.append( "&blog_name=" + URLEncoder.encode( blog_name, "UTF8" ) ); poststr.append( "&url=" + URLEncoder.encode( url, "UTF8" ) ); poststr.append( "&excerpt=" + URLEncoder.encode( excerpt, "UTF8" ) ); // URLにアクセス URLConnection conn = ping_url.openConnection(); conn.setDoOutput( true ); // HTTPヘッダにUSER-AGENTを追加 -- 偽る(^^) conn.setRequestProperty( "HTTP_USER_AGENT", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)" ); PrintStream ps = new PrintStream( conn.getOutputStream() ); ps.print( poststr ); ps.close(); BufferedReader reader = new BufferedReader( new InputStreamReader( conn.getInputStream() ) ); // 返信電文を読む System.out.println("--- RESPONSE ---"); String line; while ( ( line = reader.readLine() ) != null ) { System.out.println( line ); } reader.close(); } catch ( Exception ex ) { System.out.println( ex.toString() ); } } static void readParam( String xmlFile, String path ) { try { // DOMパーサ用ファクトリの生成 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware( true ); // 名前空間を認識する factory.setNamespaceAware( true ); // DOM Documentインスタンス用ファクトリの生成 DocumentBuilder builder = factory.newDocumentBuilder(); // 解析とDocumentインスタンスの取得 Document doc = builder.parse( xmlFile ); // NodeIteratorの取得 NodeIterator nl = XPathAPI.selectNodeIterator( doc, path ); int count = 0; Node n; while ( ( n = nl.nextNode() ) != null ) { System.out.print( "nodeName = " + n.getNodeName() + "\t" ); System.out.println( "nodeValue = [" + ( n.getFirstChild().getNodeValue() ).trim() + "]" ); hm.put( n.getNodeName() , ( n.getFirstChild().getNodeValue() ).trim() ); count++; } System.out.println( "counts: " + count ); } catch ( Exception e ) { e.printStackTrace(); } } }戻る