Python 使用Newsapi的Flask新闻应用
Python开发人员可以使用流行的Flask网络框架创建小到中型的网络应用程序。它易于操作且轻量级。该项目展示了使用News API,一个用于从多个来源获取新闻标题和故事的流行API,构建一个简单的新闻应用程序。
安装和语法
要开始使用我们的Flask新闻应用程序,我们需要首先安装Flask和News API库。我们可以使用pip来安装Flask,pip是Python的包安装程序。然后,我们可以使用以下命令安装News API库:
pip install newsapi-python flask
在我们深入探讨 Flask 新闻应用的实现细节之前,让我们先来了解一下 Flask 的基本语法。一个 Flask 应用通常由一系列路由组成,这些路由将 URL 映射到 Python 函数。这是一个简单 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。
-
打开一个浏览器,并导航到 http://localhost:5000 在python app.py文件中查看新闻!
示例
注意 - 将<your-api-key>
替换为您自己的新闻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
Note − 在与 “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 News来源的头条新闻。它从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编程语言,你可以快速有效地创建在线应用程序。