Github API
Web API
web api是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互,这种请求被称为API调用。请求的数据将以易于处理的格式(如JSON或CSV)返回;依赖于外部数据源的大多数应用程序都依赖于API调用,如集成社交媒体网站的应用程序。
Github的API
https://api.github.com/search/repositories?q=language:python&sort=stars
第一部分(https://api.github.com/)将请求发送到Github网站响应API调用的部分;search/repositories让API搜索github上所有的仓库,问号指出要传递一个实参,q=开始指定查询,获取语言为Python的仓库的信息,最后一部分指定将项目按其获得的星级排序。如果incomplete_results的值为false,证明请求成功,true代表GitHub无法全面处理该API。
API大多存在速率限制,即在特定时间内执行的请求数存在限制,在浏览器中输入https://api.github.com/rate_limit,可获得GitHub的限制;search表示每分钟限制10个请求,reset值指的是配额将重置的Unix时间或新纪元时间(1970年1月1日午夜后多少秒),注册获得API秘钥之后,配额将高很多。
{ "resources": { "core": { "limit": 60, "remaining": 60, "reset": 1542466950 }, "search": { "limit": 10, "remaining": 10, "reset": 1542463410 }, "graphql": { "limit": 0, "remaining": 0, "reset": 1542466950 } }, "rate": { "limit": 60, "remaining": 60, "reset": 1542466950 } }
--将项目名存储在一个列表中,星级、描述、链接放在一个字典里,使用pygal绘制直方图,每个条形柱会存储一个连接,点击可直接转到所在网页。
hist = pygal.Bar()
hist.add('',plot_dicts)
import requests import pygal from pygal.style import LightenStyle as LS,LightColorizedStyle as LCS #执行API调用,并存储响应,以星级排序 url = 'https://api.github.com/search/repositories?q=language:python&sort=stars' r = requests.get(url) #状态码200表示请求成功 print('Status code:',r.status_code) #将API响应返回的JSON格式的信息转换为一个Python字典 respose_dict = r.json() print('Total repositories:',respose_dict['total_count'])#一共多少个仓库 #items是一个包含很多字典的列表,每一个字典都包含一个仓库的信息 repo_dicts = respose_dict['items'] #研究第一个仓库 repo_dict = repo_dicts[0] print('Keys:',len(repo_dict)) print('\nName:',repo_dict['name'])#项目名称 print('Owner:',repo_dict['owner']['login'])#项目所有者登录名 print('Stars:',repo_dict['stargazers_count'])#多少个星的评级 print('Repository:',repo_dict['html_url'])#GitHub仓库的URL print('Created:',repo_dict['created_at'])#创建时间 print('Updated:',repo_dict['updated_at'])#最后一次更新时间 print('Description:',repo_dict['description'])#打印仓库描述 #2015年GitHub上星级最高的项目,收藏人数16000 for rp_dict in repo_dicts: if rp_dict['name'] == 'httpie': #rp_index = repo_dicts.index(rp_dict) print('\nOwner:', rp_dict['owner']['login']) print('Stars:', rp_dict['stargazers_count']) print('Created:', rp_dict['created_at']) print('Updated:', rp_dict['updated_at']) #将项目名存储在一个列表中,星级、描述、链接放在一个字典里 names,plot_dicts = [],[] for r_dict in repo_dicts: names.append(r_dict['name']) if r_dict['description']: plot_dict = { 'value':r_dict['stargazers_count'], 'label':r_dict['description'], 'xlink':r_dict['html_url'] } plot_dicts.append(plot_dict) else: plot_dict = { 'value': r_dict['stargazers_count'], 'label': 'None', 'xlink': r_dict['html_url'] } plot_dicts.append(plot_dict) #将GitHub上Python项目的星级和名称可视化 my_style = LS('#119911',base_style=LCS)#指定颜色和样式 #绘制直方图,创建一个Config实例,存储所有的配置 my_config = pygal.Config() my_config.x_label_rotation = (-45) #x轴标签旋转-45度 my_config.show_legend = False #隐藏图例 my_config.title_font_size = 25 #标题大小 ''' 主标签是Y轴上为5000整数倍的刻度,副标签是X轴上的项目 名称和Y轴上的大部分数字,但是显示效果并非如此 ''' my_config.label_font_size = 18 #副标签大小 my_config.major_label_font_size = 30 #主标签大小 #将较长的标签缩短为15个字符,鼠标指向时显示完整名称 my_config.truncate_label = 15 my_config.show_y_guides = False #隐藏图表中的水平线,包括x轴 my_config.width = 1000 #设置图表宽度 hist = pygal.Bar(my_config,style=my_style) hist.title = 'Most-Popular Python Projects on GitHub' hist.x_labels = names hist.add('',plot_dicts)#图例名称为空 hist.render_to_file(r'images\names_stars.svg') # 直接渲染到浏览器,需要安装lxml #hist.render_in_browser()