import tkinter as tk
from tkinter import messagebox
from newspaper import Article
from sklearn.feature_extraction.text import TfidfVectorizer
import requests
NEWS_API_KEY = 'your_newsapi_key_here' # Replace with your NewsAPI key
# ---------- News Verifier Logic ----------
def extract_keywords(text, top_n=10):
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform([text])
keywords = sorted(zip(vectorizer.get_feature_names_out(), X.toarray()[0]), key=lambda x: -x[1])
return [k[0] for k in keywords[:top_n]]
def fetch_related_news(keywords):
query = ' OR '.join(keywords[:3]) # Limit to top 3
url = f'https://newsapi.org/v2/everything?q={query}&language=en&apiKey={NEWS_API_KEY}'
res = requests.get(url)
if res.status_code != 200:
return []
return [a['title'] + ' ' + a['description'] for a in res.json().get('articles', [])]
def calculate_authenticity(article_keywords, related_news):
related_text = ' '.join(related_news)
matches = [kw for kw in article_keywords if kw.lower() in related_text.lower()]
return int((len(matches) / len(article_keywords)) * 100) if article_keywords else 0
# ---------- GUI ----------
class NewsCheckerApp:
def __init__(self, root):
self.root = root
self.root.title("šµ️ News Authenticity Checker")
tk.Label(root, text="Paste News Article URL:").pack()
self.url_entry = tk.Entry(root, width=60)
self.url_entry.pack(pady=5)
tk.Button(root, text="š Check Authenticity", command=self.check_news).pack(pady=10)
self.result_label = tk.Label(root, text="", font=("Arial", 12, "bold"))
self.result_label.pack(pady=20)
def check_news(self):
url = self.url_entry.get().strip()
if not url:
messagebox.showerror("Error", "Please enter a news URL.")
return
try:
article = Article(url)
article.download()
article.parse()
content = article.text
article_keywords = extract_keywords(content)
related_news = fetch_related_news(article_keywords)
score = calculate_authenticity(article_keywords, related_news)
result = f"✅ Authenticity Score: {score}%"
if score < 40:
result += "\n⚠️ This article may not be widely reported."
else:
result += "\nš Seems consistent with other sources."
self.result_label.config(text=result)
except Exception as e:
messagebox.showerror("Error", str(e))
# ---------- Run App ----------
if __name__ == "__main__":
root = tk.Tk()
app = NewsCheckerApp(root)
root.mainloop()
No comments:
Post a Comment