31

Ответ на пост «А вы знали что у NASA есть API?»2

Прочтя этот пост, решил реализовать нечто подобное для ВК.

Приложение раз в час/два и т.д. (настраивается) постит в Вашу группу в ВК рандомную картинку и описание к ней, используя NASA API.


Дисклеймер: Я не супер программист(но очень хотелось бы), поэтому будет полно говнокода, поэтому, прошу сильно не пинать =).


Для начала, необходимо создать standalone-приложение в VK.

Ответ на пост «А вы знали что у NASA есть API?» IT, NASA, API, Разработка, Программирование, Космос, Наука, Бот, Научпоп, ВКонтакте, C++, Qt, Vkapi, Ответ на пост, Длиннопост

Оно нам понадобится для авторизации в соц.сети и получения Access Token, который позволит работать с VK API.


Мы же с вами программисты, а не (вставить любое слово), поэтому, будем писать всё вручную, а не эти ваши десигнеры использовать.


Данные(VKToken, NASAToken, ID Группы, данные об авторизации, ID группы, пользователя и настройки таймера) будем хранить в ini файле.

Для отображения таймера будем использовать QLCDNumber.


Наш хеадер главного окна получился таким:

Ответ на пост «А вы знали что у NASA есть API?» IT, NASA, API, Разработка, Программирование, Космос, Наука, Бот, Научпоп, ВКонтакте, C++, Qt, Vkapi, Ответ на пост, Длиннопост

И наш cpp файл. Если файл с настройками не найден, то программа создаст новый и поставит таймер стандартно на час.

В QLCDNumber ставим отображение до 8ми цифр.

И все наши виджеты загоняем в QGridLayout и выводим её.

Ответ на пост «А вы знали что у NASA есть API?» IT, NASA, API, Разработка, Программирование, Космос, Наука, Бот, Научпоп, ВКонтакте, C++, Qt, Vkapi, Ответ на пост, Длиннопост

Получилась вот такая штука:

Ответ на пост «А вы знали что у NASA есть API?» IT, NASA, API, Разработка, Программирование, Космос, Наука, Бот, Научпоп, ВКонтакте, C++, Qt, Vkapi, Ответ на пост, Длиннопост

Ничего сложного, правда?)


Интерфейс для настроек делаем по подобию, но, если что, ссылку на git оставлю в конц статьи.

Теперь, перейдём к самому интересному. API NASA и VK API.

У NASA есть много разного API, но мы будем работать с APOD(Astronomy Picture of the Day).

Для получения данных, необходимо отправить GET запрос на https://api.nasa.gov/planetary/apod?api_key=NASA_TOKEN


Пример: https://api.nasa.gov/planetary/apod?api_key=NASAToken&co...

В ответ мы получим json файл с таким содержимым:

Ответ на пост «А вы знали что у NASA есть API?» IT, NASA, API, Разработка, Программирование, Космос, Наука, Бот, Научпоп, ВКонтакте, C++, Qt, Vkapi, Ответ на пост, Длиннопост

Нам интересны значения: date, explanation, hdurl и copyright(Если фотография не в свободном доступе, то нужно ставить копирайт и NASA нас об этом предупреждает.)

Ответ на пост «А вы знали что у NASA есть API?» IT, NASA, API, Разработка, Программирование, Космос, Наука, Бот, Научпоп, ВКонтакте, C++, Qt, Vkapi, Ответ на пост, Длиннопост

А вот и полный список всех параметров, но нам будет интересен только "count"

Ответ на пост «А вы знали что у NASA есть API?» IT, NASA, API, Разработка, Программирование, Космос, Наука, Бот, Научпоп, ВКонтакте, C++, Qt, Vkapi, Ответ на пост, Длиннопост

Наша ссылка будет выглядеть так:

https://api.nasa.gov/planetary/apod?api_key=NASAToken&co...

NASAToken - Токен, который мы получили от NASA.


Авторизация в ВК и получение токена.

Пример авторизации в официальной документации:

Ответ на пост «А вы знали что у NASA есть API?» IT, NASA, API, Разработка, Программирование, Космос, Наука, Бот, Научпоп, ВКонтакте, C++, Qt, Vkapi, Ответ на пост, Длиннопост

Где client_id - id нашего приложения, scope - необходимые параметры доступа. В нашем случае нужно будет использовать offline, wall, groups. offline нужен для бессрочного token.


Так как ответ приходит немного кривой, требуется сделать немного косметических правок:

Ответ на пост «А вы знали что у NASA есть API?» IT, NASA, API, Разработка, Программирование, Космос, Наука, Бот, Научпоп, ВКонтакте, C++, Qt, Vkapi, Ответ на пост, Длиннопост

Затем, вытаскиваем из ссылки access_token и айди пользователя, сохраняем и переключаем авторизацию в True, затем, закрываем окно.

Пришла пора обработки JSON от NASA и загрузки данных на стену группы.


Сперва, давайте обработаем данные от НАСА.

Ответ на пост «А вы знали что у NASA есть API?» IT, NASA, API, Разработка, Программирование, Космос, Наука, Бот, Научпоп, ВКонтакте, C++, Qt, Vkapi, Ответ на пост, Длиннопост

Теперь, перейдем к загрузке полученных данных в группу. Нам понадобится метод wall.post и параметры owner_id, message, attachments, access_token.

Обратите внимание, идентификатор сообщества в параметре owner_id необходимо указывать со знаком "-" — например, owner_id=-1 соответствует идентификатору сообщества ВКонтакте API (club1)


Итоговая ссылка у нас получается:

https://api.vk.com/method/wall.post?owner_id=-" + GroupID + "&message=" + strk + "&attachments=" + attach + "&access_token=" + VKToken + "&v=5.131

Где GroupID - ай ди группы, который мы сохранили в настройках, strk - строка с копирайтом, датой, описанием, attach - ссылка на фото/видео, VKToken - наш access_token, который мы получили после авторизации.


В общем-то, всё. Мы написали программу, которая будет раз в n-часов постить в нашу группу ВК данные от NASA =).


Ссылка на Github с полным кодом: https://github.com/ac973k/NASAImageVKPost

Ссылка на VK API: https://vk.com/dev/methods

Ссылка на группу: https://vk.com/public200170365


ВК как-то очень криво вставляет изображения, поэтому, в некоторых постах изображение вставляется, а в некоторых ссылка на картинку.

Исследователи космоса

19K постов48.8K подписчика

Правила сообщества

Какие тут могут быть правила, кроме правил установленных самим пикабу :)