Ошибка API поиска Bing при использовании odata4j

Я пытаюсь запустить API поиска Bing. Я использовал odata4j и попробовал приведенный здесь код: использовать API поиска Bing в Java

ODataConsumer c = ODataConsumers
    .newBuilder("https://api.datamarket.azure.com/Bing/Search")
    .setClientBehaviors(OClientBehaviors.basicAuth("accountKey", "{your account key here}"))
    .build();

OQueryRequest<OEntity> oRequest = c.getEntities("Web")
    .custom("Query", "stackoverflow bing api");

Enumerable<OEntity> entities = oRequest.execute();

После того, как я зарегистрировался в службе Bing, я получил ключ и поместил его в двойные кавычки в приведенном выше коде. Я получил следующую ошибку:

Exception in thread "main" java.lang.RuntimeException: Expected status OK, found Bad Request. Server response:
Parameter: Query is not of type String
    at org.odata4j.jersey.consumer.ODataJerseyClient.doRequest(ODataJerseyClient.java:165)
    at org.odata4j.consumer.AbstractODataClient.getEntities(AbstractODataClient.java:69)
    at org.odata4j.consumer.ConsumerQueryEntitiesRequest.doRequest(ConsumerQueryEntitiesRequest.java:59)
    at org.odata4j.consumer.ConsumerQueryEntitiesRequest.getEntries(ConsumerQueryEntitiesRequest.java:50)
    at org.odata4j.consumer.ConsumerQueryEntitiesRequest.execute(ConsumerQueryEntitiesRequest.java:40)
    at BingAPI.main(BingAPI.java:20)
Caused by: org.odata4j.exceptions.UnsupportedMediaTypeException: Unknown content type text/plain;charset=utf-8
    at org.odata4j.format.FormatParserFactory.getParser(FormatParserFactory.java:78)
    at org.odata4j.jersey.consumer.ODataJerseyClient.doRequest(ODataJerseyClient.java:161)
    ... 5 more

Я не мог понять проблему.


person user2192774    schedule 30.07.2014    source источник


Ответы (2)


Все, что вам нужно, это задать свой запрос следующим образом: %27stackoverflow bing api%27

Вот мой исходный код:

ODataConsumer consumer = ODataConsumers
            .newBuilder("https://api.datamarket.azure.com/Bing/Search/v1/")
            .setClientBehaviors(
                    OClientBehaviors.basicAuth("accountKey",
                            "{My Account ID}"))
            .build();

    System.out.println(consumer.getServiceRootUri() + consumer.toString());

    OQueryRequest<OEntity> oQueryRequest = consumer.getEntities("Web")
            .custom("Query", "%27stackoverflow%27");

    System.out.println("oRequest : " + oQueryRequest);

    Enumerable<OEntity> entities = oQueryRequest.execute();
    System.out.println(entities.elementAt(0));
person lylia kissoum    schedule 27.02.2015

Вы также можете попробовать разные запросы с разными фильтрами, продолжая добавлять пары «имя-значение», используя .custom («Тип параметра», «параметр») объекта oQueryrequest. Допустим, вы хотите найти индийскую еду, но вам нужен только маленький квадрат. картинки.

    ODataConsumer consumer = ODataConsumers
            .newBuilder("https://api.datamarket.azure.com/Bing/Search/v1/")
            .setClientBehaviors(
                    OClientBehaviors.basicAuth("accountKey",
                            "YOUR ACCOUNT KEY"))
            .build();

    System.out.println(consumer.getServiceRootUri() + consumer.toString());

    OQueryRequest<OEntity> oQueryRequest = consumer.getEntities("Image")
            .custom("Query", "%27indian food%27");    
    oQueryRequest.custom("Adult", "%27Moderate%27");
    oQueryRequest.custom("ImageFilters", "%27Size:Small+Aspect:Square%27");
    System.out.println("oRequest : " + oQueryRequest);

    Enumerable<OEntity> entities = oQueryRequest.execute();

    int count = 0;
    Iterator<OEntity> iter = entities.iterator();
    System.out.println(iter.next());
person Jatin Garg    schedule 16.06.2016