Guoqi Sun

小孙同学

使用 Flask 快速构建豆瓣图书/电影海报 WebAPI

发布于 # 实用教程

新年新气象,最近一直在折腾新博客,准备好好装修一番。

旧站 中,有一个豆瓣图书/电影的展示页面,感觉还不错。

于是就想在新网站中也加入该元素,另一方面也可以促进自己多阅读多观影

一、初步探索

emmmm,怎么引入呢?直接开发插件?还没学会 halo 的插件如何开发❌

先去 GitHub 上搜搜,看看有没有相关的项目吧?好主意✅

于是便找到了该仓库 传送门

仓库已经是三年前创建的了,先看看代码可不可以正常跑吧!

果然。。。有 Bug,哈哈哈!

二、解决 Bug

打印个状态码,先初步诊断一下,看看 Bug 到底出在哪?

运行一下!

418,还是第一次碰到这个状态码,Google 一下!

我是一个茶壶,哈哈哈,IT 技术充满了乐趣。

阿这,不太理解。。。前辈虽然写了UA列表,但是在请求的时候竟然不加到headers里去,怪不得豆瓣检测出来你是个爬虫,哈哈。

纠正一下吧!

完美运行啦!

但是。。。

三、新的需求

每分享一个书籍/电影都要运行此代码生成海报?

那为啥不干脆直接开发个接口,只要像下面这样引入代码就可以直接调用了呢?

![](https://douban.sunguoqi.com?params= DOUBANURL)

四、技术探索

需求存在,开始探索实现方案。

将 Python 脚本做成 API?

只需要创建一个 Web 应用就可以啦。当用户附带正确的参数访问指定路由,就可以触发相应逻辑,最后返回数据。

那用什么技术来编写这个 Web 应用呢?

啊哈,有现成的 Web 框架,比如 Spring Boot,Django,Flask …

Spring boot

JavaWeb 那一套,对 Java 不熟,还没实际开发过,上手应该有点小困难❌

Django

Django 自学过一段时间,比较容易上手,但 Django “太健全了”,内置后台,数据库 ORM 映射,模版机制,表单处理,会话…,用在这个脚本上会不会略显笨拙,感觉有点大材小用了⏱️

Flask

听说 Flask 比较轻量,看看官网,好家伙,五行输出 hello world,我看行,就它了✅

五、正式开发

1、失败尝试

本来想在Windows上用VScode开发好后再上传到服务器上来着,奈何配置开发环境就配置了好长时间。

一是在写入Flask_AppWindows系统环境变量时遇到了问题,二是在VSCode上运行Flask出现了问题。。。

算了,不配了,直接上服务器。

2, Hello world

Ubuntu上轻松配置好了环境,然后敲入代码(复制粘贴)

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

你好,世界!就是这么优雅🎉

3、编写路由逻辑

经过一番猛如虎的操作后,我在原代码中加入了如下代码,于是大功告成!

...
import flask
from flask import send_file

def main(url):
    ...
    return api_img_path

@app.route('/',methods=['get'])
def img():
    url = flask.request.args.get('url')
    img = main(url)

    return send_file(img)

当然,其实在此期间还经历了一番猛如虎的调试过程🥹

六、大功告成

Github: https://github.com/sun0225SUN/DoubanPoster