(翻译)30天学习Python👨‍💻第二十二天——网络请求

415 阅读3分钟

30天学习Python👨‍💻第二十二天——网络请求

网络请求

今天我将继续探索Python脚本更多的可能性。我读了一些有趣的文章,在这篇文章的末尾我会分享出来。

最常见的事情之一是我们经常需要实现和一些API的交互来获取数据并且处理它们。所以我决定找到使用Python可以和API交互并且处理数据的方法。有一些库可以做HTTP请求,比如httplibhttplib2urllib,但是最常用的库是requestsrequests.readthedocs.io/en/master/。

它能够帮助我们非常容易的发起HTTP请求,并且它还有一个很棒的文档。

它可以使用命令pip install requests下载。

我决定探索如何使用这个请求库尝试做一些有意思的事情。我找到了一个API来跟踪印度的COVID-19统计数据。该API根据ICMR统计数据提供官方数据。我决定使用这个API创建一个脚本可以为我们显示COVID-19每天的数据以及一些其他有用的信息。

  • 脚本用来展示每日统计数据

我在已存在的脚本项目中创建了一个脚本文件covid_tracker_india.py。这是GitHub仓库的链接github.com/arindamdawn…

covid_tracker_india.py

import requests

API_URL_ALL_DATA = 'https://api.covid19india.org/data.json'
API_URL_DISTRICT_WISE = 'https://api.covid19india.org/state_district_wise.json'

response = requests.get(API_URL_ALL_DATA)

def get_daily_stats(response):
    try:
        all_cases_data_list = response.json()['cases_time_series']
        latest_cases_data = all_cases_data_list[len(all_cases_data_list) - 1]
        formatted_data = f'''
            COVID INDIA DAILY STATS:
            AS of {latest_cases_data['date']}
            ******************************
            Total Confirmeed Cases : {latest_cases_data['totalconfirmed']}
            Total Recovered Cases : {latest_cases_data['totalrecovered']}
            Total Deaths Reported: {latest_cases_data['totaldeceased']}
            Confirmed Cases Yesterday: {latest_cases_data['dailyconfirmed']}
            Confirmed Recovered Cases Yesterday: {latest_cases_data['dailyrecovered']}
            Deaths Reported Yesterday: {latest_cases_data['dailydeceased']}
            ******************************
        '''
        print(formatted_data)
    except:
        print('An error occurred while processing data')

if __name__ == '__main__':
    get_daily_stats(response)

运行这个脚本,它应该以这种格式打印出这些数据

COVID INDIA DAILY STATS:
AS of 11 July
******************************
Total Confirmeed Cases : 850364
Total Recovered Cases : 536232
Total Deaths Reported: 22689
Confirmed Cases Yesterday: 27755
Confirmed Recovered Cases Yesterday: 19981
Deaths Reported Yesterday: 543
******************************

我进一步实验了这个API的数据,并且创建了另一个函数来展示最活跃的五个州。下面是改进后的代码。

covid_tracker_india.py

import requests

API_URL_ALL_DATA = 'https://api.covid19india.org/data.json'
API_URL_DISTRICT_WISE = 'https://api.covid19india.org/state_district_wise.json'

response = requests.get(API_URL_ALL_DATA)

def get_daily_stats(response):
    try:
        all_cases_data_list = response.json()['cases_time_series']
        latest_cases_data = all_cases_data_list[len(all_cases_data_list) - 1]
        formatted_data = f'''
            COVID INDIA DAILY STATS:
            AS of {latest_cases_data['date']}
            ******************************
            Total Confirmeed Cases : {latest_cases_data['totalconfirmed']}
            Total Recovered Cases : {latest_cases_data['totalrecovered']}
            Total Deaths Reported: {latest_cases_data['totaldeceased']}
            Confirmed Cases Yesterday: {latest_cases_data['dailyconfirmed']}
            Confirmed Recovered Cases Yesterday: {latest_cases_data['dailyrecovered']}
            Deaths Reported Yesterday: {latest_cases_data['dailydeceased']}
            ******************************
        '''
        print(formatted_data)
    except:
        print('An error occurred while processing data')

def get_top5_states_with_active_cases(response):
    try:
        all_states_data_list = response.json()['statewise']
        all_states_data_list.sort(
            key=lambda x: int(x['active']), reverse=True)
        top5_active_states = all_states_data_list[1:6]
        print('Top 5 states with most active cases in India:')
        for index, state in enumerate(top5_active_states):
            formatted_data = f'''
            ********{index + 1}*************
            State: {state['state']}
            Active: {state['active']}
            Total Confirmed : {state['confirmed']} 
            ***************************

            '''
            print(formatted_data)
    except Exception as error:
        print(f'An error occured while processing data, {error}')

if __name__ == '__main__':
    get_daily_stats(response)
    get_top5_states_with_active_cases(response)

基于我在JavaScript的认知,我经常使用.方法获取JSON对象数据,但在Python中不是这样。在这里我们获取对象数据使用的是中括号[]。这又一次刷新了我的认知。

这个脚本可以托管在服务器,如果我们想每天自动的获取数据,可以让它每天运行。

除了构建简单的COVID-追踪器,我还尝试使用非常便利的www.tweepy.org/ 库构建了一个简版的推特机器人,该库在推特API上提供了一个包装器来自动化任务。已经有很多关于这些内容的文章,我把链接放在下面。

下面是一些使用Python编写脚本的参考文章。

在接下来的几天里,我会在项目中探索更多Python脚本的内容,解锁新技能。脚本帮助我们将很多单调冗余的任务自动化,将它们委托给计算机,这样我们就可以专注于编程的其他重要方面了。

明天我会深入另一个有趣的领域——Python网络爬虫,在探索基础知识的同时寻找新的可能性。

原文链接

30 Days of Python 👨‍💻 - Day 22 - Scripting Extras