Я пытаюсь создать HTTP-монитор, чтобы проверить, изменилось ли содержимое на странице с момента последнего посещения пользователем, используя etags
, полученное из заголовков ответов. Чтобы попытаться решить эту проблему, я создал следующий класс:
import json
import requests
class ValidateEtag():
E_TAG = {}
UPDATED_E_TAGS = {}
def __init__(self, url):
self.url = url
self.response = self.load_match_data(self.url)
if not self.url in ValidateEtag.E_TAG:
ValidateEtag.E_TAG[self.url] = self.response['etag']
elif self.url in ValidateEtag.E_TAG:
if not self.assert_etag(ValidateEtag.E_TAG[self.url], self.response['etag']):
ValidateEtag.E_TAG[self.url] = self.response['etag']
UPDATED_E_TAGS[self.url] = self.response['etag']
print('FOUND DIFF')
else:
raise(KeyError, 'etag not found')
def load_match_data(self, url):
"""Retreives Ids for different pages on the API"""
headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Origin': 'https://www.premierleague.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}
params = (('pageSize', '100'),)
# request to obtain the team info
try:
with requests.Session() as s:
response = s.get(url, headers=headers, params=params)
return response.headers
except Exception as e:
print(e, 'Something went wrong with the request')
return {}
def assert_etag(self, old_etag, new_etag):
if old_etag == new_etag:
print('Same as old etag')
return True
else:
print('New etag!')
return False
if __name__ == '__main__':
ids = [46895, 46875, 46896, 46897, 46905, 46906, 46898, 46907, 46908, 46941]
for i in ids:
url = fixture_info_singel(i)
ValidateEtag(url)
Проблема в том, что, поскольку состояние переменной класса E_TAG
не сохраняется между запусками, решение бесполезно. Есть ли способ кэшировать значения переменных класса между запусками? Если нет, то как можно решить указанную выше проблему?