Скриншот 2016-04-21 20.40.56

Дневник разработки #4. Уход в сторону

Содержание

Введение

Когда начинаешь изучать что-то новое, часто случается, уходишь немного в сторону от основного направления проекта.

Вообще, тут и парадигма поменялась: решил попробовать всё-таки на Питоне под Джангой написать основную часть приложения. Но сначала захотел понять, как же всё-таки работает так называемая customapi у PhantomBot’a.

Погода

Для теста я задумал реализовать простую и удобную команду получения прогноза погоды для заданного города. Достаточно написать в чат сообщение с названием города и бот буквально через секунду ответит:

JackyFox: !погода Москва

jackyfoxbot: по последним данным Moscow радует нас температурой воздуха 14 °С, влажность 58 %, атмосферное давление 1011 гПа, ветер 8 м/с. Спасибо за пользование услугами метеоцентра жекифокса

Используются данные сайта openweathermap.org. После регистрации получаешь API-ключ с бесплатным доступом к прогнозам до 60 запросов в час. Умеет распознавать названия городов на русском, что немаловажно, но почему-то в ответе всё равно присылает англоязычное название.

Запрос формируется параметрами:

  • q, строка с названием города;
  • lang, язык ответа, ru;
  • units, единицы измерения, metric;
  • APPID, ключ API.

В ответ получаем JSON:

Для обработки этого джейсона я написал такую комманду боту:

Я перепроверил его несколько раз, отправил боту,  но никакой инфы о погоде в чате получить не удалось. В логах обнаружилась запись о том, что полученный ответ не является JSON-объектом, поэтому и парсить его бот отказался.

После общения на форуме с разработчкиком бота, который сначала морозился и говорил, что помощи по работе со сторонными API не оказывает, потом заметил, что в джейсоне имеется массив, а поддержку раскрытия массивов они боту не написали.

Обратите внимание на поле weather.description, которое содержит словесное описание текущего погодного состояния на русском языке («ясно? ясно!»). Вот из-за него и не срабатывал скрипт обработчика. Стоило его убрать, и всё сразу заработало.

Разочарование

К сожалению, в результате изучения механизма кастомых команд и обработчиков API выяснилось, что бот не передает имя пользователя ни в одном из девяти параметров. Сегодня правда появилась тестовая версия модуля после моего убедительного обоснования необходимости такого функционала, но я пока не осилил, как этот обработчик следует использовать.

Нужен ли велосипед?

Поработав с API погодного сервиса, я вдруг подумал, а стоит ли изобретать велосипед и писать свое собственное TODO-приложение, если таких приложений полным-полно. Возможно, я смогу использовать их API?

На регулярной основе я использую Google Keep, но оказалось, что Google совершенно не хочет давать к нему доступ через API. Пришлось вбивать в поисковике фразу «todo api». Одна из ссылок привела меня к статье с обзором различных сервисов списков с открытым API. Статья старая, но я там сразу узнал Remember the Milk, которым пользоваться непродолжительное время.

После целого дня гугления я так и не понял, смогу ли я использовать этот API вместе с ботом. Тебе выдают API-ключ, но просто так получить доступ к заметкам нельзя, ты должен аутентифицироваться перед работой с заметками. Как это сделать одним запросом, я пока не понял…