Это мой первый вопрос. Я все еще новичок в python, поэтому может быть, я просто не знал, как правильно задать вопрос, и пропустил его в stackoverflow!
Что я хочу: автоматизировать проверку веб-сайта на наличие изменений. Я хочу, чтобы он отправлял мне уведомление каждый раз, когда есть изменение, и сообщал мне, что это за изменение.
Пока у меня есть 2 отдельных фрагмента кода, которые работают:
- An Вызов API, который возвращает список результатов в формате json. (в списке всегда 30 результатов)
- Инструмент сравнения, который проверяет, совпадают ли файлы json, и выдает разницу, если они не совпадают.
Если Я запускаю вызов API сам по себе, он прекрасно работает и сохраняет json результатов в файл.
Если я различаю каждый файл по одному, код сравнения сработает и выдаст изменения.
Я хочу, чтобы они работали вместе - в результате я могу настроить задание cron + уведомление и go о своей жизни, сэкономив время на том, чтобы не проверять эти сайты, если я не знаю, что произошло изменение.
Моя идея состоит в том, что я постоянно сверяю последнее вытягивание с последним, поэтому я сохраняю результаты в папке.
Пытаясь заставить разные части работать, я разделил старые результаты из новых результатов в папках, понимая, что я не уверен, как указать коду различать старый и новый.
Я хочу перебрать папки, найти соответствующий старый файл и n ew, сделайте каждый объект json, а затем сравните два.
Части того, что я пробовал, работают, но я застрял в том, как связать старый + новый файл вместе.
вот с чем я работаю:
new_files = []
old_files = []
docs = for_docs[0]
for unid in uid_list:
with open('%s_my_results' % uid, 'w+') as outfile:
json.dump(docs, outfile)
for newFiles in os.walk('FILEPATH/new_files'):
newfiles.append(newFiles)
unpack_newFiles = sorted(newfiles[2])
os.chdir('FILEPATH/old_files'):
for oldfiles in os.walk('FILEPATH/old_files'):
old_files.append(oldfiles[2])
for fname in unpack_oldFiles:
if fname.endswith('.json'):
with open(fname, mode='rb+') as oldFile:
try:
unpack_oldFiles = json.load(oldFile)
except json.decoder.JSONDecodeError:
continue
Это работает, но я думаю, что распакованный json объект по-прежнему представляет собой несортированный список json объектов. Так что я определенно запутался здесь и пытаюсь освободиться от узла.
причина, по которой я использовал сортировку, заключалась в надежде, что я могу просто заставить их соответствовать по порядку, потому что они всегда будут загружаться в одном и том же порядке . Я думаю, что обнаружил, что сортировка - не тот инструмент, но я определенно сбился с пути.
это код, который работает, чтобы различать мои json файлы:
with open('FILEPATH/old_file.json') as f:
old_docs = json.load(f)
with open('FILEPATH/new_file.json') as fc:
new_docs = json.load(fc)
# compare the two objects
thing = (old_docs==new_docs)
# log time and result
if thing is not True:
with open('logfile.txt', 'a+') as sys.stdout:
print(f'{date} this item was added: ')
print((DeepDiff(old_docs,new_docs)))
sys.stdout.close()
if thing is True:
with open('logfile.txt', 'a+') as sys.stdout:
print(f'{date} No Change')
sys.stdout.close()
I знаю, что я хочу, а именно:
#for file in list:
# if uid in file name matches:
# decode each file to json
# diff the two files
# spit out the result
С этой целью я начал писать варианты нижеприведенного, и мне определенно что-то не хватает. Я нашел fnmatch, но не знаю, как его использовать.
for fname in folder 1, folder2:
if UID-in-filename matches: # I do not know how to set this up
thing = (oldfile == newfile)
if thing is not True:
with open('logfile.txt', 'a+') as sys.stdout:
print(f'{date} {UID} this item was added:')
print((DeepDiff(oldfile, newfile)
print(no change)
if thing is True:
with open('logfile.txt', 'a+') as sys.stdout:
print(f'{date} {UID} no change')
sys.stdout.close()
Надеюсь, я выполнил свой первый запрос. Всем спасибо!