一、前文

        本次API学习原本觉得并不会写什么完整项目,因此并不打算作总结,但学习过程中还算有一些收获和思考,因此还是做个学习笔记(有个人总结和书本摘抄)

二、摘抄与总结

        应用程序接口(application program interface, 即API ),可用于在程序中请求网站特定信息,本次会结合plotly 库将信息进行可视化

        API是网站的一部分,用于与程序交互。程序通过具体的URL(URL 的全称是 Uniform Resource Locator,中文是 统一资源定位符。它的作用是告诉计算机如何去哪里找什么资源。)请求特定信息,这种请求就称为API请求

         在网址键入https://api.github.com/search/repositories?q=language:python+sort:stars

这个API调用会返回当前Github 托管了多少个Python 项目以及有关最受欢迎的Python 仓库的信息这是部分截图,最外层字典有三个键,"items" 的值是一个列表,其中每个元素都是字典,字典内容则是仓库信息,了解这个结构可以使我们在后续代码编写中准确找到要用的值:name、stargazers_count(图中未显示)、html_url。另外提一句,注意结构,图中最后的那个大括号是“Owner”的,即这个图并没有完全将第一个仓库信息展示出来。

        下一步是win+r 选择打开cmd 并(推荐)使用镜像网站下载requests 库:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests ,Requests包能让程序更轻松向网站请求信息并检查返回的响应

        接着就是初步的尝试调用API:

import requests

url = "https://api.github.com/search/repositories"
url += "?q=language:python+sort:stars+stars:>10000"

headers = {'Accept': 'application/vnd.github.v3+json'}
r = requests.get(url, headers=headers)
print(f"Status code: {r.status_code}")

response_dict = r.json()    # 将响应转为字典

print(response_dict.keys()) # 状态码为200 即为成功

        具体输出为:

Status code: 200

dict_keys(['total_count', 'incomplete_results', 'items'])

        直奔主题,使用plotly可视化仓库,接下来的代码是直接省略设置图形样式、添加定制工具提示、添加可单击的链接和定制标记颜色这几步循序渐进的过程的。最突出的功能就是单击横坐标上的项目名可以跳转网页到对应仓库(理想状态下,而我正会讲述我遇到的问题与解决方法)

import requests
import plotly.express as px

url = "https://api.github.com/search/repositories"
url += "?q=language:python+sort:stars+stars:>10000"

headers = {'Accept': 'application/vnd.github.v3+json'}
r = requests.get(url, headers=headers)
print(f"Status code: {r.status_code}")

response_dict = r.json()    # 将响应转为字典
print(f"Complete results: {not response_dict['incomplete_results']}")

# 处理有关仓库信息
repo_dicts = response_dict['items'] # 此处的'items'是一个列表,里面每个元素都是项目信息的字典
repo_links, stars, hover_texts = [], [], []
for repo_dict in repo_dicts:
    # 将仓库名转为链接
    repo_name = repo_dict['name']
    repo_url = repo_dict['html_url']
    repo_link = f"<a href='{repo_url}' target='_blank'>{repo_name}</a>" # 显示的是repo_name 但其实对应了链接 repo_url
    repo_links.append(repo_link)
    stars.append(repo_dict['stargazers_count'])

    # 创建悬停文本
    owner = repo_dict['owner']['login']
    description = repo_dict['description']
    hover_text = f"{owner}<br />{description}"
    hover_texts.append(hover_text)

# 可视化
title = "Most-Starred Python Project On Github"
labels = {'x': 'Repositoreies', 'y': 'stars'}
fig = px.bar(x=repo_links, y=stars, title=title, labels=labels, hover_name=hover_texts)
fig.update_layout(title_font_size=28, xaxis_title_font_size=20, yaxis_title_font_size=20)
fig.update_traces(marker_color="SteelBlue", marker_opacity=0.6)
fig.write_html("github_python_projects.html")
fig.show()

        其中包含一些基本注释,而若有其他问题,可全复制丢给AI询问某一步的目的,甚至可以进一步学习某个知识点,而这是结果图,横坐标可点击,虽然可能无法响应。

        接下来我将结合我的代码与学习思考经历述说我所得:

我是在vscode的.ipynb文件中编写的这段代码,有图像输出后,怎么都无法跳转网页,一开始我认为是网络问题,因为我认为github这样在国外的网站可能难以加载,但经过试验,我自己却可以正常进入,然后我想到可能是环境“没联网”,但又想到,若是没联网,甚至应当无法正常绘图。用鼠标点击横坐标有高亮,但无法跳转。问了AI后,才知道是我目前的环境有局限性

        这是部分AI回答:

        但经过尝试,在我上面的代码也有体现,并没有作用,若是本就在Jupyter Notebook中编写

可能就会省去这些麻烦。在这时,我想到或许.py文件能成功,但是甚至渲染失败,结果是一大堆字符,因为看到了很多颜色的代码,所以初步猜测是渲染失败,问AI后

经查证,因为并不是在jupyter notebook中的.ipynb文件运行,交互功能可能被阉割,而VS Code Notebook 会有环境的安全限制。

所以我打算试试AI提出的,保存为html文件,在vscode外部打开,脱离原环境,于是在代码中倒数第二行代码加了

运行成功后,能在当前.ipynb文件所在文件夹中找到

选择使用浏览器打开就能在网页显示一个plotly条形图,横坐标能交互,也能正常跳转到对应仓库

        在此之外,AI还给了两个解决方案,我在这贴出,为大家做个参考

        在看到Dash的时候我就跃跃欲试,因为我记得下一个实战项目就是创建一个简单的Web应用,不过在查看计划后发现学的是Django入门,更复杂一些,但是我至少能跟着书学,所以打算积累了一些经验后再尝试Dash并回过头来尝试这个方案。

三、题外话

        在学习过程中,我经常借助AI来解答各种问题并进行实践。对于初学者而言,在自学一门新技术时,基础知识的积累固然重要,但在初次尝试小项目遇到困难时,更关键的是拓展"眼界"——也就是积累实践经验。AI作为强大的信息检索工具,能帮助我们将模糊不清的问题具体化:通过测试AI给出的回答,结合自己的思考,往往能找到解决方案。

        有人以"网络信息质量参差"或"AI会误导"为由否定其价值,但事实是信息质量取决于人类本身。AI的优势并非创造性,而在于信息的整合能力——它能产出符合人类表达习惯的中上水平文本,但在专业领域可能漏洞百出。不过既然AI擅长信息收集与整理,我们完全可以扬长避短:先通过AI获取信息,再自行验证。毕竟对大多数人来说,随时请教行业专家并不现实,而AI完全可以胜任新手"学习助手"的角色。

        当然,这只是我近期使用AI后的一些思考,与正文并无关系。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