# ottieni tag title da gpt
#################################
#import openai
from dotenv import load_dotenv
import os
load_dotenv() # Carica le variabili d'ambiente dal file .env
from openai import OpenAI
client = OpenAI(api_key=os.environ['openai.api_key'])
# setup richiesta gtp
merged_df8b = merged_df8.copy()
# creo dizionario delle risposte di gpt per evitare chiamate doppie
gpt_responses = {}
# Inizializza un contatore per il numero totale di token
total_tokens_used = 0
# Inizializza un contatore per le chiamate API effettive
actual_api_calls = 0
def improve_tag_title(row, gpt_responses):
global total_tokens_used , actual_api_calls
top_5_queries = row['top_5_queries']
# Ottieni il tag title e l'URL dalla riga corrente
tag_title = row["tag title"]
page_url = row["page"]
# Controllo se tag_title è presente e non vuoto
if not tag_title:
return None
# Controllo per saltare la chiamata GPT quando comparison è 'greater' o check è 'Ok'
#if row["comparison"] == "greater" or "Missing" not in row["check"]:
# #return row["tag title"]
# return None
# Verifica se l'URL è già stato processato
if page_url in gpt_responses:
return gpt_responses[page_url] # Usa il tag title migliorato se disponibile
prompt = (
f"Sto cercando di migliorare il tag title per una pagina web. Il tag title attuale è: {tag_title}.\n"
f"Le parole chiave più importanti e pertinenti alla pagina sono: {top_5_queries}.\n"
f"Crea un nuovo tag title in {language} che incorpori queste parole chiave in modo naturale e coinvolgente. Il tag title dovrebbe:\n"
f"1) avere al massimo 65 caratteri, spazi inclusi. Assicurati che la tua risposta non superi questo limite.\n"
f"2) non includere il nome del brand.\n"
f"3) non utilizzare lettere maiuscole inutili, simboli, apici o virgolette.\n"
f"4) essere presentato da solo, senza alcuna spiegazione o contenuto aggiuntivo.\n"
f"Per favore, segui scrupolosamente tutte queste regole nella tua risposta. Se non sei sicuro, conferma che hai seguito tutte le regole nel tuo messaggio."
)
try:
# Modifica la struttura dell'input per utilizzare il formato chat
#response = openai.ChatCompletion.create(
#response = client.completions.create(
#response = openai.chat.completions.create(
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "Comportati come se fossi un SEO copywriter professionista."},
{"role": "user", "content": prompt}
],
max_tokens=1000,
temperature=0.4,
top_p=1,
frequency_penalty=0.1,
presence_penalty=0.1
)
# Aggiungi il numero di token utilizzati per questa risposta al totale
total_tokens_used += response['usage']['total_tokens']
actual_api_calls += 1 # Incrementa il contatore per le chiamate API effettive
# eccezioni errori gpt
except Exception as e:
print(f"Error occured while calling OpenAI API: {e}")
return None
#improved_tag_title = response.model_dump(exclude_unset=True)
#improved_tag_title = response.choices[0].message.content.strip().lower()
improved_tag_title = response.choices[0].message.content
#improved_tag_title = response.choices[0].message['content'].strip().lower()
#gpt_responses[tag_title] = improved_tag_title
# modifica per usare come chiave di confronto l'URL
gpt_responses[page_url] = improved_tag_title
# SLEEP
time.sleep(1)
return improved_tag_title
# chiamate API gpt
# Dopo la definizione della funzione, esegui il loop per migliorare i tag title
merged_df8b.reset_index(drop=True, inplace=True)
processed_rows = 0
for index, row in merged_df8b.iterrows():
# Passa la riga corrente e il dizionario delle risposte a improve_tag_title
new_tag_title = improve_tag_title(row, gpt_responses)
# Assegna il nuovo tag title alla riga corrente
merged_df8b.at[index, "new tag title"] = new_tag_title
# Aggiorna il dizionario gpt_responses con la risposta ricevuta
gpt_responses[row["page"]] = new_tag_title
# Stampa il progresso
processed_rows += 1 # Incrementa il contatore di righe processate
print(f"\rProcessed row {processed_rows}/{len(merged_df8b)} | {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} | {total_tokens_used} tokens.", end="", flush=True)
# Aggiungi qui il nuovo blocco di codice per assicurarti di aggiornare tutte le righe
for index, row in merged_df8b.iterrows():
page_url = row["page"]
if page_url in gpt_responses:
merged_df8b.at[index, "new tag title"] = gpt_responses[page_url]
# Stampa il totale dei token utilizzati
print(f"\nTotal tokens used: {total_tokens_used}")
print(f"Actual API calls made: {actual_api_calls}")
# https://platform.openai.com/account/usage
error:
Error occured while calling OpenAI API: ‘ChatCompletion’ object is not subscriptable
Can’t figure out the solution. Thanks for any help.