トップ100はクライアントによって異なるらしい。
とりあえずトップ100の ASIN を集めるテストプログラムを作成。
注:本当にとりあえずテストプログラムなので問題があっても関知しませんのでご注意を。
/** * @param type 和書なら 497532 、とかのコード。 */ public static void normalRank( String type ) { try { // URL を生成します。 StringBuffer strbufUrl = new StringBuffer(); strbufUrl.append( "http://www.amazon.co.jp/exec/obidos/tg/browse/-/" ); strbufUrl.append( type ); strbufUrl.append( "/" ); // strbufUrl.append( "http://www.amazon.co.jp/exec/obidos/tg/browse/-/497532/249-7353691-7757940" ); // http を叩きます。 URL url = new URL( strbufUrl.toString() ); HttpURLConnection httpURLConnection; httpURLConnection = (HttpURLConnection)url.openConnection(); httpURLConnection.setRequestMethod( "GET" ); // 叩いたのを取得します。 // UTF-8 の XML として返ってきます。 InputStreamReader inputStreamReader = new InputStreamReader( httpURLConnection.getInputStream(), "Shift_JIS" ); BufferedReader bufferedReader = new BufferedReader( inputStreamReader ); // とりあえず出力。実際には XML としてパーシングして欲しい情報を取得することになるかと。 StringBuffer strbuf = new StringBuffer(); while( true ) { String oneLine = bufferedReader.readLine(); if( oneLine == null ) { break; } System.out.println( oneLine ); strbuf.append( oneLine ); } // Shift_JIS // ASINを探します。 String regex = "/exec/obidos/ASIN/([0-9A-Z]+)"; // 正規表現クラスPatternとMatcherを使用して検索します。 Matcher matcher = Pattern.compile( regex ).matcher( strbuf.toString() ); ArrayList arylst = new ArrayList(); // 分割して出力してみます。 while( matcher.find() ) { // ()で囲まれた正規表現にヒットした文字列を出力します。 System.out.println( "asin:" + strbuf.toString().substring( matcher.start( 1 ), matcher.end( 1 ) ) ); String asin = strbuf.toString().substring( matcher.start( 1 ), matcher.end( 1 ) ); if ( ( arylst.size() == 0 ) || ( arylst.get( arylst.size() - 1 ).equals( asin ) == false ) ) { arylst.add( asin ); } } for( Iterator iter = arylst.iterator(); iter.hasNext(); ) { System.out.println( iter.next() ); } // 後処理。ホントは finally でしなきゃいけないのかな? bufferedReader.close(); httpURLConnection.disconnect(); } catch ( Exception e ) { e.printStackTrace(); } finally { } }
ところがこれまた実際に Amazon から取ってきたのと結果が違うし(汗)。
今コメントアウトしてる「/497532/249-7353691-7757940」が付いてると普通に表示するのと同じ結果が。具体的にはこんな感じ。
- A.「/497532/249-7353691-7757940」が付いてる場合。
- 1位 ISBN:488418078X
- 2位 ISBN:4334032915
- ちなみに、 IE で「/497532/249-7353691-7757940」を付けずに叩いても、付いてる URL にリダイレクトされます。
- B.「/497532/249-7353691-7757940」が付いてない場合。
- 1位 ISBN:4334032915
- 2位 ISBN:488418078X
- Javaから上記のコードで叩くとこっち。リダイレクトされない?
同じことをリブレットと京ぽんからしてみたところ、リブレットは A 、京ぽんは B の結果に。ただ、少ししたらまた順位が変わってたんで、時間が経ったから変わっただけという可能性も否定できず。
あと、リブレットで URL を見たら、「/497532/249-7353691-7757940」のとこが違うのだったんで多分セッションIDみたいなもんなんでしょう。
とゆーわけで、結局厳密に正確な順位は取れなさそう(汗)。まぁ仕方ないか……。