{"componentChunkName":"component---src-templates-best-practice-detail-tsx","path":"/best-practice/2020-04-18-inquire","result":{"data":{"currentBlog":{"id":"77c4bdde-d7d5-5d48-be8f-41da1800fef5","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020512/1589275221296-1656e42a0c563a4.jpg","authors":["Anycodes"],"categories":["best-practice"],"date":"2020-04-18T00:00:00.000Z","title":"基于 Serverless 快速实现简单版查询工具（文本相似度）","description":"通过定时触发器，可以非常简单快速地建立一个企业微信机器人。我们可以用它来实现喝水、吃饭提醒等小功能，还能实现定时推送新闻、天气，甚至是监控告警的小功能","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["Serverless","文本相似度"],"keywords":"Serverless 多环境配置,Serverless 管理环境,Serverless配置方案","outdated":null},"wordCount":{"words":70,"sentences":23,"paragraphs":23},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2020-04-18-inquire.md","fields":{"slug":"/best-practice/2020-04-18-inquire/","keywords":["go","python","serverless","云函数","book","mui","sheet"]},"html":"<h2 id=\"需求背景\"><a href=\"#%E9%9C%80%E6%B1%82%E8%83%8C%E6%99%AF\" aria-label=\"需求背景 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>需求背景</h2>\n<p>朋友的单位，有一个小型的图书室，图书室中摆放了很多的书，每本书都被编号放在对应的区域，为了让大家更快，更容易找到这些书，他联系我，让我帮他弄一个图书查询系统。可以通过用户输入，模糊匹配到对应的结果，并且提供书籍对应的地点。</p>\n<h2 id=\"功能设计\"><a href=\"#%E5%8A%9F%E8%83%BD%E8%AE%BE%E8%AE%A1\" aria-label=\"功能设计 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>功能设计</h2>\n<ul>\n<li>让朋友把书籍整理并存储到一个 Excel 表格中；</li>\n<li>将 Excel 表放到对象存储中，云函数读取这个文件，并且解析；</li>\n<li>根据词语的相似寻找相似的图书；</li>\n<li>前端页面通过 MUI 制作，放在对象存储中，并且使用对象存储的 Website 功能；</li>\n</ul>\n<h2 id=\"整体实现\"><a href=\"#%E6%95%B4%E4%BD%93%E5%AE%9E%E7%8E%B0\" aria-label=\"整体实现 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>整体实现</h2>\n<h3 id=\"数据形态\"><a href=\"#%E6%95%B0%E6%8D%AE%E5%BD%A2%E6%80%81\" aria-label=\"数据形态 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>数据形态</h3>\n<p>Excel样式主要包括书名和编号，同时下面包括分类的tab：</p>\n<p><img src=\"https://img.serverlesscloud.cn/202058/3-1-1.png\"></p>\n<h3 id=\"基于函数的搜索功能\"><a href=\"#%E5%9F%BA%E4%BA%8E%E5%87%BD%E6%95%B0%E7%9A%84%E6%90%9C%E7%B4%A2%E5%8A%9F%E8%83%BD\" aria-label=\"基于函数的搜索功能 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>基于函数的搜索功能</h3>\n<p>核心代码实现：</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"29801174094876017000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`import jieba\nimport openpyxl\nfrom gensim import corpora, models, similarities\nfrom collections import defaultdict\nimport urllib.request\n\nwith open(&quot;/tmp/book.xlsx&quot;, &quot;wb&quot;) as f:\n    f.write(\n        urllib.request.urlopen(&quot;https://********&quot;).read()\n    )\n\n\ntop_str = &quot;abcdefghijklmn&quot;\nbook_dict = {}\nbook_list = []\nwb = openpyxl.load_workbook('/tmp/book.xlsx')\nsheets = wb.sheetnames\nfor eve_sheet in sheets:\n    print(eve_sheet)\n    sheet = wb.get_sheet_by_name(eve_sheet)\n    this_book_name_index = None\n    this_book_number_index = None\n    for eve_header in top_str:\n        if sheet[eve_header][0].value == &quot;书名&quot;:\n            this_book_name_index = eve_header\n        if sheet[eve_header][0].value == &quot;编号&quot;:\n            this_book_number_index = eve_header\n    print(this_book_name_index, this_book_number_index)\n    if this_book_name_index and this_book_number_index:\n        this_book_list_len = len(sheet[this_book_name_index])\n        for i in range(1, this_book_list_len):\n            add_key = &quot;%s_%s_%s&quot; % (\n                sheet[this_book_name_index][i].value, eve_sheet, sheet[this_book_number_index][i].value)\n            add_value = {\n                &quot;category&quot;: eve_sheet,\n                &quot;name&quot;: sheet[this_book_name_index][i].value,\n                &quot;number&quot;: sheet[this_book_number_index][i].value\n            }\n            book_dict[add_key] = add_value\n            book_list.append(add_key)\n\n\ndef getBookList(book, book_list):\n    documents = []\n    for eve_sentence in book_list:\n        tempData = &quot; &quot;.join(jieba.cut(eve_sentence))\n        documents.append(tempData)\n    texts = [[word for word in document.split()] for document in documents]\n    frequency = defaultdict(int)\n    for text in texts:\n        for word in text:\n            frequency[word] += 1\n    dictionary = corpora.Dictionary(texts)\n    new_xs = dictionary.doc2bow(jieba.cut(book))\n    corpus = [dictionary.doc2bow(text) for text in texts]\n    tfidf = models.TfidfModel(corpus)\n    featurenum = len(dictionary.token2id.keys())\n    sim = similarities.SparseMatrixSimilarity(\n        tfidf[corpus],\n        num_features=featurenum\n    )[tfidf[new_xs]]\n    book_result_list = [(sim[i], book_list[i]) for i in range(0, len(book_list))]\n    book_result_list.sort(key=lambda x: x[0], reverse=True)\n    result = []\n    for eve in book_result_list:\n        if eve[0] >= 0.25:\n            result.append(eve)\n    return result\n\n\ndef main_handler(event, context):\n    try:\n        print(event)\n        name = event[&quot;body&quot;]\n        print(name)\n        base_html = '''<div class='mui-card'><div class='mui-card-header'>{{book_name}}</div><div class='mui-card-content'><div class='mui-card-content-inner'>分类：{{book_category}}<br>编号：{{book_number}}</div></div></div>'''\n        result_str = &quot;&quot;\n        for eve_book in getBookList(name, book_list):\n            book_infor = book_dict[eve_book[1]]\n            result_str = result_str + base_html.replace(&quot;{{book_name}}&quot;, book_infor['name']) \\\n                .replace(&quot;{{book_category}}&quot;, book_infor['category']) \\\n                .replace(&quot;{{book_number}}&quot;, book_infor['number'] if book_infor['number'] else &quot;&quot;)\n        if result_str:\n            return result_str\n    except Exception as e:\n        print(e)\n    return '''<div class='mui-card' style='margin-top: 25px'><div class='mui-card-content'><div class='mui-card-content-inner'>未找到图书信息，请您重新搜索。</div></div></div>'''`, `29801174094876017000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> jieba\n<span class=\"token keyword\">import</span> openpyxl\n<span class=\"token keyword\">from</span> gensim <span class=\"token keyword\">import</span> corpora<span class=\"token punctuation\">,</span> models<span class=\"token punctuation\">,</span> similarities\n<span class=\"token keyword\">from</span> collections <span class=\"token keyword\">import</span> defaultdict\n<span class=\"token keyword\">import</span> urllib<span class=\"token punctuation\">.</span>request\n\n<span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/tmp/book.xlsx\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"wb\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n    f<span class=\"token punctuation\">.</span>write<span class=\"token punctuation\">(</span>\n        urllib<span class=\"token punctuation\">.</span>request<span class=\"token punctuation\">.</span>urlopen<span class=\"token punctuation\">(</span><span class=\"token string\">\"https://********\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span>\n\n\ntop_str <span class=\"token operator\">=</span> <span class=\"token string\">\"abcdefghijklmn\"</span>\nbook_dict <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\nbook_list <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nwb <span class=\"token operator\">=</span> openpyxl<span class=\"token punctuation\">.</span>load_workbook<span class=\"token punctuation\">(</span><span class=\"token string\">'/tmp/book.xlsx'</span><span class=\"token punctuation\">)</span>\nsheets <span class=\"token operator\">=</span> wb<span class=\"token punctuation\">.</span>sheetnames\n<span class=\"token keyword\">for</span> eve_sheet <span class=\"token keyword\">in</span> sheets<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>eve_sheet<span class=\"token punctuation\">)</span>\n    sheet <span class=\"token operator\">=</span> wb<span class=\"token punctuation\">.</span>get_sheet_by_name<span class=\"token punctuation\">(</span>eve_sheet<span class=\"token punctuation\">)</span>\n    this_book_name_index <span class=\"token operator\">=</span> <span class=\"token boolean\">None</span>\n    this_book_number_index <span class=\"token operator\">=</span> <span class=\"token boolean\">None</span>\n    <span class=\"token keyword\">for</span> eve_header <span class=\"token keyword\">in</span> top_str<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> sheet<span class=\"token punctuation\">[</span>eve_header<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>value <span class=\"token operator\">==</span> <span class=\"token string\">\"书名\"</span><span class=\"token punctuation\">:</span>\n            this_book_name_index <span class=\"token operator\">=</span> eve_header\n        <span class=\"token keyword\">if</span> sheet<span class=\"token punctuation\">[</span>eve_header<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>value <span class=\"token operator\">==</span> <span class=\"token string\">\"编号\"</span><span class=\"token punctuation\">:</span>\n            this_book_number_index <span class=\"token operator\">=</span> eve_header\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>this_book_name_index<span class=\"token punctuation\">,</span> this_book_number_index<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> this_book_name_index <span class=\"token keyword\">and</span> this_book_number_index<span class=\"token punctuation\">:</span>\n        this_book_list_len <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>sheet<span class=\"token punctuation\">[</span>this_book_name_index<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> this_book_list_len<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            add_key <span class=\"token operator\">=</span> <span class=\"token string\">\"%s_%s_%s\"</span> <span class=\"token operator\">%</span> <span class=\"token punctuation\">(</span>\n                sheet<span class=\"token punctuation\">[</span>this_book_name_index<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">,</span> eve_sheet<span class=\"token punctuation\">,</span> sheet<span class=\"token punctuation\">[</span>this_book_number_index<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span>\n            add_value <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token string\">\"category\"</span><span class=\"token punctuation\">:</span> eve_sheet<span class=\"token punctuation\">,</span>\n                <span class=\"token string\">\"name\"</span><span class=\"token punctuation\">:</span> sheet<span class=\"token punctuation\">[</span>this_book_name_index<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">,</span>\n                <span class=\"token string\">\"number\"</span><span class=\"token punctuation\">:</span> sheet<span class=\"token punctuation\">[</span>this_book_number_index<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>value\n            <span class=\"token punctuation\">}</span>\n            book_dict<span class=\"token punctuation\">[</span>add_key<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> add_value\n            book_list<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>add_key<span class=\"token punctuation\">)</span>\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">getBookList</span><span class=\"token punctuation\">(</span>book<span class=\"token punctuation\">,</span> book_list<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    documents <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">for</span> eve_sentence <span class=\"token keyword\">in</span> book_list<span class=\"token punctuation\">:</span>\n        tempData <span class=\"token operator\">=</span> <span class=\"token string\">\" \"</span><span class=\"token punctuation\">.</span>join<span class=\"token punctuation\">(</span>jieba<span class=\"token punctuation\">.</span>cut<span class=\"token punctuation\">(</span>eve_sentence<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        documents<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>tempData<span class=\"token punctuation\">)</span>\n    texts <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span>word <span class=\"token keyword\">for</span> word <span class=\"token keyword\">in</span> document<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">for</span> document <span class=\"token keyword\">in</span> documents<span class=\"token punctuation\">]</span>\n    frequency <span class=\"token operator\">=</span> defaultdict<span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> text <span class=\"token keyword\">in</span> texts<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> word <span class=\"token keyword\">in</span> text<span class=\"token punctuation\">:</span>\n            frequency<span class=\"token punctuation\">[</span>word<span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n    dictionary <span class=\"token operator\">=</span> corpora<span class=\"token punctuation\">.</span>Dictionary<span class=\"token punctuation\">(</span>texts<span class=\"token punctuation\">)</span>\n    new_xs <span class=\"token operator\">=</span> dictionary<span class=\"token punctuation\">.</span>doc2bow<span class=\"token punctuation\">(</span>jieba<span class=\"token punctuation\">.</span>cut<span class=\"token punctuation\">(</span>book<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    corpus <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>dictionary<span class=\"token punctuation\">.</span>doc2bow<span class=\"token punctuation\">(</span>text<span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> text <span class=\"token keyword\">in</span> texts<span class=\"token punctuation\">]</span>\n    tfidf <span class=\"token operator\">=</span> models<span class=\"token punctuation\">.</span>TfidfModel<span class=\"token punctuation\">(</span>corpus<span class=\"token punctuation\">)</span>\n    featurenum <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>dictionary<span class=\"token punctuation\">.</span>token2id<span class=\"token punctuation\">.</span>keys<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    sim <span class=\"token operator\">=</span> similarities<span class=\"token punctuation\">.</span>SparseMatrixSimilarity<span class=\"token punctuation\">(</span>\n        tfidf<span class=\"token punctuation\">[</span>corpus<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        num_features<span class=\"token operator\">=</span>featurenum\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>tfidf<span class=\"token punctuation\">[</span>new_xs<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span>\n    book_result_list <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>sim<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> book_list<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>book_list<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n    book_result_list<span class=\"token punctuation\">.</span>sort<span class=\"token punctuation\">(</span>key<span class=\"token operator\">=</span><span class=\"token keyword\">lambda</span> x<span class=\"token punctuation\">:</span> x<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> reverse<span class=\"token operator\">=</span><span class=\"token boolean\">True</span><span class=\"token punctuation\">)</span>\n    result <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">for</span> eve <span class=\"token keyword\">in</span> book_result_list<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> eve<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">>=</span> <span class=\"token number\">0.25</span><span class=\"token punctuation\">:</span>\n            result<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>eve<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> result\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">main_handler</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">,</span> context<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">try</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span>\n        name <span class=\"token operator\">=</span> event<span class=\"token punctuation\">[</span><span class=\"token string\">\"body\"</span><span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">)</span>\n        base_html <span class=\"token operator\">=</span> <span class=\"token triple-quoted-string string\">'''&lt;div class='mui-card'>&lt;div class='mui-card-header'>{{book_name}}&lt;/div>&lt;div class='mui-card-content'>&lt;div class='mui-card-content-inner'>分类：{{book_category}}&lt;br>编号：{{book_number}}&lt;/div>&lt;/div>&lt;/div>'''</span>\n        result_str <span class=\"token operator\">=</span> <span class=\"token string\">\"\"</span>\n        <span class=\"token keyword\">for</span> eve_book <span class=\"token keyword\">in</span> getBookList<span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">,</span> book_list<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            book_infor <span class=\"token operator\">=</span> book_dict<span class=\"token punctuation\">[</span>eve_book<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span>\n            result_str <span class=\"token operator\">=</span> result_str <span class=\"token operator\">+</span> base_html<span class=\"token punctuation\">.</span>replace<span class=\"token punctuation\">(</span><span class=\"token string\">\"{{book_name}}\"</span><span class=\"token punctuation\">,</span> book_infor<span class=\"token punctuation\">[</span><span class=\"token string\">'name'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> \\\n                <span class=\"token punctuation\">.</span>replace<span class=\"token punctuation\">(</span><span class=\"token string\">\"{{book_category}}\"</span><span class=\"token punctuation\">,</span> book_infor<span class=\"token punctuation\">[</span><span class=\"token string\">'category'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> \\\n                <span class=\"token punctuation\">.</span>replace<span class=\"token punctuation\">(</span><span class=\"token string\">\"{{book_number}}\"</span><span class=\"token punctuation\">,</span> book_infor<span class=\"token punctuation\">[</span><span class=\"token string\">'number'</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">if</span> book_infor<span class=\"token punctuation\">[</span><span class=\"token string\">'number'</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">else</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> result_str<span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">return</span> result_str\n    <span class=\"token keyword\">except</span> Exception <span class=\"token keyword\">as</span> e<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> <span class=\"token triple-quoted-string string\">'''&lt;div class='mui-card' style='margin-top: 25px'>&lt;div class='mui-card-content'>&lt;div class='mui-card-content-inner'>未找到图书信息，请您重新搜索。&lt;/div>&lt;/div>&lt;/div>'''</span></code></pre></div>\n<p>同时配置APIGW：</p>\n<p><img src=\"https://img.serverlesscloud.cn/202058/3-1-2.png\"></p>\n<h3 id=\"功能页面\"><a href=\"#%E5%8A%9F%E8%83%BD%E9%A1%B5%E9%9D%A2\" aria-label=\"功能页面 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>功能页面</h3>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"69415972104179200000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=&quot;utf-8&quot;>\n    <title>图书检索系统</title>\n    <meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no&quot;>\n    <meta name=&quot;apple-mobile-web-app-capable&quot; content=&quot;yes&quot;>\n    <meta name=&quot;apple-mobile-web-app-status-bar-style&quot; content=&quot;black&quot;>\n\n    <link rel=&quot;stylesheet&quot; href=&quot;https://others-1256773370.cos.ap-chengdu.myqcloud.com/booksearch/css/mui.min.css&quot;>\n    <style>\n        html,\n        body {\n            background-color: #efeff4;\n        }\n    </style>\n    <script>\n        function getResult() {\n            var UTFTranslate = {\n                Change: function (pValue) {\n                    return pValue.replace(/[^\\u0000-\\u00FF]/g, function (\\$0) {\n                        return escape(\\$0).replace(/(%u)(\\w{4})/gi, &quot;&#x\\$2;&quot;)\n                    });\n                },\n                ReChange: function (pValue) {\n                    return unescape(pValue.replace(/&#x/g, '%u').replace(/\\\\u/g, '%u').replace(/;/g, ''));\n                }\n            };\n\n            var xmlhttp;\n            if (window.XMLHttpRequest) {\n                // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码\n                xmlhttp = new XMLHttpRequest();\n            } else {\n                // IE6, IE5 浏览器执行代码\n                xmlhttp = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);\n            }\n            xmlhttp.onreadystatechange = function () {\n                if (xmlhttp.readyState == 4 && xmlhttp.status == 200 && xmlhttp.responseText) {\n                    document.getElementById(&quot;result&quot;).innerHTML = UTFTranslate.ReChange(xmlhttp.responseText).slice(1, -1).replace(&quot;\\&quot;&quot;,'&quot;');\n                }\n            }\n            xmlhttp.open(&quot;POST&quot;, &quot;https://********&quot;, true);\n            xmlhttp.setRequestHeader(&quot;Content-type&quot;, &quot;application/x-www-form-urlencoded&quot;);\n            xmlhttp.send(document.getElementById(&quot;book&quot;).value);\n        }\n    </script>\n</head>\n<body>\n<div class=&quot;mui-content&quot; style=&quot;margin-top: 50px&quot;>\n    <h3 style=&quot;text-align: center&quot;>图书检索系统</h3>\n    <div class=&quot;mui-content-padded&quot; style=&quot;margin: 10px; margin-top: 20px&quot;>\n        <div class=&quot;mui-input-row mui-search&quot;>\n            <input type=&quot;search&quot; class=&quot;mui-input-clear&quot; placeholder=&quot;请输入图书名&quot; id=&quot;book&quot;>\n        </div>\n        <div class=&quot;mui-button-row&quot;>\n            <button type=&quot;button&quot; class=&quot;mui-btn mui-btn-numbox-plus&quot; style=&quot;width: 100%&quot; onclick=&quot;getResult()&quot;>检索\n            </button>&nbsp;&nbsp;\n        </div>\n    </div>\n    <div id=&quot;result&quot;>\n        <div class=&quot;mui-card&quot; style=&quot;margin-top: 25px&quot;>\n            <div class=&quot;mui-card-content&quot;>\n                <div class=&quot;mui-card-content-inner&quot;>\n                    可以在搜索框内输入书籍的全称，或者书籍的简称，系统支持智能检索功能。\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<script src=&quot;https://others-1256773370.cos.ap-chengdu.myqcloud.com/booksearch/js/mui.min.js&quot;></script>\n</body>\n</html>`, `69415972104179200000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token doctype\">&lt;!DOCTYPE html></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>head</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">charset</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>utf-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>title</span><span class=\"token punctuation\">></span></span>图书检索系统<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>title</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>viewport<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>apple-mobile-web-app-capable<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>yes<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>apple-mobile-web-app-status-bar-style<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>black<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span> <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>stylesheet<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>https://others-1256773370.cos.ap-chengdu.myqcloud.com/booksearch/css/mui.min.css<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>style</span><span class=\"token punctuation\">></span></span><span class=\"token style\"><span class=\"token language-css\">\n        <span class=\"token selector\">html,\n        body</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> #efeff4<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    </span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>style</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span><span class=\"token punctuation\">></span></span><span class=\"token script\"><span class=\"token language-javascript\">\n        <span class=\"token keyword\">function</span> <span class=\"token function\">getResult</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">var</span> UTFTranslate <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token function-variable function\">Change</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">pValue</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                    <span class=\"token keyword\">return</span> pValue<span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token regex\">/[^\\u0000-\\u00FF]/g</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">$<span class=\"token number\">0</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token keyword\">return</span> <span class=\"token function\">escape</span><span class=\"token punctuation\">(</span>$<span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token regex\">/(%u)(\\w{4})/gi</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"&amp;#x$2;\"</span><span class=\"token punctuation\">)</span>\n                    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n                <span class=\"token function-variable function\">ReChange</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">pValue</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                    <span class=\"token keyword\">return</span> <span class=\"token function\">unescape</span><span class=\"token punctuation\">(</span>pValue<span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token regex\">/&amp;#x/g</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'%u'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token regex\">/\\\\u/g</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'%u'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token regex\">/;/g</span><span class=\"token punctuation\">,</span> <span class=\"token string\">''</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token keyword\">var</span> xmlhttp<span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>window<span class=\"token punctuation\">.</span>XMLHttpRequest<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token comment\">// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码</span>\n                xmlhttp <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">XMLHttpRequest</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token comment\">// IE6, IE5 浏览器执行代码</span>\n                xmlhttp <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ActiveXObject</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Microsoft.XMLHTTP\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n            xmlhttp<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">onreadystatechange</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>xmlhttp<span class=\"token punctuation\">.</span>readyState <span class=\"token operator\">==</span> <span class=\"token number\">4</span> <span class=\"token operator\">&amp;&amp;</span> xmlhttp<span class=\"token punctuation\">.</span>status <span class=\"token operator\">==</span> <span class=\"token number\">200</span> <span class=\"token operator\">&amp;&amp;</span> xmlhttp<span class=\"token punctuation\">.</span>responseText<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                    document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"result\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">=</span> UTFTranslate<span class=\"token punctuation\">.</span><span class=\"token function\">ReChange</span><span class=\"token punctuation\">(</span>xmlhttp<span class=\"token punctuation\">.</span>responseText<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">slice</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\\\"\"</span><span class=\"token punctuation\">,</span><span class=\"token string\">'\"'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n            <span class=\"token punctuation\">}</span>\n            xmlhttp<span class=\"token punctuation\">.</span><span class=\"token function\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"POST\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"https://********\"</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            xmlhttp<span class=\"token punctuation\">.</span><span class=\"token function\">setRequestHeader</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Content-type\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"application/x-www-form-urlencoded\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            xmlhttp<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"book\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    </span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>head</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-content<span class=\"token punctuation\">\"</span></span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">margin-top</span><span class=\"token punctuation\">:</span> 50px</span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h3</span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> center</span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>图书检索系统<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h3</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-content-padded<span class=\"token punctuation\">\"</span></span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">margin</span><span class=\"token punctuation\">:</span> 10px<span class=\"token punctuation\">;</span> <span class=\"token property\">margin-top</span><span class=\"token punctuation\">:</span> 20px</span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-input-row mui-search<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>search<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-input-clear<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">placeholder</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>请输入图书名<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>book<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-button-row<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-btn mui-btn-numbox-plus<span class=\"token punctuation\">\"</span></span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">width</span><span class=\"token punctuation\">:</span> 100%</span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onclick</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>getResult()<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>检索\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span><span class=\"token entity\" title=\"&nbsp;\">&amp;nbsp;</span><span class=\"token entity\" title=\"&nbsp;\">&amp;nbsp;</span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>result<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card<span class=\"token punctuation\">\"</span></span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">margin-top</span><span class=\"token punctuation\">:</span> 25px</span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card-content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card-content-inner<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                    可以在搜索框内输入书籍的全称，或者书籍的简称，系统支持智能检索功能。\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>https://others-1256773370.cos.ap-chengdu.myqcloud.com/booksearch/js/mui.min.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>html</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h2 id=\"效果展示\"><a href=\"#%E6%95%88%E6%9E%9C%E5%B1%95%E7%A4%BA\" aria-label=\"效果展示 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>效果展示</h2>\n<p>为了便于朋友使用，将这个页面用过Webview封装成一个APP，整体效果如下：</p>\n<p><img src=\"https://img.serverlesscloud.cn/202058/3-1-3.png\"></p>\n<h2 id=\"总结\"><a href=\"#%E6%80%BB%E7%BB%93\" aria-label=\"总结 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>总结</h2>\n<p>这个APP是一个低频使用APP，可以这样认为，如果做在一个传统服务器上，这应该不是一个明智的选择，云函数的按量付费，对象存储与APIGW的融合，完美解决了资源浪费的问题，同时借用云函数的APIGW触发器，很简单轻松的替代传统的Web框架和部分服务器软件的安装和使用、维护等。这个例子非常小，但是确是一个有趣的小工具，除了图书查询之外，还可以考虑做成成绩查询等。</p>\n<hr>\n<div id='scf-deploy-iframe-or-md'></div>\n<hr>\n<blockquote>\n<p><strong>传送门：</strong></p>\n<ul>\n<li>GitHub: <a href=\"https://github.com/serverless/serverless/blob/master/README_CN.md\">github.com/serverless</a></li>\n<li>官网：<a href=\"https://serverless.com/\">serverless.com</a></li>\n</ul>\n</blockquote>\n<p>欢迎访问：<a href=\"https://serverlesscloud.cn/\">Serverless 中文网</a>，您可以在 <a href=\"https://serverlesscloud.cn/best-practice\">最佳实践</a> 里体验更多关于 Serverless 应用的开发！</p>","tableOfContents":"<ul>\n<li><a href=\"/best-practice/2020-04-18-inquire/#%E9%9C%80%E6%B1%82%E8%83%8C%E6%99%AF\">需求背景</a></li>\n<li><a href=\"/best-practice/2020-04-18-inquire/#%E5%8A%9F%E8%83%BD%E8%AE%BE%E8%AE%A1\">功能设计</a></li>\n<li>\n<p><a href=\"/best-practice/2020-04-18-inquire/#%E6%95%B4%E4%BD%93%E5%AE%9E%E7%8E%B0\">整体实现</a></p>\n<ul>\n<li><a href=\"/best-practice/2020-04-18-inquire/#%E6%95%B0%E6%8D%AE%E5%BD%A2%E6%80%81\">数据形态</a></li>\n<li><a href=\"/best-practice/2020-04-18-inquire/#%E5%9F%BA%E4%BA%8E%E5%87%BD%E6%95%B0%E7%9A%84%E6%90%9C%E7%B4%A2%E5%8A%9F%E8%83%BD\">基于函数的搜索功能</a></li>\n<li><a href=\"/best-practice/2020-04-18-inquire/#%E5%8A%9F%E8%83%BD%E9%A1%B5%E9%9D%A2\">功能页面</a></li>\n</ul>\n</li>\n<li><a href=\"/best-practice/2020-04-18-inquire/#%E6%95%88%E6%9E%9C%E5%B1%95%E7%A4%BA\">效果展示</a></li>\n<li><a href=\"/best-practice/2020-04-18-inquire/#%E6%80%BB%E7%BB%93\">总结</a></li>\n</ul>"},"previousBlog":{"id":"99725ecb-905b-5852-a6c7-80e83df8d7f9","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020512/1589274868260-071529vaxztt.jpg","authors":["Anycodes"],"categories":["best-practice"],"date":"2020-04-19T00:00:00.000Z","title":"基于 Serverless Framework 的人工智能小程序开发","description":"本示例将会通过微信小程序，在 Serverless 架构上，实现一款基于人工智能的相册小工具！","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["小程序","人工智能"],"keywords":"Serverless 多环境配置,Serverless 管理环境,Serverless配置方案","outdated":true},"wordCount":{"words":541,"sentences":90,"paragraphs":90},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2020-04-19-applets.md","fields":{"slug":"/best-practice/2020-04-19-applets/","keywords":["go","python","serverless","website","云函数","mysql","函数","功能","remark","Components"]}},"nextBlog":{"id":"43f1b4b3-585f-5695-88a1-7611872268e3","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020415/1586926925568-Log.jpg","authors":["Anycodes"],"categories":["guides-and-tutorials"],"date":"2020-04-13T00:00:00.000Z","title":"实时日志：腾讯云 Serverless Python 运行时支持日志实时输出","description":"当我们在调试时，只要触发器被触发，就能实时看到日志，那对写代码肯定大有裨益，这个组件就完成了这么一件事儿！","authorslink":["https://www.zhihu.com/people/liuyu-43-97"],"translators":null,"translatorslink":null,"tags":["Serverless","Python"],"keywords":"Serverless 全局变量组件,Serverless 单独部署组件,Serverless Component","outdated":true},"wordCount":{"words":132,"sentences":40,"paragraphs":40},"fileAbsolutePath":"/opt/build/repo/content/blog/2020-04-13-time-log.md","fields":{"slug":"/blog/2020-04-13-time-log/","keywords":["go","python","serverless","spa","云函数","serverless","日志","time","service","scflog","实时"]}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"blogId":"77c4bdde-d7d5-5d48-be8f-41da1800fef5","previousBlogId":"99725ecb-905b-5852-a6c7-80e83df8d7f9","nextBlogId":"43f1b4b3-585f-5695-88a1-7611872268e3"}}}