Notion API + Python实现阅读、影视数据可视化图表 - 知乎
https://zhuanlan.zhihu.com/p/570140268

全部代码
import numpy as np
import requests,json
import matplotlib.pyplot as plt
import pyecharts.options as opts
from pyecharts.charts import Pie
class Notion_Data:
def __init__(self):
print("欢迎来到Notion数据可视化分析!")
# 获取用户数据库ID及Token密钥
# 数据处理
def Notion_Data_deal(self, Database_ID: str, Token_KEY: str):
base_url = "https://api.notion.com/v1/databases/"
"""
接口匹配
"""
headers = {
"Authorization": "Bearer " + Token_KEY,
"accept": "application/json",
}
query = {"filter": {"property": "出版社", "checkbox":{"equals":True}}}
# 获取Notion页面下的详细信息 https://developers.notion.com/reference/post-database-query
response = requests.post(base_url + Database_ID + "/query", headers=headers, data=query)
jst = json.loads(response.text)
return jst
def Json_Data_deal(self, Database_ID: str, Token_KEY: str, Type: str): # 类型仅限为:书籍、影片
dict = self.Notion_Data_deal(Database_ID, Token_KEY)
"""获取到数据列"""
data_len = len(dict['results'])
# 统计类型数量,进行后续图形比例
# 书籍以出版社为划分,影片以类别划分
if Type == "影片":
"""获取到数据列"""
dic = {}
dtc = {}
for i in range(data_len):
name = dict['results'][i]['properties']['片名']['title'][0]['plain_text']
select = dict['results'][i]['properties']['类别']['multi_select']
classify = []
for j in range(len(select)):
classify.append(dict['results'][i]['properties']['类别']['multi_select'][j]['name'])
dic[name] = classify # 类别
ls = list(dic.items()) # 获取数据数量
for i in range(len(ls)):
for j in range(len(ls[i][1])):
if ls[i][1][j] in "奇幻":
ls[i][1][j] = "科幻"
if ls[i][1][j] in "惊悚" or ls[i][1][j] in "悬疑":
ls[i][1][j] = "恐怖"
if ls[i][1][j] in "故事" or ls[i][1][j] in "扫黑" or ls[i][1][j] in "生活":
ls[i][1][j] = "剧情"
if ls[i][1][j] in "运动":
ls[i][1][j] = "冒险"
dtc[ls[i][1][j]] = dtc.get(ls[i][1][j], 0) + 1
lt = list(dtc.items())
print("有效数据:" + str(len(dic)))
return lt
if Type == "书籍":
dic = {}
for i in range(data_len):
try:
name = (dict['results'][i]['properties']['出版社']['select']['name'])
dic[name] = dic.get(name, 0) + 1
except Exception:
pass
continue
ls = list(dic.items())
return ls
def Notion_Visualization(self, Database_ID: str, Token_KEY: str, Type: str): # 交互式可视化图表
data = self.Json_Data_deal(Database_ID, Token_KEY, Type)
lenght = len(data)
sum = 0
count_num, name = [], []
for i in range(lenght):
sum += int(data[i][1])
name.append(data[i][0])
for j in range(lenght):
a = round(int(data[j][1]) / sum * 100, 2) # 保留为两位小数
count_num.append(a)
np.set_printoptions(precision=2)
data_pair_temp = [list(data) for data in zip(name, count_num)]
p = (
Pie() # 实例化
.add(
series_name=Type, # 系列名称
data_pair=data_pair_temp, # 馈入数据
radius="65%", # 饼图半径比例
center=["50%", "50%"], # 饼图中心坐标
label_opts=opts.LabelOpts(is_show=False, position="center"), # 标签位置
)
.set_global_opts(legend_opts=opts.LegendOpts(is_show=True)) # 不显示图示
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 标签颜色
.render(Type + ".html") # 渲染文件及其名称
# .render_notebook()
)
print("文件已保存在当前程序目录!")
"""
# 静态可视化图表
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 显示中文标签,处理中文乱码问题
plt.rcParams['axes.unicode_minus'] = False # 坐标轴负号的处理
plt.pie(x=count_num, labels=name, autopct='%.2f%%')
plt.legend(loc='center')
plt.savefig("./Image/Vedio.png")
plt.show()
# print(name, count_num)
"""
if __name__ == '__main__':
text = Notion_Data()
Database_ID = str(input("请输入数据库ID:\n"))
Token_KEY = str(input("请输入Token密钥:\n"))
Type = str(input("请输入类型(仅限书籍、影片):\n"))
text.Notion_Visualization(Database_ID, Token_KEY, Type)
# print(text.Json_Data_deal(Database_ID, Token_KEY, Type))导言
本代码是为创建Notion数据库(Database)可视化图标,若使用Notion页面为页面(page),该教材不符合你所使用。 通俗来讲,Notion数据库是表格。但是Notion在创建之初就会将其定义为是数据库 or 页面,那么如何判断我的Notion是数据库还是包?
WenHaoFree
OpenAI Global could raise money and, critically to its investors, make it, but it still operated under the auspices of the non-profit and its mission; OpenAI Global’s operating agreement states:
Microsoft, despite this constraint on OpenAI Global, was not only an investor, but also a customer, incorporating OpenAI into all of its products.
我们使用python中,遇到爬取网站情况,用到unicode编码,我们需要将它转换为中文,unicode编码转换为中文的方法有四种:使用unicode_escape 解码、使用encode()方法转换,再调用bytes.decode()转换为字符串形式、 使用json.loads 解码(为json 格式)、使用eval(遇到Unicode是通过requests在网上爬取的时候)。具体内容请看本文。
方法一:使用unicode_escape 解码
键盘的输入可以分为两种模式,普通模式和特殊按键模式。通过勾选高级->输入内容包含特殊按键来使用特殊按键模式,不勾选则使用普通模式,默认为特殊按键模式。
