Дневник разработки #5. Неожиданный финал

Содержание

Введение

Сильное желание не создавать свой собственный велосипед порой может сильно отсрочить решение поставленной задачи, а так как у меня сроки в целом были ничем не ограничены, я долго гуглил, пока не нагуглил-таки IFTTT.Maker. Потрясающе простой интерфейс для вызова всевозможных событий простым запросом через сеть.

IFTTT работает по принципу: если что-то случилось, сделать то-то. Если ко второй части привесить канал TODOist, то в целом выйдет то самое приложение, которое я хотел написать изначально:

  1. Maker принимает запрос
  2. Отправляет данные в TODOist
  3. TODOist формирует новый элемент в списке задач
  4. ПРОФЕТ!

Я был очень рад тому, что кто-то проделал кучу работы за меня, и можно пожинать плоды. Мне оставалось лишь написать кастомынй скрипт для PhantomBot, который будет обрабатывать запрос пользователя и отправлять данные в Maker.

Java

Оказалось, что взять и написать что-то на Java очень сложно, не имея никакого опыта работы с этим языком. Не понимамю, почему разработчики не добавят поддержку jQuery… Но я сам всё написал! Единственный мой косяк, который помог исправить Тоха, был в том, что я забыл Content-Type, и Maker не понимал, что за данные я ему шлю, в итоге элемент списка создавался пустым. Код получился весьма специфичным, он использует классы разработчиков бота и больше нигде не годен:

var URL = 'https://maker.ifttt.com/trigger/twitchbot/with/key/MySEcRetKyE';
		
var JSONObject = Packages.org.json.JSONObject,
data = new JSONObject();
		
data.put("value1", sender);
data.put("value2", target);
		
var HttpResponse = Packages.com.gmt2001.HttpResponse;
var HttpRequest = Packages.com.gmt2001.HttpRequest;
var HashMap = Packages.java.util.HashMap;
var header = new Packages.java.util.HashMap(1);

header.put('Content-Type', 'application/json; charset=UTF-8');
				
var response = HttpRequest.getData(HttpRequest.RequestType.POST, URL, data.toString(), header);

В JSON собирается имя пользователя, написавшего в чат что-то вроде:

JackyFox: !go Invoker

И первый аргумент (в данном случае «Invoker»). Дальше много-много переопределений, и потом БАЦ — POST-запрос ушел к серверу.

Заключение

Сейчас допишу возврат средств при ошибке передачи данных, чтобы вручную этого не делать (контроль ошибок к счастью предусмотрен), а потом бац-бац и в продакшн =)