0

私は次の場所で 1 つの調査を行いました。

  1. http://developer.yahoo.com/blogs/ydn/important-api-updates-changes-8060.html

  2. http://developer.yahoo.com/boss/search/

  3. http://tech.groups.yahoo.com/group/ysearchboss/msearch?query=http+request&submit=Search&charset=windows-1252

  4. http://developer.yahoo.com/java/howto-reqRestJava.html

私は、2008 年に Yahoo が Java プログラミングの http メソッドで 1 つの変更を行ったことを発見しました。

"String request = " http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=umbrella&results=10 ";"

に関して:

HttpClient client = new HttpClient();

        GetMethod method = new GetMethod(request);


        // Send GET request

        int statusCode = client.executeMethod(method);

など..現在、彼らは BOSS 検索 API を持っていますが、今まで私は何も見つけませんでした:

「Yahoo 検索エンジンで Java から HTTP リクエストを送信する方法は?」

ps: yahoo がある種の暗号化された検索を行い、urlencoder.encode(query) のようなものが機能しないことを思い出してください。

誰もこれについて私に何かを持っていますか? 前もって感謝します!=]

編集 1: この " http://developer.yahoo.com/boss/search/boss_api_guide/codeexamples.html#oauth_java " を yahoo developer で見つけて、自分の質問に答えようとしています。

編集 1:

try {


    WebSearch ws = new WebSearch();

    ws.search(userQuery);

    List<WebSearchResult> results = ws.getResults();

    for(WebSearchResult result : results){
         System.out.println(result.getTitle());
    }

    // Setup connection properties (this doesn't open the connection)
    URLConnection connection = url.openConnection();
    connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.8.1.6) Gecko/20070723 Iceweasel/2.0.0.6 (Debian-2.0.0.6-0etch1)");

    //Setup a reader
    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

    //Read line by line
    String line = null;
    while ((line = reader.readLine()) != null) {
    System.out.println (line);
    }
    //Close connection
    reader.close();
}

コンソールに報告されたエラー:

スレッド「AWT-EventQueue-0」での例外 com.jellymold.boss.util.BOSSException: com.jellymold.boss.WebSearch.search(WebSearch.java:103) での IO 例外 com.jellymold.boss.WebSearch.search( WebSearch.java:66) で com.sh.st.HttpRequest.(HttpRequest.java:33) で com.sh.st.EventSearch$1.actionPerformed(EventSearch.java:32) で javax.swing.SwingUtilities.notifyAction(Unknown)ソース) で javax.swing.JComponent.processKeyBinding(不明なソース) で javax.swing.JComponent.processKeyBindings(不明なソース) で javax.swing.JComponent.processKeyEvent(不明なソース) で java.awt.Component.processEvent(不明なソース) java.awt.Container.processEvent (不明なソース) で java.awt.Component.dispatchEventImpl (不明なソース) で java.awt.Container.dispatchEventImpl (不明なソース) で java.awt.Component で。java.awt.DefaultKeyboardFocusManager.redispatchEvent(不明なソース) の java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(不明なソース) の java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(不明なソース) java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(ソース不明) java.awt.DefaultKeyboardFocusManager.dispatchEvent(ソース不明) java.awt.Component.dispatchEventImpl(ソース不明) java.awt.Container.dispatchEventImpl(ソース不明) java.awt.Window.dispatchEventImpl(ソース不明) ) で java.awt.Component.dispatchEvent(不明なソース) で java.awt.EventQueue.dispatchEventImpl(不明なソース) で java.awt.EventQueue.access$200(不明なソース) で java.awt.EventQueue$3.run(不明なソース) ) java.awt.EventQueue$3 で。java.security.AccessController.doPrivileged (ネイティブ メソッド) で java.security.ProtectionDomain$1.doIntersectionPrivilege (不明なソース) で java.security.ProtectionDomain$1.doIntersectionPrivilege (不明なソース) で java.awt.EventQueue$4 で (不明なソース) を実行します。 java.awt.EventQueue$4 での .run (未知のソース) java.security.AccessController.doPrivileged (ネイティブ メソッド) での run (未知のソース) java.security.ProtectionDomain$1.doIntersectionPrivilege (未知のソース) での java.awt.EventQueue java.awt.EventDispatchThread.pumpOneEventForFilters の .dispatchEvent(不明なソース) java.awt.EventDispatchThread.pumpEventsForFilter(不明なソース) の java.awt.EventDispatchThread.pumpEventsForHierarchy(不明なソース) java.awt.EventDispatchThread.pumpEvents の(ソース不明) java.awt.java.awt.EventDispatchThread.run(不明なソース) の EventDispatchThread.pumpEvents(不明なソース) 原因: java.io.IOException: com.jellymold.boss.util.HTTPRequestImpl.sendGetRequest(HTTPRequestImpl.java :62) com.jellymold.boss.WebSearch.search(WebSearch.java:92) ... 39 もっと見る

編集2

 public int sendGetRequest(String url) throws IOException{
        //int ret = 500;
        try {
            URL u = new URL(url);
            HttpURLConnection uc = (HttpURLConnection) u.openConnection();
            uc.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.8.1.6) Gecko/20070723 Iceweasel/2.0.0.6 (Debian-2.0.0.6-0etch1)");
            // ret = uc.getResponseCode();
           // if(200==ret){
                BufferedReader rd = new BufferedReader(new InputStreamReader(uc.getInputStream()));
                StringBuffer sb = new StringBuffer();
                String line;
                while ((line = rd.readLine()) != null) {
                    sb.append(line);
              //  }
                rd.close();
                setResponseBody(sb.toString());
            }
        }catch (MalformedURLException ex) {
            throw new IOException(url+" is not valid");
        }catch (IOException ie) {
            throw new IOException("IO Exception" + ie.getMessage());
        }
        return ret=0;
    }

javaboss API からのこのコードを確認してください - リーダーをセットアップするために変更を加えました - uc.getResponseCode(); からの値です。ゼロです。「メイン」クラス名 Bosssearch にあります。つまり、if は常に 200 とは異なり、戻り値は常にゼロです...コードがクラッシュする可能性があると思いますが、Java ファイルを jar としてエクスポートして置き換える必要があります。いくつか問題がありますが、どう思いますか?

4

1 に答える 1

1

javabossを使用して、Yahoo! への検索を実行できます。検索エンジン:

WebSearch ws = new WebSearch();

ws.search("your_search_keywords_here");

System.out.println("Total hits : " + ws.getTotalResults());

//get a list of results
List<WebSearchResult> results = ws.getResults();

//iterate over the list and print every result title
for(WebSearchResult result : results){
     System.out.println(result.getTitle());
}

ただし、以前の質問 (Java リクエストからの Google 検索) への回答で説明したように、403 エラーを取得せずにこのタイプのリクエストを行うようにユーザー エージェントを設定する必要があります。

于 2013-06-29T13:57:18.363 に答える