Build your own news aggregator

Building a news aggregator from scratch! That's a great project. Here's a step-by-step guide to help you get started:

Requirements

Step 1: Set up the project structure

Create a new directory for your project and initialize a new Python project using pip:

mkdir news-aggregator
cd news-aggregator
pip init

Step 2: Choose a news API

Select a news API that provides a feed of news articles. Some popular options include:

For this example, we'll use the NewsAPI.

Step 3: Set up the API connection

Create a new file called api.py and add the following code to connect to the NewsAPI:

import requests

API_KEY = "YOUR_API_KEY_HERE"
API_URL = "https://newsapi.org/v2/top-headlines"

def get_news(category, country):
    params = {
        "country": country,
        "category": category,
        "apiKey": API_KEY
    }
    response = requests.get(API_URL, params=params)
    return response.json()

Replace YOUR_API_KEY_HERE with your actual NewsAPI key.

Step 4: Create a database

Create a new file called database.py and add the following code to create a SQLite database:

import sqlite3

conn = sqlite3.connect("news.db")
cursor = conn.cursor()

cursor.execute("""
    CREATE TABLE IF NOT EXISTS news (
        id INTEGER PRIMARY KEY,
        title TEXT,
        description TEXT,
        url TEXT,
        published_at TEXT
    );
""")

conn.commit()
conn.close()

This creates a table called news with columns for title, description, URL, and published date.

Step 5: Write the news aggregator

Create a new file called aggregator.py and add the following code to fetch news articles from the API and store them in the database:

import api
import database

def fetch_news(category, country):
    news = api.get_news(category, country)
    for article in news["articles"]:
        title = article["title"]
        description = article["description"]
        url = article["url"]
        published_at = article["publishedAt"]
        database.insert_news(title, description, url, published_at)

fetch_news("technology", "us")

This code fetches news articles from the API, extracts relevant information, and stores it in the database.

Step 6: Create a web interface (optional)

If you want to create a web interface for your news aggregator, you can use a frontend framework like Flask or Django. Create a new file called app.py and add the following code:

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def index():
    news = database.get_news()
    return render_template("index.html", news=news)

if __name__ == "__main__":
    app.run(debug=True)

This code creates a simple web interface that displays a list of news articles.

Step 7: Run the application

Run the application using python app.py (if you created a web interface) or python aggregator.py (if you only want to run the aggregator).

Step 8: Test and refine

Test your news aggregator by running it and verifying that it fetches and stores news articles correctly. Refine the code as needed to improve performance, add more features, or fix bugs.

That's it! You've built a basic news aggregator from scratch. You can customize and extend this project to suit your needs and preferences.