Python 30 天 – 第 22 天 – 脚本II(Python API请求数据)

作者 : 慕源网 本文共3979个字,预计阅读时间需要10分钟 发布时间: 2021-10-14 共411人阅读

本文是 30 天 Python 挑战系列的一部分。您可以在此处找到本系列之前所有帖子的链接

今天,我继续探索使用Python编写脚本的更多可能性

执行 HTTP 请求

我们经常需要实现的最常见的事情之一是与某些 API 通信以获取数据并对其进行处理。所以我决定找出我们可以使用 Python 与 API 对话并访问数据的方法。有一些库可以执行 HTTP 请求,例如 httplib、httplib2、urllib,但最常用的库是:https://requests.readthedocs.io/en/master/

它有助于轻松执行 HTTP 请求,并具有出色的文档。

可以使用命令 pip install requests 安装它

我决定在探索如何使用 requests 库的同时尝试做一些有趣的事情。我找到了一个 API 来跟踪印度的 COVID-19 统计数据。此 API 根据 ICMR 统计提供官方数据。我决定使用 API 创建一个脚本,该脚本可以向我们显示 COVID-19 的每日统计数据以及其他一些有用信息,以及一个用于显示每日统计数据的脚本。

我在现有的脚本项目中创建了一个新的脚本文件 covid_tracker_india.py。GitHub 存储库的链接位于 https://github.com/arindamdawn/python-scripting。

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']}  
            ******************************  
            确认案例总数:{latest_cases_data['totalconfirmed']} 
总恢复案例:{latest_cases_data['totalrecovered']} 
报告的总死亡人数:{latest_cases_data['totaldeceased']} 
昨天确认的案例:{latest_cases_data['dailyconfirmed']} 
昨天确认的恢复病例:{latest_cases_data['dailyrecovered']} 
昨天报告的死亡人数:{latest_cases_data['dailydeceased']}   
            ******************************  
        '''    
        print(formatted_data)    
    except:    
        print('An error occurred while processing data')    
    
if __name__ == '__main__':    
    get_daily_stats(response)   

在运行脚本时,它应该以这种格式打印数据

COVID印度每日统计:    
截至  7 月11日    
**********************************    
确诊病例总数:  850364    
总病例数:  536232    
报告的总死亡人数:  22689    
昨日确诊病例:  27755    
昨日确诊病例数:  19981    
昨天报告的死亡人数:  543    
**********************************    

我对 API 数据进行了进一步试验,并创建了另一个函数来显示最活跃案例的前 5 个状态。这是更新后的脚本。

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 文件访问 JSON 对象数据。在 Python 中不起作用的方法。在这里,我们必须使用括号表示法 [] 访问对象值。这就是我必须记住并更新我的心智模型的内容。

如果我们想自动获取每日统计信息,该脚本可以托管在服务器中并且可以每天运行。

除了构建简单的 COVID-tracker 之外,我还探索了使用非常方便的 https://www.tweepy.org/ 库构建一个基本的 twitter 机器人,该库提供了一个 twitter API 的包装器来自动执行 twitter 任务。已经有大量有用的文章可用,因此我将改为共享资源链接。

以下是利用 Python 脚本创建有用任务的资源列表。

  • https://github.com/geekcomputers/Python – 很棒的 Python 脚本(我的最爱)
  • https://github.com/realpython/python-scripts – 一些有用的 Python 脚本的 Github 存储库
  • https://github.com/Logan1x/Python-Scripts/tree/master/bin – 酷 Python 脚本
  • https://github.com/hastagAB/Awesome-Python-Scripts – 策划的 Python 脚本项目

在接下来的几天中,我将在处理项目的同时探索更多关于使用 Python 编写脚本的内容,并了解可以解锁的新可能性。脚本通过将许多单调的冗余任务委托给计算机来帮助自动化许多单调的冗余任务,以便我们可以专注于编程的其他重要方面

明天我将潜入另一个有趣的领域 – 使用 Python 进行 Web Scraping 并探索基础知识,同时寻找新的可能性。


慕源网 » Python 30 天 – 第 22 天 – 脚本II(Python API请求数据)

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录