import newspaper
import os
from datetime import datetime

# Lista predefinită de site-uri de știri
default_sites = {
    "Engleză": [
        "https://www.goodnewsnetwork.org",  # Știri pozitive
        "https://www.bbc.com/news",          # Știri globale
        "https://www.reuters.com",           # Știri neutre
        "https://www.npr.org",               # Știri aprofundate
        "https://www.theguardian.com",       # Știri și investigații
        "https://www.aljazeera.com",         # Perspectivă globală
        "https://www.ap.org",                # Știri brute
        "https://www.cbsnews.com",           # Știri generale
        "https://time.com",                  # Analize și știri
        "https://www.nytimes.com",           # Jurnalism de top
        "https://www.telegraph.co.uk",       # Știri britanice
        "https://www.washingtonpost.com"     # Știri din SUA
    ],
    "Română": [
        "https://www.digi24.ro",             # Știri generale RO
        "https://www.hotnews.ro",            # Știri și analize RO
        "https://stirileprotv.ro"            # Știri TV RO
    ]
}

# Directorul pentru salvarea articolelor
save_dir = 'keyword_articles'
os.makedirs(save_dir, exist_ok=True)

# Funcție pentru verificarea cuvintelor-cheie în text
def contains_keywords(text, keywords):
    text_lower = text.lower()
    return any(keyword.lower() in text_lower for keyword in keywords)

# Funcție pentru descărcarea articolelor de pe un site
def download_articles_from_site(site_url, keywords):
    try:
        # Construiește obiectul ziar din URL-ul site-ului
        paper = newspaper.build(site_url, memoize_articles=False)
        print(f"Descărcare articole de pe {site_url}... Găsite {len(paper.articles)} articole.")

        for article in paper.articles:
            try:
                # Descarcă și parsează articolul
                article.download()
                article.parse()

                # Extrage titlul și textul complet
                title = article.title if article.title else 'Fără titlu'
                full_text = article.text if article.text else 'Fără conținut'
                link = article.url

                # Verifică dacă articolul conține cuvintele-cheie
                if contains_keywords(full_text, keywords):
                    # Creează un nume de fișier unic bazat pe titlu și dată
                    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
                    filename = f"{title[:50].replace(' ', '_').replace('/', '_')}_{timestamp}.txt"
                    filepath = os.path.join(save_dir, filename)

                    # Salvează articolul ca fișier text
                    with open(filepath, 'w', encoding='utf-8') as f:
                        f.write(f"Titlu: {title}\n\nLink: {link}\n\nConținut complet:\n{full_text}")
                    print(f"Salvat: {filepath}")
                else:
                    print(f"Articol ignorat (fără cuvinte-cheie): {link}")
            except Exception as e:
                print(f"Eroare la descărcarea articolului {article.url}: {e}")
    except Exception as e:
        print(f"Eroare la procesarea site-ului {site_url}: {e}")

# Afișează lista de site-uri predefinite
print("Site-uri de știri disponibile:")
for lang, sites in default_sites.items():
    print(f"\n{lang}:")
    for i, site in enumerate(sites, 1):
        print(f"{i}. {site}")

# Cere utilizatorului să introducă site-urile suplimentare
print("\nIntrodu URL-urile suplimentare (opțional). Apasă Enter fără text pentru a continua.")
sites_to_process = default_sites["Engleză"] + default_sites["Română"]
while True:
    site_url = input("Introdu un URL (sau Enter pentru a trece la cuvinte-cheie): ").strip()
    if not site_url:
        break
    if not site_url.startswith('http'):
        site_url = 'https://' + site_url
    sites_to_process.append(site_url)

# Cere cuvintele-cheie
keywords = input("Introdu cuvintele-cheie separate prin virgulă (ex. technology, health): ").split(',')
keywords = [kw.strip() for kw in keywords if kw.strip()]  # Elimină spațiile și cuvintele goale
if not keywords:
    print("Nu ai introdus cuvinte-cheie. Toate articolele vor fi descărcate.")
    keywords = [""]  # Dacă nu sunt cuvinte-cheie, descarcă tot

# Descarcă articolele de pe fiecare site
for site in sites_to_process:
    download_articles_from_site(site, keywords)

print(f"Descărcarea s-a încheiat! Articolele sunt salvate în directorul '{save_dir}'.")
