diff --git a/app/parser.py b/app/parser.py index e28f48857124e1d410ee7ad30cc7c89485676d8e..e2bf8a65f580bda497f2607677665760ea18c9ff 100644 --- a/app/parser.py +++ b/app/parser.py @@ -2,6 +2,7 @@ from flask import Flask, request import os import logging import sys +import requests app = Flask(__name__) @@ -13,11 +14,11 @@ logging.basicConfig(stream=sys.stdout, # Diretórios onde os arquivos Markdown serão salvos dentro da pasta do hugo -DIR_O_C3SL = os.path.join(os.getcwd(), '../cms-c3sl/themes/c3sl/exampleSite/content') -DIR_POSTS = os.path.join(os.getcwd(), '../cms-c3sl/themes/c3sl/exampleSite/content/noticia') -DIR_PROJECTS = os.path.join(os.getcwd(), '../cms-c3sl/themes/c3sl/exampleSite/content/projetos') +DIR_O_C3SL = os.path.join(os.getcwd(), '../../cms-c3sl/themes/c3sl/exampleSite/content') +DIR_POSTS = os.path.join(os.getcwd(), '../../cms-c3sl/themes/c3sl/exampleSite/content/noticia') +DIR_PROJECTS = os.path.join(os.getcwd(), '../../cms-c3sl/themes/c3sl/exampleSite/content/projetos') -def create_or_update_post(post_id, data, event, content_type): +def create_or_update_noticia(noticia_id, data, event, content_type): if not data: logging.error(f"Code: 400" f"Status: JSON file not found\n") @@ -25,7 +26,7 @@ def create_or_update_post(post_id, data, event, content_type): return "JSON not found", 400 #Caso a requisição seja para criar/alterar o conteudo do "Quem Somos" - if content_type == 'o-c3sl': + if content_type == 'sobre': attributes = data.get('entry', {}) title = attributes.get('Titulo', '') content = attributes.get('Descricao', '') @@ -49,7 +50,7 @@ layout: 'legal' partner = attributes.get('Parceiro', '') content = attributes.get('Descricao', '') - file_name = f"{post_id}.md" + file_name = f"{noticia_id}.md" file_path = os.path.join(DIR_PROJECTS, file_name) edited_line = 'Edited: true\n' if event == 'entry.update' else '' @@ -65,22 +66,31 @@ status: "{status}" {content} """ ##Caso a requisição seja para criar/alterar uma notícia - elif content_type == 'post': + elif content_type == 'noticia': #Coleta os dados necessários para estar no arquivo JSON attributes = data.get('entry', {}) content = attributes.get('Descricao', '') published_at = attributes.get('Data', '') title = attributes.get('Titulo', '') - author = attributes.get('Autor', '') - summary = attributes.get('Sumario', '') + author = attributes.get('Autor', {}) + author_name = author.get ('name', '') + summary = attributes.get('Gravata', '') + + #Recebo o atributo da imagem enviado no JSON + image = attributes.get('Imagem', {}) + + #Recebo o ID da imagem para solicitar a requisição + image_id = image.get ('id', '') + image_url = f"http://localhost:1337/api/upload/files/{image_id}" - images = attributes.get('Imagem', []) - if images and isinstance(images, list): - image_url = images[0].get('url', '') - else: - image_url = '' + #Recebo o JSON requisitado pela URL com o ID da imagem + response = requests.get(image_url) + image_json = response.json () + + #Adquiro a URL para inserir markdown + image_url = image_json.get('url', '') - file_name = f"{post_id}.md" + file_name = f"{noticia_id}.md" file_path = os.path.join(DIR_POSTS, file_name) edited_line = 'Edited: true\n' if event == 'entry.update' else '' @@ -88,7 +98,7 @@ status: "{status}" content_markdown = f"""--- title: "{title}" date: "{published_at}" -author: "{author}" +author: "{author_name}" image: "http://localhost:1337{image_url}" summary: "{summary}" {edited_line}ShowReadingTime: true @@ -109,28 +119,28 @@ summary: "{summary}" return f"Error writing file{e}", 400 #Deleta algum tipo de conteudo enviado por requisição -def delete_post(post_id, content_type): +def delete_noticia(noticia_id, content_type): #Deletando uma notícia - if content_type == 'post': - file_name = f"{post_id}.md" + if content_type == 'noticia': + file_name = f"{noticia_id}.md" file_path = os.path.join(DIR_POSTS, file_name) if os.path.exists(file_path): os.remove(file_path) - logging.info(f"200 - DELETED: Post with ID number {post_id}") + logging.info(f"200 - DELETED: noticia with ID number {noticia_id}") else: - logging.error(f"400 - ERROR: Post with with ID number{post_id} not found for exclusion") + logging.error(f"400 - ERROR: noticia with with ID number{noticia_id} not found for exclusion") #Deletando um projeto elif content_type == 'projeto': - file_name = f"{post_id}.md" + file_name = f"{noticia_id}.md" file_path = os.path.join(DIR_PROJECTS, file_name) if os.path.exists(file_path): os.remove(file_path) - logging.info(f"200 - DELETED: Project with ID number {post_id}") + logging.info(f"200 - DELETED: Project with ID number {noticia_id}") else: - logging.error(f"200 - ERROR: File of project with ID number {post_id} not found for exclusion") + logging.error(f"200 - ERROR: File of project with ID number {noticia_id} not found for exclusion") else: logging.error(f"400 - ERROR: Content type: '{content_type}' not recognized for deletion") @@ -143,34 +153,34 @@ def run_script(): logging.info ("Data (JSON) received") #Do arquivo JSON, separa ID do conteudo, tipo do evento e o conteúdo - post_id = data.get('entry', {}).get('id') + noticia_id = data.get('entry', {}).get('id') event = data.get('event') content_type = data.get('model', '') # Obtém o tipo de conteúdo do Strapi - print(f"Event: {event}, ID: {post_id}, Type: {content_type}") + print(f"Event: {event}, ID: {noticia_id}, Type: {content_type}") - if not post_id: + if not noticia_id: logging.error(f"Code: 400" f"Status: ID not found in JSON: {data}") logging.exception("error occurred while processing the event") return "ID not found in JSON", 400 if event in ['entry.create']: - logging.info (f"File created in Strapi- ID: {post_id} - Type: {content_type}" + logging.info (f"File created in Strapi- ID: {noticia_id} - Type: {content_type}" f"\nData: {data}") - return f"File created in Strapi {post_id} - Type: {content_type}", 200 + return f"File created in Strapi {noticia_id} - Type: {content_type}", 200 elif event in ['entry.update', 'entry.publish']: - create_or_update_post(post_id, data, event, content_type) + create_or_update_noticia(noticia_id, data, event, content_type) - logging.info(f"\nFile created in Hugo- ID: {post_id} - Type: {content_type}" + logging.info(f"\nFile created in Hugo- ID: {noticia_id} - Type: {content_type}" f"\nData: {data}\nOperation completed successfully\n") return f"Operation completed successfully\n Data: {data}", 200 elif event in ['entry.delete', 'entry.unpublish']: - delete_post(post_id, content_type) - logging.info(f"File removed - ID: {post_id} - Type: {content_type}") - return f"File removed with ID {post_id}", 200 + delete_noticia(noticia_id, content_type) + logging.info(f"File removed - ID: {noticia_id} - Type: {content_type}") + return f"File removed with ID {noticia_id}", 200 else: logging.error(f"Code: 400\n"