Я кодировал файл rake для мониторинга и получения данных с веб-сайта, на котором эти данные находятся в формате JSON. Ниже приведен фактический источник этих данных
https://www.thegazette.co.uk/company/07877158/filings/data.json
Файл рейка отслеживает "total_count" в указанном выше json, и при его изменении рейк будет извлекать и сохранять любую новую информацию
Проблема, с которой я столкнулся, заключается в том, что после первого просмотра этой страницы она просто не обновляется. В качестве реального текущего примера приведенный выше источник json был обновлен за одну ночь двумя новыми записями, и, следовательно, «total_count» увеличился с 40 до 42, но мой рейк все еще говорит мне, что есть 40 (и впоследствии ничего не делает, потому что он думает, что ничего не изменилось)
Я думаю, что это проблема с кешем, но мой кеш рельсов очистился безуспешно. Это странно, потому что у меня нет этой проблемы с другими подобными граблями, которые я создал для других сайтов
Мой код рейка выглядит следующим образом
desc "Monitor"
task :S_01 => :environment do
require 'rubygems'
require 'open-uri'
require 'openssl'
def g_api(url)
uri = URI.parse(url)
request = Net::HTTP::Get.new(uri)
request.content_type = "application/json"
req_options = {
use_ssl: uri.scheme == "https",
}
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
data = JSON.parse(response.body)
end
company = CompanyBorrower.where(id: 43)
company.each do |f|
begin
#scrape source
tg_fh_url = "https://www.thegazette.co.uk/company/"+f.ch+"/filings/data.json"
gf_scrape = g_api(tg_fh_url)
ch_s = gf_scrape.fetch('total_count', nil) #scrape
puts ch_s
if not f.filing_count == ch_s # has teh cound change - if not, skip
f.update_attributes(cwdetail1: ch_s, filing_update: ch_fh3)
gf_scrape['items'].first(3).each_with_index do |f1, index|
#fetch & save data here
end
end
rescue
next
end
end
end
EDIT
Добавил следующее в код, но получил ошибку
response["Cache-Control: no-cache"]
NoMethodError: неопределенный метод `fetch 'для nil: NilClass
def g_api(url)
uri = URI.parse(url)
request = Net::HTTP::Get.new(uri)
request.content_type = "application/json"
req_options = {
use_ssl: uri.scheme == "https",
}
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
data = JSON.parse(response.body)
response["Cache-Control: no-cache"]
end