• ベストアンサー

オークションサイト一括検索サイトを作っているのですが・・・(URLコード???)

具体的におたずねします。 オークションサイト一括検索サイトを作っているのですが、JavaScriptで、検索をかけるurlを送信(?)しても、 検索文字が日本語だと検索できないサイトがあり困っています。 window.location.href = xxxx; という感じで、新たなブラウザを開いてやってます。 xxxxには "http://auction.curio-city.com/itemlist.jsp?pn=0&so=4&sd=0&kw=test" などが入ります。 上記でアクセスすると検索文字が"test"なので問題ない のですが、 "http://auction.curio-city.com/itemlist.jsp?pn=0&so=4&sd=0&kw=テスト" などとするとエラーになってしまいます。 調べた結果、文字列をURLコードというものに変換すれば解決しそうなのですが、JavaScriptでこれを行うのは不可能に近いようです。 どんな方法でもよいので、日本語で検索できるようにする方法はないものでしょうか? どうかお詳しい方よろしくお願い致します。m(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • zzzzzz
  • ベストアンサー率61% (70/113)
回答No.2

name="form1"なる属性を持つformをsubmitする場合、 document.forms.form1.submit(); でできますので、「複数同時に」というのはそれほど問題ではないと思います。 しかし、例示されているページを調べてみたところ、Shift_JISでのエンコードを前提としてクエリー文字列を受け取っているようでした。 このため、window.open()で新しいページを開いてフォームを書き込み、それをsubmitする、という方法ではうまくいきません。 (書き込まれるコードがShift_JISとは限らないため。ちなみにIE6ではUnicodeのようでした。) 従って、文字コードの問題を解決するための小細工が必要になります。 1.VBScriptを利用する VBScriptにはUnicodeへの変換なしに文字コードを取得する関数がありますので、これを使用すれば自力でエンコードできます。 但し、NetscapeはVBScriptを実行できません。 2.JavaScriptで小細工する この場合、madmanさんのご指摘通り、ブラウザのエンコード機能を利用することになります。 が、ブラウザにShift_JISでエンコードしてもらうためには、submitするフォームが所属するページがShift_JISで書かれている必要があります。 このため、Shift_JISで書かれたスケルトンページを用意し、そのページをwindow.open()で開いて値を設定し、submitする、という方法が考えられます。 但し、異なるウィンドゥへのデータの書き込みは制限されているため、 スケルトンページ側に書き込み用関数を用意して、それを通してキーワードを設定する、という手順が必要になります。 DHTMLを使用しない場合には、スケルトンページはオークションサイトの個数分用意しなければなりません。 DHTMLを使用する場合には、スケルトンページは1つでできますが、古いブラウザには対応できなくなります。 ちなみに、HTML中でクエリー文字列付きのURIを記述する場合には、"&"は"&"と記述するのが正解です。

neo_gigantes
質問者

お礼

とても詳しいご回答ありがとうございます。 その後、複数のブラウザを開いて検索するのは後回しにし、ひとまずsubmit()でformの値を送信することに成功しました。複数のブラウザを開くのなら、formを複数用意し、それぞれを個別に送信するようにすればいいんですよね?そこまではわかりました。また、この方法で一部のサイトは解決しそうです! しかし、例としてあげたページ(楽天ですが)はEUCコードしか受けつけないようです。zzzzzzさんは、IE6.0ではunicodeのようだとおっしゃってますが、それはURLコードではないでしょうか? 先の方法ではURLコードになるのですが、楽天ではEUCコードしか受けつけないので、エラーとなってしまいます。 ちなみにヤフーではURLコードでもEUCコードでもOKのようです。こちらでその問題が指摘されていました。http://www.survive.ne.jp/lunascape/about.html JavaScriptでのEUCコードへの変換は漢字コードにしたがって一文字づつ変換しない限り無理とのことで、ほとんど不可能に近いようです。 というわけでほとんど絶望していますが、formを個別にsubmitする方法を教えていただけのは大きな収穫でした。 とりあえず、その後学習したことをまとめて見ましたが、何か間違いがありましたら、ご指摘頂けると幸いです。 ありがとうございました。

その他の回答 (4)

  • zzzzzz
  • ベストアンサー率61% (70/113)
回答No.5

ブラウザのJavaScriptの実装を信用するなら、スケルトンなしで次のように書くことができます。 試してみてください。 <HTML> <HEAD> <SCRIPT> function openWithQuery(url, querys, charset) { var win = window.open(); win.document.open(); win.document.charset = charset; var tmpstr = new Array(); var i = 0; tmpstr[i++] = '<HTML>\n<HEAD>\n<META http-equiv="Content-type" content="text/html;charset=' + charset + '">\n</HEAD>\n'; tmpstr[i++] = '<BODY>\n<FORM name="form1" action="' + url + '">\n'; for (var key in querys) { tmpstr[i++] = '<INPUT type="hidden" name="' + key + '" value="' + querys[key] + '">\n'; } tmpstr[i++] = "</FORM>\n</BODY>\n</HTML>\n"; win.document.write(tmpstr.join("")); win.document.close(); win.document.forms.form1.submit(); return win; } function search(keyword) { var url = "http://auction.curio-city.com/itemlist.jsp"; var query = new Array(); query["pn"] = "0"; query["so"] = "4"; query["sd"] = "0"; query["kw"] = keyword; openWithQuery(url, query, "Shift_JIS"); // オークションサイトを追加する場合にはここに記述 } </SCRIPT> </HEAD> <BODY> <FORM name="form1" onsubmit="search(document.forms.form1.keyword.value); return false"> <INPUT type="text" name="keyword" value="テスト"> <INPUT type="button" value="検索" onclick="search(document.forms.form1.keyword.value)"> </FORM> </BODY> </HTML>

neo_gigantes
質問者

お礼

本当に感謝しております。 私一人で考えていたら、一体何日かかったかわかりません。本当にありがとうございます。 win.document.charset = charset; この操作方法を教えていただいたおかげで、 IEでは全て日本語で検索可能となりました。 問題の楽天に関しては、新たに開いたウィンドウをX-EUC-JPまたはEUC-JPにすると良いようです。 しかし、ネスケではこれは無効のようですね。 ネスケでもどうにかしようと、#5のアドバイスにしたがって新たに書き出す方法でも試してみましたが、こちらでもダメでした。 先に報告しましたようにネスケでは、あらかじめEUC-JPにしておいたページからは日本語検索できることが確認できてますので、おそらくzzzzzzさんの仰るスケルトンページを用意することで解決すると思います。 結果はまた後ほどご報告致します。

neo_gigantes
質問者

補足

先日は色々と教えていただきましてありがとうございました。実は、その後、同じ楽天でも、これまで指定していたcgiとは別のcgiを指定することで、日本語検索が可能となることが判明し、それで解決してしまいました。せっかく教えて頂いたのに全てを消化できずに終わってしまいましたが、非常に多くの有益な情報を得ることができました。スケルトンページを使った方法は何か別の機会に生かしたいと思います。本当にありがとうございました。

  • zzzzzz
  • ベストアンサー率61% (70/113)
回答No.4

>zzzzzzさんは、IE6.0ではunicodeのようだとおっしゃってますが、それはURLコードではないでしょうか? ビルトイン関数のescape()の話ではなく、window.open()→document.write()で新しいページに書き出したときの、文字コードの話です。 これがUnicodeになっているようですので、スケルトンページの助けなしには、ブラウザのエンコード機能に、文字コードがShiftJISであることを指定できないのではないか、ということが言いたかったのです。 なお、文字コードの問題と、URLエンコードの問題は全く独立のものです。 文字コードがEUCであろうとShiftJISであろうと、URLエンコードをしなければ送信できないことには変わりありません。 >楽天ではEUCコードしか受けつけないので 手でエンコードしてデータを送ってみましたが、やはりShiftJISしか受け付けないようです。EUCではうまくいきませんでした。 と、理屈ばかり書いていても仕方がありませんので、論より証拠、ということで、スケルトンページを使用した実装例を挙げてみました。 但し、この方法はDOM(Document Object Model)の実装を使用しているので、IE5以降か、Netscape6以降でしか利用できません。 #2にも書きましたが、オークションページ毎に個別のスケルトンを用意することでこの制約は回避可能です。 [skeleton.html](必ずShiftJISで保存してください) <HTML> <HEAD> <META http-equiv="Content-type" content="text/html;charset=Shift_JIS"> <SCRIPT> // assume browser's exact interpretation of META tag function addQueryString(name, value) { var element = document.createElement("INPUT"); element.setAttribute("type", "hidden"); element.setAttribute("name", name); element.setAttribute("value", value); document.forms.form1.appendChild(element); } </SCRIPT> <BODY> <FORM name="form1"> </FORM> </BODY> </HTML> [呼び出し側](適当に名前を付けてください) <HTML> <HEAD> <SCRIPT> basePage = "skeleton.HTML"; function openWithQuery(url, querys) { var win = window.open(basePage, "_blank"); var form = win.document.forms[0]; form.action = url; for (var i in querys) { win.addQueryString(i, querys[i]); } form.submit(); } function search(keyword) { var url = "http://auction.curio-city.com/itemlist.jsp"; var query = new Array(); query["pn"] = "0"; query["so"] = "4"; query["sd"] = "0"; query["kw"] = keyword; openWithQuery(url, query); // オークションサイトを追加する場合にはここに記述 } </SCRIPT> </HEAD> <BODY> <FORM name="form1"> <INPUT type="text" name="keyword" value="テスト"> <INPUT type="button" value="検索" onclick="search(document.forms.form1.keyword.value)"> </FORM> </BODY> </HTML>

neo_gigantes
質問者

お礼

懇切丁寧なご回答ありがとうございます。 その後、OKwebからのメールが来ていなかったようだったので、ご回答頂いていたことに今まで気付いていませんでした。 内容もかなり難しくなってきましたので、zzzzzzさんのアドバイスを消化するのに時間がかかりそうですが、後日、結果をご報告したいと思います。 なお、その後、NC4.7ですと、CHARASET を EUC-JPにして送信することで、検索ができました。(他が文字化けしてしまいますが)IE6.0ではエラーとなってしまいました。 今後も調査を続けたいと思います。 なお、現在製作中のサイトのアドレスはこちらです。 http://www.kitanet.ne.jp/~hashimo/okudoku/auction-search.html

neo_gigantes
質問者

補足

最初の質問時に例として挙げていたurlは「楽天」ではなくて、「大魔オークション」という別のサイトでした。 現在唯一日本語検索できずに困っているのは http://trading.rakuten.co.jp/ の方で、以下のようフォームを組んで送信しても 検索できず困っています。 <FORM NAME="RakutenF" METHOD="GET" ACTION="http://esearch.rakuten.co.jp/search/e.search" target="_blank"> <INPUT TYPE="hidden" NAME="sitem" VALUE="テスト"> <INPUT TYPE="hidden" NAME="sv" VALUE="5"> </FORM>

  • gazy
  • ベストアンサー率19% (13/66)
回答No.3

Javascriptならば、escape関数で簡単に文字列をURLエンコードできると思いますよ。

neo_gigantes
質問者

お礼

ご回答ありがとうございます。escape関数でURLエンコードできたは、IE4.0までだそうです。何かの団体の仕様に合わせた所5.0移行UNICODEに変換されるようになってしまったとか。そういうわけでescapeではダメなんですよ~。。。

  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

FORMを作成し、各引数をFORMの情報として格納し、指定URIに(この場合http://auction.curio-city.com)submitするようにすれば問題ないのではないですか?

neo_gigantes
質問者

お礼

ご回答ありがとうございます。それが一番確実だとは思うのですが、一つのボタンをクリックするだけで、複数のブラウザを開いて複数サイトを検索するようにしたいのです。アドバイス頂いた方法では、それぞれのサイトごとにボタンが必要になるのではないかなと・・・。 一つのFORMから、複数の隠しFORM(こういうのがあるのかどうかは別として)に検索文字を渡して、それを一斉にsubmitというのができればいいのですが・・・いかんせん、レベルが低いので可能かどうかすらも判断できません・・・。

関連するQ&A

  • WANTEDオークションの検索機能

    以前こちら(http://oshiete1.goo.ne.jp/qa3659136.html)で以下の質問して解決したと思っていたのですが解決してませんでした。 現在私が行っている検索方法はジャンルを押していくとページの下 にそのジャンルに出品されている商品が表示されるのでCtrl+FやGoogleツールバーの文字列検索で検索しています。 この方法で検索出来ていると思っていたのですが、実際ジャンルを 押して下に表示される商品はそのジャンルに出品されている商品すべてのリストでない事に気づきました。(反映されていない商品が多数ありました) 長々とすいません。 簡単に質問を書くとオークション統計(仮)のようなサイトでウォンデットオークションを対応しているサイトはないでしょうか?? ______________________________________________ WANTEDオークションの商品の検索機能で商品名を入力しても 「該当するデータがありません」を表示されてうまく検索できません。(実際に出品されている商品のタイトルを入力しても;;) ですので今まではオークション統計(http://aucfan.com/のサイトの検索機能でWANTEDオークション内の商品を検索していたのですがWANTEDオークションがオークション統計で検索できなくなったため困っています。 他にこのようなサイトはないでしょうか?それとも正常にWANTEDオークション内の商品を検索する方法はないでしょうか?

  • movabletypeによるサイト内検索の不具合

    先日movabletype(以下MT)を使用してホームページを作成しようと思い、インストールとサイト構築まで成功したのですが、どうしてもサイト内検索(mt-search.cgi使用)がうまく行きません。不具合内容は存在するエントリーを検索したとき1バイト文字のキーワードはヒットするのですが2バイト文字だとまったくヒットしません。文字化けをしているわけでもなく単純にヒットしない状態です。例にたとえると 「test」というタイトル、本文、カテゴリーのエントリーを作り、同様に「テスト」というエントリー2つを作って検索した場合「test」で検索すると「test」エントリーはヒットするのですが「テスト」で検索すると「テスト」エントリーは見つかりませんと出ます。  これは投稿が検索に反映するまで時間が掛かるのか、それとも何か足りないのでしょうか?何かわかる方いらっしゃいましたらお手数ですがご回答よろしくお願いします。 以下補足です。 MTのバージョンは3.35-j 文字コードはUTF-8 使用テンプレートは 小粋空間様のものを使用 DBはDB_File1.76 Parlのバージョンは 7.6.0

  • Tomcat JSPの文字コードが勝手に変わる

    はじめまして、Makotoと申します。 現在 RedhatLinux 7 tomcat 4 で開発を行っているのですが、 JSPの文字コードがEUCからShiftJISに 勝手に換わってしまうバグで悩んでいます。 問題のJSPなのですが、初期画面の表示はうまくいくのですが、画面の検索ボタンを押して結果を表示しようとするときにJavascriptのエラーが発生してしまいます。Javascriptを使ってないので おかしいと思いソースを見るとShiftJISになっていました。JSPには <%@ page contentType="text/html; charset=EUC-JP" %> を設定しているのですが、どうしても文字コードが変わってしまいます。別環境にTomcat5があるのですが、そっちではこのバグは発生しませんでした。 Tomcat4に問題があるのでしょうか?

    • ベストアンサー
    • Java
  • [検索] ヤフオク検索サイトにて「手帳」が検索できないのはなぜ?

    あけましておめでとうございます。 さて、ヤフオク検索サイト http://www2.bbsonline.jp/auctions/ は、結構便利でよく使っているのですが、最近「手帳」を含んだ文字列の検索を行うと、ことごとく結果が0件になってしまうことに気づきました。 具体的には、 「2005 手帳」と入れても、検索結果が0件なのに「2005 手」と入れて検索すると1,300件以上が表示され、もちろん「手帳」に該当するものもたくさん出てきます。よって、「2005 手帳」でも出てきてよいもんだと思うのですが、文字によって検索できないものがあるのでしょうか? ちなみに、Yahooオークション画面から「2005 手帳」の検索はちゃんと行えます。 さて、これはどういうことなんでしょうか? よろしくお願いします。

  • 検索エンジンにミラーサイトと誤解されないためには?

    アクセス元を知るために、リンクするURLにこのように番号を振りたいと思います。 http://www.test.co.jp/index.php?id=100 これは、下記のようなURLでもまったく同じページが表示されます。 http://www.test.co.jp/index.php?id=1001 http://www.test.co.jp/index.php?id=2002 この手法で一つ気になるのが、検索エンジンがこれを別のページと誤って解析し、ミラーサイトと誤認してしまわないだろうかということです。 id=XXXXの部分を無視させるなど、検索エンジンに誤解されないようにする手法はないものでしょうか?

  • サイト内検索キーワードの取得について

    あるホームページのサイト内検索のキーワードを取得するJavaScriptを組みたいのですが、どうも日本語のキーワードが文字化けしてしまいます。 検索キーワード入力画面の文字コードは「shift_jis」、検索結果ページは、文字コード「UTF-8」です。 たとえば、「質問」とキーワードを入れると、URLのバーには「%8E%BF%96%E2」と表示されます。 この「%8E%BF%96%E2」をデコードして、検索キーワードのデータを取得するJavaScriptはどのように組めばいいでしょうか? ちなみに、現在、前後は省略しますが、以下の通り記述しています。 hensu1に日本語の文字しないキーワードが取得したいのです。 mydecode=QueryParam('Q'); //Qのパラーメタ(検索キーワード)取得 hensu1=unescape(mydecode);

  • 自動的に検索してくれるソフト

    こんにちは. 例えば,古本サイトやオークションサイトなどで,欲しい古本や物(時計)等を毎回毎日,専門のサイトに行って,同じ文字を入れて検索しているのですが,そのようなこを,あらかじめサイトや検索文字や検索する時間などを登録しておくと,自動的にやってくれるフリーソフトなどはないでしょうか? 心当たりのある方,教えてくださいませんか?

  • google検索のようなリアルタイムな反応

    googleの検索エンジンって文字を打ってエンターを押す前からもう結果が表示されていますよね? それも文字をうつ事に結果が反映されるほどリアルタイムに。 あのように検索結果をリアルタイムに表示してくれる物をサイトの検索エンジンにも使いたいなと思うのですが、あれはどういう仕組なのでしょうか。 javascriptなどを組み合わせているのでしょうか。

    • ベストアンサー
    • CSS
  • スプレッドシートでの検索結果のURL取得について

    スプレッドシートを使い、Google検索結果のURLをスクレイピングしたいと思っています。 いろいろなサイトで紹介されている方法を試してみましたが、取得できたURLの前後に余分な文字列が含まれており、これを除いて純粋にURLの文字列だけを取得することは不可能なのでしょうか? 私がやった方法は以下のような感じです。 A1セルに「パソコン」と入力 A2セルに=IMPORTXML("http://www.google.co.jp/search?hl=jp&gl=JP&q="&A1,"//div[@id='res']//h3[@class='r']/a/@href")と入力 結果は以下のとおりです こういったものが10サイト分(検索結果1ページ分)表示されます /url?q=https://www.biccamera.com/bc/c/pc/intel/index.jsp&sa=U&ved=0ahUKEwjBvvX0ia3dAhWuxVkKHcVcB4MQFgghMAI&usg=AOvVaw185ZVa-oN20szNKSbDcXJv

  • javascript検索窓で検索→戻る→文字化け

    javascriptで作った検索窓を使い、大手ポータルサイトに飛び、戻るボタンを押して戻ると、自分のページが文字化けします。 表示→エンコード→自動選択にすると戻るのですがこのエラーを直す方法はありませんか?

専門家に質問してみよう