From 15c09238a4b490301408df22c79a258346c76b84 Mon Sep 17 00:00:00 2001 From: Maria-Aidarus Date: Wed, 22 Nov 2023 14:41:01 +0300 Subject: [PATCH 1/2] Created the netlify.toml file and the file to handle the metadata --- netlify.toml | 2 + netlify/functions/handleMetadata.js | 82 +++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 netlify.toml create mode 100644 netlify/functions/handleMetadata.js diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 0000000..d53d827 --- /dev/null +++ b/netlify.toml @@ -0,0 +1,2 @@ +[build] + functions = "netlify/functions/" \ No newline at end of file diff --git a/netlify/functions/handleMetadata.js b/netlify/functions/handleMetadata.js new file mode 100644 index 0000000..b8f503b --- /dev/null +++ b/netlify/functions/handleMetadata.js @@ -0,0 +1,82 @@ +// Function to fetch content from URL using a web scraping service +async function fetchContentFromURL(url) { + // Implement logic to fetch content from the URL using a web scraping service + // Return the extracted content + // Placeholder code + const content = "

This is a sample content fetched from the URL

"; + return content; + } + + // Function to simplify the content for GPT analysis + function simplifyContent(content) { + // Implement logic to simplify the content for GPT analysis + // Remove unnecessary elements, clean HTML tags, format content, etc. + // Placeholder code + const simplifiedContent = "Simplified content suitable for GPT analysis"; + return simplifiedContent; + } + + // Function to perform GPT analysis for media type and topics using Mistral-7b via OpenRouter + async function performGPTAnalysis(content) { + // Implement logic to send content to Mistral-7b via OpenRouter for GPT analysis + // Send content and receive GPT analysis response + // Placeholder code + const inferredMediaType = "article"; + const extractedTopics = ["topic1", "topic2"]; + return { inferredMediaType, extractedTopics }; + } + + // Function to map inferred values to predefined formats and topics + function mapInferredValues(mediaType, topics) { + // Implement logic to map inferred media type and topics to predefined formats and topics + // Match inferred values with predefined taxonomy + // Placeholder code + const predefinedMediaType = "Article"; + const predefinedTopics = ["Topic 1", "Topic 2"]; + return { predefinedMediaType, predefinedTopics }; + } + + // Function to format the response + function formatResponse(predefinedMediaType, predefinedTopics) { + // Implement logic to format the extracted metadata into the desired response structure + // Construct the response object + // Placeholder code + const response = { + mediaType: predefinedMediaType, + topics: predefinedTopics, + // Other metadata fields if needed + }; + return response; + } + + export async function handler(event) { + try { + const { url, apiKey } = JSON.parse(event.body); + + // Step 1: Fetch content from the URL using web scraping service + const fetchedContent = await fetchContentFromURL(url); + + // Step 2: Simplify the fetched content for GPT analysis + const simplifiedContent = simplifyContent(fetchedContent); + + // Step 3: Perform GPT analysis for media type and topics + const { inferredMediaType, extractedTopics } = await performGPTAnalysis(simplifiedContent); + + // Step 4: Map inferred values to predefined formats and topics + const { predefinedMediaType, predefinedTopics } = mapInferredValues(inferredMediaType, extractedTopics); + + // Step 5: Format the response + const formattedResponse = formatResponse(predefinedMediaType, predefinedTopics); + + // Return the formatted response + return { + statusCode: 200, + body: JSON.stringify(formattedResponse), + }; + } catch (error) { + return { + statusCode: 500, + body: JSON.stringify({ error: 'Something went wrong' }), + }; + } + } \ No newline at end of file From ecc7a01f1432c6dfba1cdaebe13eba2b52895d1a Mon Sep 17 00:00:00 2001 From: Maria-Aidarus Date: Wed, 22 Nov 2023 15:33:41 +0300 Subject: [PATCH 2/2] Updated the handleMetadata.js --- netlify/functions/handleMetadata.js | 109 +++++++++++++++------------- 1 file changed, 59 insertions(+), 50 deletions(-) diff --git a/netlify/functions/handleMetadata.js b/netlify/functions/handleMetadata.js index b8f503b..14fdbae 100644 --- a/netlify/functions/handleMetadata.js +++ b/netlify/functions/handleMetadata.js @@ -1,82 +1,91 @@ -// Function to fetch content from URL using a web scraping service +// Placeholder function to fetch content from URL using a web scraping service async function fetchContentFromURL(url) { // Implement logic to fetch content from the URL using a web scraping service // Return the extracted content // Placeholder code const content = "

