県別のコロナのHPが更新された時だけLINE通知する仕組みを作っています。
ターミナルより
Ruby
1ruby korona_check.rb
と実行した場合、ページが更新されていない時は通知されませんが、
cronで実行するとページが更新されていなくても通知が来ます。
※ifの判定結果が正しく作動していないようです
対応方が分かればご教示ください。
ruby
1#!/usr/bin/env ruby 2#-*- coding: utf-8 -*- 3 4require "open-uri" 5require "nokogiri" 6require 'net/http' # LINE 7require 'uri' # LINE 8 9url = "https://www.pref.shizuoka.jp/kinkyu/covid-19-keikailevel.html" 10charset = nil 11 12# open-uriにてdom読み込み 13html = open(url) do |f| 14 charset = f.charset 15 f.read 16end 17 18# 読み込んだものから、Nokogiri でスクレイピング 19contents = Nokogiri::HTML.parse(html,nil,charset) 20list = [] 21contents.xpath('//h1').each do |tr| 22 tr_content = tr.content 23 list.push(tr_content) 24end 25 26# textファイル(設定ファイル)の読み込み 27f = File.open("/Users/ユーザー名/Desktop/korona/config.txt") 28s = f.read 29 30# ファイルの書き込み 31def txt_write(content) 32 File.open("config.txt", mode = "w") {|f| 33 f.write(content) 34 } 35end 36 37# ラインのメッセージ送信 38 39class LineNotify 40 TOKEN = 'トークンが入ります'.freeze 41 URL = 'https://notify-api.line.me/api/notify'.freeze 42 43 attr_reader :message 44 45 def self.send(message) 46 new(message).send 47 end 48 49 def initialize(message) 50 @message = message 51 end 52 53 def send 54 Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |https| 55 https.request(request) 56 end 57 end 58 59 private 60 61 def request 62 request = Net::HTTP::Post.new(uri) 63 request['Authorization'] = "Bearer #{TOKEN}" 64 request.set_form_data(message: message) 65 request 66 end 67 68 def uri 69 URI.parse(URL) 70 end 71end 72 73# 更新日が前回と同じ(txtファイルの中身)と違う場合のみ通知 + txtファイルの更新日を上書き 74if list[1] != s 75 LineNotify.send("\n" + "【更新】#{list[1]}" + "\n" + "#{url}") 76 txt_write(list[1]) 77end
cron
1*/1 * * * * ruby /Users/ユーザー名/desktop/korona/korona_check.rb 2# 今回は仮に1分間隔としています
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。