Bing API Конкретный домен - PullRequest
0 голосов
/ 03 июля 2011

В настоящее время я использую Bing API с интерфейсом Java и XML.Я скачал только два java-файла на свой компьютер, попробовал их, и все работает нормально, код, который я использую,

import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

//Live Search API 2.0 code sample demonstrating the use of the
//Web SourceType over the XML Protocol.
class WebSample 
{
    static XPathFactory factory = null;
    static XPath xpath = null;
    static XPathExpression expr = null;

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException
    {
        // Build the request.
        String requestURL = BuildRequest();

        // Send the request to the Live Search Service and get the response.
        Document doc = GetResponse(requestURL);

        if(doc != null)
        {
            // Display the response obtained from the Live Search Service.
            DisplayResponse(doc);
        }

    }
    private static String BuildRequest()
    {
        // Replace the following string with the AppId you received from the
        // Live Search Developer Center.
                String query="Google";
        String AppId = "01AAEBA23F10712783FE3D13AA4018153B89AC3C";
        String requestString = "http://api.search.live.net/xml.aspx?"

            // Common request fields (required)
            + "AppId=" + AppId
            + "&Query=" + query
            + "&Sources=Web"

            // Common request fields (optional)
            + "&Version=2.0"
            + "&Market=en-us"
            + "&Adult=Moderate"

            // Web-specific request fields (optional)
            + "&Web.Count=10"
            + "&Web.Offset=0"
            + "&Web.FileType=DOC"
            + "&Web.Options=DisableHostCollapsing+DisableQueryAlterations";

        return requestString;
    }

    private static Document GetResponse(String requestURL) throws ParserConfigurationException, SAXException, 
IOException 
    {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setNamespaceAware(true);
        Document doc = null;
        DocumentBuilder db = dbf.newDocumentBuilder();

        if (db != null)
        {              
            doc = db.parse(requestURL);
        }

        return doc;
    }

    private static void DisplayResponse(Document doc) throws XPathExpressionException
    {
        factory = XPathFactory.newInstance();
        xpath = factory.newXPath();
        xpath.setNamespaceContext(new APINameSpaceContext());
        NodeList errors = (NodeList) xpath.evaluate("//api:Error",doc,XPathConstants.NODESET);

        if(errors != null && errors.getLength() > 0 )
        {
            // There are errors in the response. Display error details.
            DisplayErrors(errors);
        }
        else
        {
            DisplayResults(doc);
        }
    }

    private static void DisplayResults(Document doc) throws XPathExpressionException 
    {
        String version = (String)xpath.evaluate("//@Version",doc,XPathConstants.STRING);
        String searchTerms = (String)xpath.evaluate("//api:SearchTerms",doc,XPathConstants.STRING);
        int total = Integer.parseInt((String)xpath.evaluate("//web:Web/web:Total",doc,XPathConstants.STRING));
        int offset = Integer.parseInt((String)xpath.evaluate("//web:Web/web:Offset",doc,XPathConstants.STRING));
NodeList results = (NodeList)xpath.evaluate("//web:Web/web:Results/web:WebResult",doc,XPathConstants.NODESET); 

        // Display the results header.
        System.out.println("Live Search API Version " + version);
        System.out.println("Web results for " + searchTerms);
        System.out.println("Displaying " + (offset+1) + " to " + (offset + results.getLength()) + " of " + total + " results ");
        System.out.println();

        // Display the Web results.
        StringBuilder builder = new StringBuilder();

        for(int i = 0 ; i < results.getLength(); i++)
        {
            NodeList childNodes = results.item(i).getChildNodes();

            for (int j = 0; j < childNodes.getLength(); j++) 
            {
                if(!childNodes.item(j).getLocalName().equalsIgnoreCase("DisplayUrl"))
                {
                    String fieldName = childNodes.item(j).getLocalName();

                    if(fieldName.equalsIgnoreCase("DateTime"))
                    {
                        fieldName = "Last Crawled";
                    }

                    builder.append(fieldName + ":" + childNodes.item(j).getTextContent());
                    builder.append("\n");
                }
            }

            builder.append("\n");
        }

        System.out.println(builder.toString());
    }

    private static void DisplayErrors(NodeList errors) 
    {
        System.out.println("Live Search API Errors:");
        System.out.println();

        for (int i = 0; i < errors.getLength(); i++) 
        {
            NodeList childNodes = errors.item(i).getChildNodes();

            for (int j = 0; j < childNodes.getLength(); j++) 
            {
                System.out.println(childNodes.item(j).getLocalName() + ":" + childNodes.item(j).getTextContent());
            }

            System.out.println();
        }
    }
}

ВОПРОС: Я хочу получить все результаты из определенного домена.Как это сделать ?и стоит ли скачивать какие-либо библиотеки?

1 Ответ

0 голосов
/ 27 декабря 2011

В запросе String вы даете

String query = "Google%20site:www.apple.com"

Это должно сработать, он вернет результат только с www.apple.com.

...