Синтаксический анализ исходного кода API, но база данных JSON не обновляется (Cache?) - PullRequest
0 голосов
/ 12 ноября 2018

Я кодировал файл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...