Yahoo! JAPAN ブックマークからブックマーク数を取得する
Yahoo! JAPAN は Yahoo!ブックマークに関する明確な API を公開していない.
一方,以下のサイトにヒントが示されていたから,これを実装した.
http://blog.katsuma.tv/2008/03/yahoo_bookmark_api.html
// Yahoo! JAPAN は明確な API を公開していない. // 一方,以下のサイトにヒントが示されており,これを実装する. // http://blog.katsuma.tv/2008/03/yahoo_bookmark_api.html // // [改訂履歴] // 16-Sep-2009 : とりあえず動くバージョンを作った.しかし,仕事の割に重たいコード. // // [環境] Xerces 1.4.4 を利用 import org.apache.xerces.parsers.DOMParser; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Attr; import org.apache.xerces.dom.DeepNodeListImpl; import java.io.*; import java.net.*; import java.util.*; public class YahooBookmarkCount { int count; //ブックマーク数 public YahooBookmarkCount(){ ; // NOP } public int getCount(String query){ // query を URLエンコードする String encodedQuery = ""; try { encodedQuery = URLEncoder.encode(query, "UTF-8"); } catch(UnsupportedEncodingException e){ System.err.println("UnsupportedEncodingException : " + e); return -1; } // GETリクエストの URL を生成 String requestURL; requestURL = "http://num.bookmarks.yahoo.co.jp/yjnostb.php"; requestURL = requestURL + "?urls=" + encodedQuery; try{ // DOMパーサーインスタンスを生成 DOMParser parser = new DOMParser(); //System.out.println(requestURL); //デバッグ用 // 引数でXMLファイルまたは URL を指定し、Parseメソッドで // 妥当性を検証 parser.parse(requestURL); // getDocumentメソッドでドキュメントオブジェクトを生成 Document xdoc = (Document)parser.getDocument(); // ルート・エレメント(ルートノード)の取得 Element root = xdoc.getDocumentElement(); // ブックマーク数を取得 NodeList nl; nl = root.getElementsByTagName("SAVE_COUNT"); Element e = (Element)nl.item(0); if(e.hasAttribute("ct") == true){ String s = e.getAttribute("ct"); count = Integer.parseInt(s); } else { System.err.println("Hmm, wrong XML document"); System.exit(1); } // パーサのリセット parser.reset(); } catch(Exception e){ System.err.println(e + ":例外発生"); return -1; } return count; } // 動作確認用の main メソッド public static void main(String[] args){ String query = "http://www.yahoo.co.jp/"; YahooBookmarkCount yb = new YahooBookmarkCount(); int ret = yb.getCount(query); System.out.println("Number of Bookmarks : " + ret); } }