import request? ? #導(dǎo)入模塊
from plotly.graph_objs import Bar
from plotly import offline
#執(zhí)行API調(diào)用并存儲(chǔ)響應(yīng)
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'? ? #存儲(chǔ)API調(diào)用的url
headers = {'Accpet':'application/vnd/github.v3+json'}? ? #API版本
r = requests.get(url,headers = headers)? ? #request調(diào)用API,get()響應(yīng)對(duì)象賦給r
print(f"Status code:{r.status_code}")? ? #status_code指出請(qǐng)求是否成功,狀態(tài)碼200表示請(qǐng)求成功
添加自定義工具提示:
#處理結(jié)果
response_dict = r.json()? ? #json轉(zhuǎn)換為字典
#探索有關(guān)倉(cāng)庫(kù)的信息
repo_dicts = response_dict['items']? ? #items關(guān)聯(lián)值是列表徘层,其中包含很多字典
repo_names,stars,labels = [],[],[]? ? #創(chuàng)建三個(gè)空列表存儲(chǔ)數(shù)據(jù)
#遍歷所有字典
for repo_dict in repo_dicts:
? ? repo_names.append(repo_dict['name'])? ? #提取每個(gè)項(xiàng)目中的名字柒啤,并添加
? ? stars.append(repo_dict['stargazers_count'])? ? #提取每個(gè)項(xiàng)目中的星級(jí)橡淆,并添加
? ? owner = repo_dict['owner']['login']? ? #提取每個(gè)項(xiàng)目中的所有者
? ? description = repo_dict['description']? ? #提取每個(gè)項(xiàng)目中的描述
? ? label = f"{owner}<br />{description}"? ? #HTML代碼 所有者-換行符-描述
? ? labels.append(label)? ? #添加到labels中
#可視化
data = [{
? ? 'type':'bar',? ? #圖標(biāo)類型
? ? 'x':repo_names,? ? #x值
? ? 'y':stars,? ? #y值
? ? 'hovertext':labels,? ? #自定義工具提示:懸停文本
? ? 'maker':{
? ? ? ? 'color':'rgb(60,100,150)',? ? #藍(lán)色
? ? ? ? 'line':{'width':1.5,'color':'rgb(25,25,25)'}? ? #寬1.5像素的深灰色輪廓
????},
? ? 'opacity':0.6,? ? #不透明度0.6
}]
my_layout = {? ? #設(shè)計(jì)布局
? ? 'title':'Github上最受歡迎的Python項(xiàng)目',? ? #圖標(biāo)名稱
? ? 'titlefont':{'size':28},
? ? #x軸標(biāo)簽
? ? 'xaxis':{
????????'title':'Repository',
? ? ? ? 'titlefont':{'size':24},
? ? ? ? 'tickfont':{'size':14},? ? #刻度表字號(hào)
????},
? ? #y軸標(biāo)簽
? ? 'yaxis':{
????????'title':'Stars',
? ? ? ? 'titlefont':{'size':24},
? ? ? ? 'tickfont':{'size':14},? ? #刻度表字號(hào)
????},
}
fig = {'data':data,'layout':my_layout}
offline.plot(fig,filename='python_repos.html')
在圖標(biāo)中添加可單擊的鏈接:
#處理結(jié)果
response_dict = r.json()? ? #json轉(zhuǎn)換為字典
#探索有關(guān)倉(cāng)庫(kù)的信息
repo_dicts = response_dict['items']? ? #items關(guān)聯(lián)值是列表描焰,其中包含很多字典
repo_links,stars,labels = [],[],[]? ? #創(chuàng)建三個(gè)空列表存儲(chǔ)數(shù)據(jù)
#遍歷所有字典
for repo_dict in repo_dicts:
? ? repo_name = repo_dict['name']? ? #提取每個(gè)項(xiàng)目中的名字
? ??repo_url = repo_dict['html_url']? ? #提取每個(gè)項(xiàng)目中的url
? ??repo_link = f"<a href='{repo_url}'>{repo_name}</a>"? ? ?#<a href='url'>linktext</a>
? ? repo_links.append(repo_link)? ? #添加進(jìn)去
? ? stars.append(repo_dict['stargazers_count'])? ? #提取每個(gè)項(xiàng)目中的星級(jí)瘫证,并添加
????owner = repo_dict['owner']['login']? ? #提取每個(gè)項(xiàng)目中的所有者
????description = repo_dict['description']? ? #提取每個(gè)項(xiàng)目中的描述
????label = f"{owner}{description}"? ? #HTML代碼 所有者-換行符-描述
????labels.append(label)? ? #添加到labels中
#可視化
data = [{
? ? 'type':'bar',? ? #圖標(biāo)類型
? ? 'x':repo_links,
? ? 'y':stars,? ? #y值
'hovertext':labels,? ? #自定義工具提示:懸停文本
? ? 'maker':{
? ? ? ? 'color':'rgb(60,100,150)',? ? #藍(lán)色
? ? ? ? 'line':{'width':1.5,'color':'rgb(25,25,25)'}? ? #寬1.5像素的深灰色輪廓
????},
? ? 'opacity':0.6,? ? #不透明度0.6
}]
Hacker News API:
#調(diào)用返回本書(shū)編寫(xiě)期間最熱門的文章的信息:
http://hacker-news.firebaseio.com/v0/item/19155826.json
import requests
import json
#執(zhí)行API調(diào)用并存儲(chǔ)響應(yīng)
url = 'http://hacker-news.firebaseio.com/v0/item/19155826.json'
r = requests.get(url)
print(f"Status code:{r.status_code}")
#探索數(shù)據(jù)的結(jié)構(gòu)
response_dict = r.json()
readable_file = 'data/readable_hn_data.json'
with open(readable_file,'w') as f:
? ? json.dump(response_dict,f,indent = 4)? ? #運(yùn)行這個(gè)URL
#URL返回一個(gè)列表咐容,其中包含Hacker News上排名靠前的文章的ID:
http://hacker-news.firebaseio.com/v0/topstories.json
#獲取主頁(yè)每篇文章
from operator import itemgetter
import requests
#執(zhí)行API調(diào)用并存儲(chǔ)
url = 'http://hacker-news.firebaseio.com/v0/topstories.json'
r = requests.get(url)
print(f"Status code:{r.status_code}")
#處理有關(guān)每篇文章的信息
submission_ids = r.json()? ? #轉(zhuǎn)換為列表并存儲(chǔ)到ids中
submission_dicts = []? ? #創(chuàng)建空列表
for submission_id insubmission_ids[:30]:
? ? #對(duì)于每篇文章舆逃,都執(zhí)行一個(gè)API調(diào)用,URL包含submission_id的當(dāng)前值
? ? url = f"http://hacker-news.firebaseio.com/v0/item/{submission_id}.json"
? ? r = requests.get(url)
? ? print(f"id:{submission_id}\tstatus:{r.status_code}")
? ? response_dict = r.json()
? ? #對(duì)于每篇文章,都創(chuàng)建一個(gè)字典
? ? submission_dict = {
? ? ? ? 'title':response_dict['title'],? ? #存儲(chǔ)文章標(biāo)題
? ? ? ? 'hn_link':f"http://hacker-news.firebaseio.com/item?id={submission_id}",? ? #存儲(chǔ)頁(yè)面鏈接
? ? ? ? 'comments':response_dict['descendants'],? ? #存儲(chǔ)評(píng)論數(shù)
????}
? ? submission_dicts.append(submission_dict)
#根據(jù)鍵comments關(guān)聯(lián)的值路狮,對(duì)列表進(jìn)行排序虫啥,降序
submission_dicts = sorted(submission_dicts,key = itemgetter('comments'),reverse = True)
for submission_dict in submission_dicts:
? ? print(f"\nTitle:{submission_dict['title']}")
? ? print(f"Discussion link:{submission_dict['hn_link']}")
? ? print(f"Comments:{submission_dict['comments']}")