使用 Newsapi 的 Flask 新闻应用程序


Python 开发人员可以使用流行的 Flask Web 框架创建小型到中型的 Web 应用程序。它易于操作且轻量级。本项目展示了如何使用 News API(一个用于从多个来源收集新闻标题和故事的知名 API)来构建一个简单的新闻应用程序。

安装和语法

要开始使用我们的 Flask 新闻应用程序,我们首先需要安装 Flask 和 News API 库。我们可以使用 pip(Python 的包安装程序)安装 Flask。然后,我们可以使用以下命令安装 News API 库:

pip install newsapi-python flask

在深入探讨 Flask 新闻应用程序的实现细节之前,让我们先看一下 Flask 的基本语法。Flask 应用程序通常由一系列路由组成,这些路由是映射到 Python 函数的 URL。以下是一个简单的 Flask 路由示例:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
   return 'Hello, World!'

if __name__ == '__main__':
   app.run()

算法

  • 安装**Flask** 和 **NewsAPI** 客户端包

  • 导入所需的库并创建 Flask 应用程序实例

  • 为 Flask 应用程序定义一个路由,并创建一个函数使用 News API 客户端库检索新闻文章。在此函数中,使用**get_top_headlines()** 方法从 BBC 新闻源检索头条新闻。提取每篇文章的标题、描述、urlToImage 和 url,并将它们附加到单独的列表中。

  • 在 Flask 应用程序的 templates 文件夹中,创建一个名为 news.html 的新 HTML 文件。利用**Jinja2** 模板语法,在此文件中以 HTML 模板显示每篇新闻文章的标题、描述、**urlToImage** 和 url。

  • 打开 Web 浏览器,并在 python app.py 文件中导航到https://127.0.0.1:5000 以查看新闻!

示例

**注意** - 将 <your-api-key> 替换为您自己的 News API 密钥。您可以通过在 News API 网站上注册来获取免费的 API 密钥。

app.py

from flask import Flask, render_template
from newsapi import NewsApiClient

app = Flask(__name__)
newsapi = NewsApiClient(api_key='<your-api-key>')

@app.route('/')
def news():
   top_headlines = newsapi.get_top_headlines(sources='bbc-news')
   top_headlines = top_headlines['articles']
   desc = []
   news = []
   img = []
   link = []
   for i in range(len(top_headlines)):
      myarticles = top_headlines[i]
      news.append(myarticles['title'])
      desc.append(myarticles['description'])
      img.append(myarticles['urlToImage'])
      link.append(myarticles['url'])
        
   mylist = zip(news, desc, img, link)
   return render_template('news.html', context=mylist)

if __name__ == '__main__':
   app.run()

news.html

**注意** - [在与**“app.py”** 相同的位置创建一个名为**“templates”** 的文件夹,并在该文件夹内存储此**news.html** 文件]

{% block content %}
<h1>Top Headlines</h1>
{% for title, description, image, url in context %}
<div class="article">
   <h2>{{ title }}</h2>
   {% if image %}
   <img src="{{ image }}" alt="{{ title }}" width="100" height="100">
   {% endif %}
   <p>{{ description }}</p>
   <a href="{{ url }}">Read more</a>

</div>
{% endfor %}
{% endblock %}

要运行此程序,请打开 app.py 文件所在的终端,然后键入 python app.py。访问http://127.0.0.1:5000 以访问新闻应用程序,因为这将启动一个本地主机服务器。

输出

解释

该项目包含两个主要文件,**“app.py”** 和 **“news.html”**,并且需要安装**“flask”** 和 **“newsapi”** 库。

  • “app.py”文件包含 Flask Web 应用程序的主要逻辑。它从 Flask 中导入 Flask 和 render_template 模块,从 newsapi 中导入**NewsApiClient** 类。还需要**API 密钥**才能访问新闻数据。

  • **"@app.route('/')"** 装饰器指定 Flask 应用程序的 URL 端点。当用户导航到根 URL 时,将调用“news”函数。此函数向 NewsAPI 发出 API 请求,以获取来自 BBC 新闻源的头条新闻。它从 API 响应中提取相关数据并将其存储在单独的列表中,包括标题、描述、图像 URL 和指向完整文章的 URL 链接。

  • 然后,该函数使用内置的 zip 函数将这些列表组合成一个名为**“mylist”** 的可迭代对象。此可迭代对象包含每篇文章的一个元组,其中每个元组包含**标题、描述、图像 URL** 和**URL 链接**。

  • 最后,该函数使用 Flask 中的**“render_template”** 方法呈现“news.html”模板。它将**“mylist”** 可迭代对象传递到**“news.html”** 模板中的**“context”** 变量。

  • “news.html”文件包含用于在网页上显示头条新闻的 HTML 和 Jinja2 模板代码。**{% block content %}** 和 **{% endblock %}** 标记定义了一个将显示内容的块。for 循环遍历从“app.py”传递的“context”可迭代对象,并显示每篇文章的标题、图像(如果可用)、描述和“阅读更多”链接。

结论

使用此知名服务从各种来源收集新闻报道,您可以创建一个单页新闻应用程序,该应用程序根据所选来源显示最新标题、摘要、照片和链接。本文向您展示了如何使用 News API 开发一个简单的 Flask 新闻应用程序,使您能够通过结合 Flask Web 框架和 Python 编程语言来快速有效地创建在线应用程序。

更新于:2023 年 8 月 21 日

276 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告