02-图书数据搜索与查询(数据API、搜索关键字、简单重构)

图书关键字搜索API

http://t.talelin.com/v2/book/search?q={}&start={}&count={}

 

图书isbn搜索API

http://t.talelin.com/v2/book/isbn/{isbn}

 

前提准备,使用requests调用get和post请求

pip安装:pip install requests

import requests

class HTTP:
    # 发送GET请求
    def get(self, url, return_json=True):
        response = requests.get(url)
        if response.status_code == 200:
            if return_json:
                return response.json()
            else:
                return response.text
        else:
            print(f"Error: {response.status_code}")
            return None
    
    # 发送POST请求
    def post(self, url, data, headers={}, return_json=True):
        response = requests.post(url, data=data, headers=headers)
        if response.status_code == 200:
            if return_json:
                return response.json()
            else:
                return response.text
        else:
            print(f"Error: {response.status_code}")
            return None
    

 

从API获取数据并返回

from flask import Flask, make_response, jsonify
from httpTest import HTTP

# 实例化flask对象
app = Flask(__name__)

# 关键字搜索:http://t.talelin.com/v2/book/search?q={}&start={}&count={}
# isbn搜索: http://t.talelin.com/v2/book/isbn/{isbn}
@app.route('/book/search/<q>')
def search(q):
    """
    :param q: 普通关键字 isbn
    :param page: 分页
    :return:
    """
    # 调用is_isbn_or_key方法,判断q是关键字还是isbn
    isbn_or_key = is_isbn_or_key(q)

    isbn_url = "http://t.talelin.com/v2/book/isbn/{}"
    key_url = "http://t.talelin.com/v2/book/search?q={}&start={}&count={}"

    # 根据isbn_or_key的值,获取相应的url
    if isbn_or_key == "isbn":
        url = isbn_url.format(q)
        result = HTTP.get(url)
    else:
        url = key_url.format(q, 1, 5)
        result = HTTP.get(url)

    return jsonify(result), 200

def is_isbn_or_key(q):
    # 默认q为关键字
    isbn_or_key = "key"

    # 判断q是否为isbn
    # isbn13 是由13位0到9数字组成的字符串
    # isbn10 是由10位0到9数字组成,含有一些 "-"
    if q.isdigit() and len(q) == 13:
        isbn_or_key = "isbn"

    short_q = q.replace("-", "")
    if q.isdigit() and len(short_q) == 10 and q in "-":
        isbn_or_key = "isbn"

    return isbn_or_key


if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True, port=5000)

 

 

 

 

 

关键字搜索
posted @ 2024-10-08 16:23  马铃薯1  阅读(205)  评论(0)    收藏  举报