Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Автоматическое изменение ссылки http api

java
json
Теги: #<Tag:0x00007f7b62781f60> #<Tag:0x00007f7b62781e20>

#1

Доброго всем времени суток. Не так давно начал изучать Java, были естественно вопросы, но благодаря этому сайту на большинство находил нужные мне ответы. Но в этот раз “глухарь”.
Попытаюсь описать проблему. Не бейте, я впервые.
Используя Api отправляю письмо, читаю Json ответ, вытягиваю нужный мне ID письма и хочу с помощью того же Api проверить дошло ли письмо до получателя.
И собственно уперся. Не могу заставить его использовать, только что полученный ID в ссылке Api.

    String sURL = "http://блабла/ru/api/sendEmail?
    format=json&api_key=блабла&email=блабла@gmail.com&sender_name=Yellowpyki&sender_email=бла бла@bigmir.net&subject=TEST&body=HTMLBODY&list_id=6410050"; 

    URL url = new URL(sURL);

    HttpURLConnection request = (HttpURLConnection) url.openConnection();

    request.connect();

    JsonParser jp = new JsonParser(); 

    JsonElement json = jp.parse(new InputStreamReader((InputStream) request.getContent()))
            .getAsJsonObject().get("result")
            .getAsJsonObject().get("email_id"); //**здесь мы получаем ID**
    System.out.println("ID письма " + json);



    String aURL = ("http://блабла/ru/api/checkEmail?format=json&api_key=блабла&email_id=**вот сюда нужно автоматом подставлять ID который мы уже имеем в json**");
    URL Surl = new URL(aURL);
    HttpURLConnection chek = (HttpURLConnection) Surl.openConnection();
    JsonParser j = new JsonParser(); 
    JsonElement root = j.parse(new InputStreamReader((InputStream) chek.getContent())); 
    JsonObject rootobj = root.getAsJsonObject(); 
    System.out.println(rootobj.get("result"));

#2

Забыл добавить ответ, там где 0, должен появится выше указанный айди, ну и собственно статус доставки будет соответсвующий.
ID письма “7473228258”
{“statuses”:[{“id”:0,“status”:“err_delivery_failed”}]}


(Максим Таран) #3

Ну то есть я правильно понял проблему, что из JsonElement надо получить String?

String id = json.getAsString();
String aURL = "http://блабла/ru/api/checkEmail?format=json&api_key=блабла&email_id="+id;

Вроде так.


#4

Немного не так. Нужно в ссылку добавить нужный нам ID, который уже пропарсеный и находится в переменной json.

 "http://api.unisender.com/ru/api/checkEmail?format=json&api_key=58snk3ui1foywq45jbbrf4b8zu3ffoh6e65xnf8o&email_id=**7473211111**"

Вот вместо вышеуказанного ID мне нужно, что бы программа подставила мой ID .


(Остап Олексин) #5

Используйте String.format(). Будет как-то так:
String id = json.getAsString(); String aURL = String.format("http://блабла/ru/api/checkEmail?format=json&api_key=блабла&email_id=**s%**", id)

Вместо s% будет подставлено значение переменной id.


#6

В точку, благодарю. Только в конце не запятая, а плюс.


(Остап Олексин) #7

Сорри, допустил ошибку.
Вместо s% должно быть %s. Так все работает с запятой, плюса там не надо.


#8

Тогда я не пойму, что это %s, ибо у меня поднялось так:

    String id = json.getAsString();
    String aURL = String.format("http://api.unisender.com/ru/api/checkEmail?format=json&api_key=58snk3ui1foywq45jbbrf4b8zu3ffoh6e65xnf8o&email_id="+ id);

(Jane Tymoschuk) #9

с плюсом не нужна обертка String.format, ее тогда можете убрать


(Ivan Trechyokas) #10

%s - всего лишь литерал обозначающий позицию и тип форматирования, который будет использоваться для переменной. В данном случае %s говорит выведи переменную id как строку там, где стоит %s.

Integer id = 1;
String.format(“id=%s”, id); - выведет “id=1”, в данном случае это не отличается от

String url = “id=” + id.toString();

Но это лишь частный случай, наиболее интересный пример, указания точности выводимого числа и прочие нюансы :slight_smile:

https://docs.oracle.com/javase/tutorial/java/data/numberformat.html


(Eugene Moskalenko) #11

Я бы так не юзал стринг формат, он хорошо подходит для сообщений каких-то в логгер пихать. Но в таком контексте, достаточно будет написать так:

String aURL = "http://api.unisender.com/ru/api/checkEmail?format=json&api_key=58snk3ui1foywq45jbbrf4b8zu3ffoh6e65xnf8o&email_id=" + id;