Форум программистов, компьютерный форум, киберфорум
Java: API, боты
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 85
1

Yandex direct API как выполнить json запрос из Java?

01.05.2019, 17:22. Показов 1692. Ответов 4

Yandex direct API как выполнить json запрос из Java?
Тут https://tech.yandex.ru/direct/... t-docpage/ инструкция от яндекса как выполнить запрос, который возвращает список компаний.

Я написал код, но он не возвращает список компаний
Что я делаю не так? Помогите пож-та

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
 
import java.io.IOException;
 
public class Runner {
 
    public static void main(String[] args) throws IOException {
        HttpClient httpClient = HttpClientBuilder.create().build();
        HttpPost request = new HttpPost("https://api-sandbox.direct.yandex.com/json/v5/campaigns");
        request.addHeader("method", "post");
        request.addHeader("content-type", "application/x-www-form-urlencoded");
        request.addHeader("Accept-Language", "en");
        request.addHeader("Authorization", "Bearer AQAAAAArF4HVAAWVTS-0xmCgpENLj6IZXHfvJ_o");
        StringEntity entity = new StringEntity("{\"method\":\"get\",\"params\":{\"SelectionCriteria\":{},\"FieldNames\":[\"Id\",\"Name\"]}}");
        request.setEntity(entity);
        HttpResponse response = httpClient.execute(request);
        System.out.println(response);
    }
}
Когда делаю запрос в консоли curl все работает как надо
Запрос:
curl -k -H "Authorization: Bearer AQAAAAArF4HVAAWVTS-0xmCgpENLj6IZXHfvJ_o" -d "{"method":"get","params":{"SelectionCriteria":{},"FieldName s":["Id","Name"]}}" https://api-sandbox.direct.yan... /campaigns

Ответ:
{"result":{"Campaigns":[{"Name":"Test API Sandbox campaign 1","Id":318390},{"Id":318391,"Name":"Test API Sandbox campaign 2"},{"Id":318392,"Name":"Test API Sandbox campaign 3"}]}}

Добавлено через 1 час 6 минут
Все заработало, проблема была в том, что response это поток и обрабатывать его нужно было по другому, см. код ниже

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Runner {
 
    public static void main(String[] args) throws IOException {
        HttpClient httpClient = HttpClientBuilder.create().build();
        HttpPost request = new HttpPost("https://api-sandbox.direct.yandex.com/json/v5/campaigns");
        request.addHeader("method", "post");
        request.addHeader("content-type", "application/x-www-form-urlencoded");
        request.addHeader("Accept-Language", "en");
        request.addHeader("Authorization", "Bearer AQAAAAArF4HVAAWVTS-0xmCgpENLj6IZXHfvJ_o");
        StringEntity entity = new StringEntity("{\"method\":\"get\",\"params\":{\"SelectionCriteria\":{},\"FieldNames\":[\"Id\",\"Name\"]}}");
        request.setEntity(entity);
        HttpResponse response = httpClient.execute(request);
        System.out.println(response.);
        BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }
        System.out.println("result = " + result);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2019, 17:22
Ответы с готовыми решениями:

JSON yandex translate API (перевод ru-en)
Приветствую! Будьте добры подсказать в чем может быть причина, по которой с русского на английский...

Java работа с Yandex API
Я отсылаю запрос https://cloud-api.yandex.net:443/v1/disk/resources/download?resources?path=%2F...

Как создать ( json либо xml) запрос на основе данных из БД и отправить на api
Доброе утро, Друзья. Помогите как правильно сформировать запрос. У меня есть база данных. В...

Как на java сделать JSON запрос и ответ от какого нибудь определенного сайта. Как это все делается ?
цццц

4
14 / 12 / 3
Регистрация: 20.02.2018
Сообщений: 384
03.05.2019, 15:58 2
040985, скажи пожалуйста, а какая у тебя версия Java?

А то я пытаюсь выполнить вот такой же как у тебя операцию:
Java
1
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
но у объекта response отсутствует метод getEntity()
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 85
03.05.2019, 16:16  [ТС] 3
Цитата Сообщение от Volodya_ Посмотреть сообщение
040985, скажи пожалуйста, а какая у тебя версия Java?
8-я версия, если нет метода, то проверьте свои импорты
1
14 / 12 / 3
Регистрация: 20.02.2018
Сообщений: 384
03.05.2019, 16:43 4
Цитата Сообщение от 040985 Посмотреть сообщение
8-я версия, если нет метода, то проверьте свои импорты
спасибо, проверю
0
3043 / 2540 / 782
Регистрация: 05.07.2013
Сообщений: 12,288
03.05.2019, 21:23 5
запусти фиддлер и посмотри, чем твой запрос отличается от того, что делает curl
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2019, 21:23

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Java+Rest API + JSON
Добрый вечер. Прошу вас указать с чего начать, совсем запутался. Хочу написать контроллеры,...

Yandex direct
Сразу предупреждаю, что вопросы будут очень ламерские и деллитантские о чем собственно и...

Direct.yandex и посещаемость
Можно ли на основе статистики запросов Yandex спрогнозировать реальную посещаемость сайта при...

Yandex.Direct на форуме IPB
Нужно, чтобы при просмотре темы справа отображался рекламный блок партнерской сети Яндекс.Директ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.