This is a sample content fetched from the URL

"; return content; - } - - // Function to simplify the content for GPT analysis - function simplifyContent(content) { +} + +// Placeholder function to simplify the content for GPT analysis +function simplifyContent(content) { // Implement logic to simplify the content for GPT analysis // Remove unnecessary elements, clean HTML tags, format content, etc. // Placeholder code const simplifiedContent = "Simplified content suitable for GPT analysis"; return simplifiedContent; - } - - // Function to perform GPT analysis for media type and topics using Mistral-7b via OpenRouter - async function performGPTAnalysis(content) { +} + +// Placeholder function to perform GPT analysis for media type and topics using Mistral-7b via OpenRouter +async function performGPTAnalysis(content) { // Implement logic to send content to Mistral-7b via OpenRouter for GPT analysis // Send content and receive GPT analysis response // Placeholder code const inferredMediaType = "article"; const extractedTopics = ["topic1", "topic2"]; return { inferredMediaType, extractedTopics }; - } - - // Function to map inferred values to predefined formats and topics - function mapInferredValues(mediaType, topics) { +} + +// Placeholder function to map inferred values to predefined formats and topics +function mapInferredValues(mediaType, topics) { // Implement logic to map inferred media type and topics to predefined formats and topics // Match inferred values with predefined taxonomy // Placeholder code const predefinedMediaType = "Article"; const predefinedTopics = ["Topic 1", "Topic 2"]; return { predefinedMediaType, predefinedTopics }; - } - - // Function to format the response - function formatResponse(predefinedMediaType, predefinedTopics) { +} + +// Placeholder function to format the response +function formatResponse(predefinedMediaType, predefinedTopics) { // Implement logic to format the extracted metadata into the desired response structure // Construct the response object // Placeholder code const response = { - mediaType: predefinedMediaType, - topics: predefinedTopics, - // Other metadata fields if needed + mediaType: predefinedMediaType, + topics: predefinedTopics, + // Other metadata fields if needed }; return response; - } - - export async function handler(event) { +} + +export async function handler(event) { try { - const { url, apiKey } = JSON.parse(event.body); - - // Step 1: Fetch content from the URL using web scraping service - const fetchedContent = await fetchContentFromURL(url); - - // Step 2: Simplify the fetched content for GPT analysis - const simplifiedContent = simplifyContent(fetchedContent); - - // Step 3: Perform GPT analysis for media type and topics - const { inferredMediaType, extractedTopics } = await performGPTAnalysis(simplifiedContent); - - // Step 4: Map inferred values to predefined formats and topics - const { predefinedMediaType, predefinedTopics } = mapInferredValues(inferredMediaType, extractedTopics); - - // Step 5: Format the response - const formattedResponse = formatResponse(predefinedMediaType, predefinedTopics); - - // Return the formatted response - return { - statusCode: 200, - body: JSON.stringify(formattedResponse), - }; + // Extract URL and API Key from the request body + const { url, apiKey } = JSON.parse(event.body); + + // Validate if URL and API Key are present + if (!url || !apiKey) { + return { + statusCode: 400, + body: JSON.stringify({ error: 'URL and API Key are required' }), + }; + } + + // Step 1: Fetch content from the URL using a web scraping service + const fetchedContent = await fetchContentFromURL(url); + + // Step 2: Simplify the fetched content for GPT analysis + const simplifiedContent = simplifyContent(fetchedContent); + + // Step 3: Perform GPT analysis for media type and topics + const { inferredMediaType, extractedTopics } = await performGPTAnalysis(simplifiedContent); + + // Step 4: Map inferred values to predefined formats and topics + const { predefinedMediaType, predefinedTopics } = mapInferredValues(inferredMediaType, extractedTopics); + + // Step 5: Format the response + const formattedResponse = formatResponse(predefinedMediaType, predefinedTopics); + + // Return the formatted response + return { + statusCode: 200, + body: JSON.stringify(formattedResponse), + }; } catch (error) { - return { - statusCode: 500, - body: JSON.stringify({ error: 'Something went wrong' }), - }; + return { + statusCode: 500, + body: JSON.stringify({ error: 'Something went wrong' }), + }; } - } \ No newline at end of file +}