31

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

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

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


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


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

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


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


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

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


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

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

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

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

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

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


Интерфейс для настроек делаем по подобию, но, если что, ссылку на 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 файл с таким содержимым:

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

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

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

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

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


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

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

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


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

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

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


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

Теперь, перейдем к загрузке полученных данных в группу. Нам понадобится метод 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


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

Показать полностью 9
3

Продолжение поста «А вы знали что у NASA есть API?»

Ответ на коммент: #comment_227062269


По факту все также:


1 - Создаете бота, как создать телеграм бота почитайте тут

2 - Создайте телеграм канал, и добавьте ранее созданного бота в этот канал как администратора

3 - Теперь вы сможете отправлять в свой канал сообщения и не только посредством создания POST запроса, например вот с использованием Python, например ниже отправка картинки с подписью:

Где:

AUTH_TOKEN = Токен бота который вы ранее создали
CHANNEL_NAME = Имя канала, например @my_channel
CAPTION = Текстовая подпись к фото
URL = Ссылка на фото которое отправить в телегу

Естественно можете использовать хоть JavaScript, про остальные методы для телеги можно почитать тут (отправлять можно и текст и не только).


Но так каждый может найти ваш канал и это не очень хорошо, как решить это? делаем так:


1 - выполняем такую команду:

curl https://api.telegram.org/bot<AUTH_TOKEN>/sendMessage\?...

но лучше перед этим прочитайте что такое curl и установите его (или юзайте другой клиент)


эта команда вернет что-то в этом роде:

Сохраните цифры после id (в данном случае -1001005582487)


теперь можете закрывать доступ к каналу (сделать его приватным)

и при отправке сообщений вместо CHANNEL_NAME (@my_channel) указывать -1001005582487

так оно в ваш приватный канал будет отправлять то, что вы хотите.

Показать полностью 1
420

А вы знали что у NASA есть API?

Оказывается NASA довольно щедрая организация, и бесплатно делится результатами своей работы, так например вы обращаясь по определенным конечным точкам API можете получить некоторую информацию, например фото Земли, и т д, со всеми вариантами можно ознакомится на главной странице, достаточно нажать кнопку Browse APIs, и там весь список😁


Для использования API вам нужен специальный API ключ, который вы получите после заполнения короткой анкеты:

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


1 - Создаете бота, как создать телеграм бота почитайте тут

2 - Создайте телеграм канал, и добавьте ранее созданного бота в этот канал как администратора

3 - Теперь вы сможете отправлять в свой канал сообщения посредством создания POST запроса, например вот с использованием Python, например ниже отправка картинки с подписью:

Где:

AUTH_TOKEN = Токен бота который вы ранее создали
CHANNEL_NAME = Имя канала, например @my_channel
CAPTION = Текстовая подпись к фото
URL = Ссылка на фото которое отправить в телегу

Естественно можете использовать хоть JavaScript, про остальные методы для телеги можно почитать тут.


Теперь про получения данных из NASA, там все просто, делаете GET запрос на то API которое вы выбрали (на том же сайте предоставляются линки, примерно в таком виде:

https://api.nasa.gov/planetary/earth/imagery?lon=100.75&... , вот DEMO_KEY нужно заменить на от ключ, который вы от NASA получили после заполенния анкеты)


Все, готово😁


То что я сделал, это канал, куда раз в сутки будет публиковаться красивое фото космоса, с описанием и автоматическим переводом на русский язык (после нажатия на ссылку под каждым постом идет переход на telegraph где описание доступно в дух языках, оригинала и русском) + добавлена возможность скачать эту картинку в HD качестве, ссылка на канал -> https://t.me/daily_nasa


Спасибо за внимание😁

Показать полностью 2
Отличная работа, все прочитано!