Скрейпинг криптовалютных новостей. Часть 2

С чего начиналось

В прошлой статье мы написали скрипт, забирающий заголовки новостей об Ethereum со страницы Яндекс.Новостей:

Лень, как говорится, двигатель прогресса. Не открывать же каждый раз терминал вручную и запускать скрипт, чтоб увидеть результат?! Пришло время три крайних глагола автоматизировать (в рамках Линукса). Получать сообщение с новостной выжимкой будем ВКонтакте.

API VK.com

Настало время познакомиться с API Вконтакте! Он дружелюбен и воистину функционален (в отличие от своего Инстаграмовского собрата). Чтоб им пользоваться нужно получить токен пользователя, а для этого требуется зарегистрировать свое приложение. Приступим:
Логинимся в ВК и переходим в раздел “Разработчикам”:

Далее идем в “Мои приложения”:

Нажимаем “Создать приложение”:

Придумываем название, платформу оставляем ‘Standalone’ (для этого действия понадобится номер мобильного, подключенный к аккаунту для подтверждения по СМС):

Идем в настройки созданного приложения и записываем идентификационные ключи:

Следующий шаг - получение токена пользователя (еще бывают токены сообществ) от чьего имени будут производиться действия скрипта, а именно отсылка сообщения в беседу. Документация API ВК гласит:

То есть необходимо сформировать URL и вручную перейти по нему. Вспоминаем ID нашего приложения:
https://oauth.vk.com/authorize?client_id=6831592&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=messages,offline&response_type=token&v=5.73
Заменяем значение client_id на свой и переходим по этой ссылке.
Авторизуемся, если сессия ВК не активна, и подтверждаем права приложения:

После подтверждения редиректимся на URL, содержащий наш токен:

Забираем токен из URL’а и сохраняем
https://oauth.vk.com/blank.html#access_token=0f3570a999364f76c62ffc2b41007bc98e75609e25fa8272systop422932087442a8616cf614d06785a11&expires_in=0&user_id=4107877

Это будет примерно такая строка:
0f3570a999364f76c62ffc2b41007bc98e75609e25fa8272systop422932087442a8616cf614d06785a11

Итак, чтоб отправить сообщение ВКонтакте посредством API нужно отправить следующий GET-запрос (для проверки достаточно перейти по этой сформированной ссылке в браузере):

https://api.vk.com/method/messages.send?access_token=0f3570a999364f76c62ffc2b41007bc98e75609e25fa8272systop422932087442a8616cf614d06785a11&chat_id=162&message=test&v=5.73

Рассмотрим параметры GET-запроса:
  • адрес - https://api.vk.com/method/messages.send
  • access_token - полученный токен
  • chat_id - идентификатор беседы ВКонтакте:
  • message - текст сообщения
  • v - актуальная версия API (параметр необязателен, но улучше его указывать, чтоб в будущем не наблюдать непредсказуемых ситуаций)
Распишем отправку сообщения в Ruby-скрипте из предыдущей статьи:
require 'phantomjs' 
require 'net/http'

news = Phantomjs.run("file.js") 
puts news

token = "0f3570a999364f76c92ffc2b41007bc98e75609e25fa8272d7f507422932087442a8616cf614d06785a11" 
method = "messages.send" 
chat_id = "162" 
version = "5.73"

uri = URI("https://api.vk.com/method/#{method}") 
params = { access_token: token, chat_id: chat_id, message: news, v: version } 
uri.query = URI.encode_www_form(params)

res = Net::HTTP.get_response(uri) 
puts res.body

Результат выполнения ruby script.rb:

Возвращенный идентификатор сообщения говорит о том, что запрос прошел успешно - можно проверить свои сообщения=)


Запуск по расписанию

Поможет в этом Cron - это стандартная утилита в Линуксе, позволяющая запрограммировать выполнение каких либо действий системой по расписанию (в нашем случае - запуск скрипта).
В прошлой статье мы установили гем whenever для удобной работы с cron’ом из ruby-скрипта. Настроим его работу:
Находясь в папке проекта выполним команду  wheneverize .  (с точкой)
В созданном файле schedule.rb пропишем (заменяем пути к папке со скриптом):
set :output, "~/systop/blog/scraping_news/part_2/script/cron_log.log" 
set :chronic_options, hours24: true

every 1.day, at: '18:42' do 
 command "cd /home/xander/systop/blog/scraping_news/part_2/script && ruby script.rb" 
end 

Сохраняем и выполняем команду whenever --update-crontab - проверка и занесение нового расписания в cron.
Чтобы посмотреть все расписания в cron’е: crontab -l
Очистить cron: crontab -r
Теперь каждый день в 18:42 будем получать порцию свежих обобщенных новостей об Эфире!
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.