▌前言
一为
的wordpress主题WebStack Pro 内置了前端百度、知乎、微博等热门排名榜数据。据一为所说,其实他也是通过爬取获取的数据,再通过API的形式展现出来,所以我们获得主题之后要向作者免费索取token才行。
我的网站是做金融的,对默认自带的热门徘行榜没有兴趣。于是乎我就利用python的FastAPI 做了一个API接口。 这里只介绍具体如何利用FastAPI制作API接口,对于数据的爬取、mysql的搭建等操作就不是本教程的范畴了。
对了,我是利用了宝塔在CentOS上搭建的python, 所以下文多多少少会涉及宝塔上的操作。
▌部署
- 首先在
root
或其他文件夹API
下建立新文件夹
mkdir API
cd API
-
用宝塔或者命令建立两个文件,一个是
api.py
,一个是requirements.txt
文件。 py文件是代码文件,txt文件是python需要用到的运行库
-
requirements.txt
的内容:
pymysql
fastapi
uvicorn
starlette
gunicorn
api.py
的代码:
import pymysql
from pymysql.cursors import DictCursor
from fastapi import FastAPI
import uvicorn
from starlette.middleware.cors import CORSMiddleware
import pandas as pd
app = FastAPI()
# 这里设置你自己网站的网址,主要防止别人盗用你的API
origins = ["https://cnvar.cn",
"https://www.cnvar.cn",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/{ann}/{item_id}")
async def read_item(ann:str, item_id: int):
return_dict = {'code': 1, 'result': False, 'msg': '请求成功'}
if ann=="fashenwei":
if item_id==1:
return_dict['result'] = sql_result(ann, "首发")
elif item_id==2:
return_dict['result'] = sql_result(ann, "可转债")
elif item_id==3:
return_dict['result'] = sql_result(ann, "配股")
elif item_id==4:
return_dict['result'] = sql_result(ann, "增发")
else:
return_dict['result'] = "nothing"
elif ann=="erp":
if item_id==1:
return_dict['result'] = sql_result(ann, "China")
else:
return_dict['result'] = "nothing"
else:
return_dict['result'] = "nothing"
return return_dict
# 功能函数, 下面为数据库的信息
def sql_result(select, type):
conn = pymysql.connect(host='127.0.0.1', database='XXXXXXXX', user='XXXXXXX', password='XXXXXXXXX')
cursor = conn.cursor(DictCursor)
if select=='fashenwei':
cursor.execute("SELECT time, excerpt, title, type, url FROM fashenwei WHERE type= '%s' ORDER BY time DESC LIMIT 10" % str(type))
elif select=='erp':
cursor.execute("SELECT * FROM erp WHERE Country= '%s' LIMIT 1" % str(type))
result = cursor.fetchall()
conn.close()
return result
if __name__ == "__main__":
uvicorn.run("api:app", port=5001)
上面的数据库或访问地址设置,请根据自己的需求修改。不要麻木的复制粘贴。
下面是mysql对应的数据结构:
- 使用宝塔自带的python管理器建立新的应用
- 启动
先不要在python管理器上启动程序,因为会启动失败。 我们需要进入SSH的python虚拟环境启动:
在SSH上输入命令:
#进入虚拟环境
source /root/API/API_venv/bin/activate
#进入API文件夹
cd API
##使用gunicorn启动api.py,并制定运行端口
gunicorn api:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:5001
-
填写映射的网址
-
测试
打开http://localhost:5001/fashenwei/1
应该会出现数据。
- 效果
最终的效果可以参考我的网站首页: cnVaR.cn