{"id":19021,"date":"2024-02-13T21:19:33","date_gmt":"2024-02-13T12:19:33","guid":{"rendered":"http:\/\/www.tyosuke20xx.com\/blog\/?p=19021"},"modified":"2024-02-13T21:20:09","modified_gmt":"2024-02-13T12:20:09","slug":"%e6%a4%9c%e7%b4%a2%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%b3%e3%80%8cvoogle%e3%80%8d","status":"publish","type":"post","link":"http:\/\/www.tyosuke20xx.com\/blog\/?p=19021","title":{"rendered":"\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u300cVoogle\u300d"},"content":{"rendered":"\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>import requests\r\nfrom flask import Flask, request, jsonify\r\n\r\napp = Flask(__name__)\r\n\r\nclass SearchEngine:\r\n    def __init__(self, documents):\r\n        self.documents = documents\r\n\r\n    def search_local(self, query):\r\n        results = []\r\n        for doc in self.documents:\r\n            if query.lower() in doc[&quot;text&quot;].lower():\r\n                results.append(doc)\r\n        return results\r\n\r\n    def search_wikipedia(self, query, lang=&#39;ja&#39;):\r\n        base_url = f&quot;https:\/\/{lang}.wikipedia.org\/w\/api.php&quot;\r\n        params = {\r\n            &#39;action&#39;: &#39;query&#39;,\r\n            &#39;list&#39;: &#39;search&#39;,\r\n            &#39;srsearch&#39;: query,\r\n            &#39;format&#39;: &#39;json&#39;\r\n        }\r\n        response = requests.get(base_url, params=params)\r\n        if response.status_code == 200:\r\n            search_results = response.json().get(&#39;query&#39;, {}).get(&#39;search&#39;, [])\r\n            return [{&#39;id&#39;: result[&#39;pageid&#39;], &#39;text&#39;: result[&#39;snippet&#39;]} for result in search_results]\r\n        else:\r\n            return []\r\n\r\n# \u30b5\u30f3\u30d7\u30eb\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30c7\u30fc\u30bf\r\ndocuments = [\r\n    {&quot;id&quot;: 1, &quot;text&quot;: &quot;Python\u306f\u6c4e\u7528\u306e\u9ad8\u6c34\u6e96\u8a00\u8a9e\u3067\u3059\u3002&quot;},\r\n    {&quot;id&quot;: 2, &quot;text&quot;: &quot;\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u306f\u60c5\u5831\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3067\u3059\u3002&quot;},\r\n    {&quot;id&quot;: 3, &quot;text&quot;: &quot;\u4eba\u5de5\u77e5\u80fd\u306f\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306b\u3088\u308b\u77e5\u7684\u306a\u632f\u308b\u821e\u3044\u3092\u5b9f\u73fe\u3059\u308b\u6280\u8853\u3067\u3059\u3002&quot;},\r\n    {&quot;id&quot;: 4, &quot;text&quot;: &quot;Web\u958b\u767a\u3067\u306f\u3001HTML\u3001CSS\u3001JavaScript\u306a\u3069\u306e\u6280\u8853\u304c\u4f7f\u308f\u308c\u307e\u3059\u3002&quot;},\r\n    {&quot;id&quot;: 5, &quot;text&quot;: &quot;\u30c7\u30fc\u30bf\u30b5\u30a4\u30a8\u30f3\u30c6\u30a3\u30b9\u30c8\u306f\u30c7\u30fc\u30bf\u304b\u3089\u6709\u76ca\u306a\u60c5\u5831\u3092\u5f15\u304d\u51fa\u3059\u5c02\u9580\u5bb6\u3067\u3059\u3002&quot;}\r\n]\r\n\r\n# SearchEngine\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4f5c\u6210\r\nsearch_engine = SearchEngine(documents)\r\n\r\n@app.route(&quot;\/&quot;, methods=[&quot;GET&quot;, &quot;POST&quot;])\r\ndef search():\r\n    # \u4ee5\u524d\u306e\u95a2\u6570\u306e\u5185\u5bb9\u306f\u5909\u66f4\u306a\u3057\r\n    if request.method == &quot;POST&quot;:\r\n        query = request.form[&quot;query&quot;]\r\n        local_results = search_engine.search_local(query)\r\n        wiki_results = search_engine.search_wikipedia(query)\r\n        all_results = local_results + wiki_results\r\n        if not all_results:\r\n            return &quot;\u691c\u7d22\u7d50\u679c\u306f\u3042\u308a\u307e\u305b\u3093\u3002&quot;\r\n        else:\r\n            result_text = &quot;&lt;br&gt;&quot;.join([f&quot;&lt;div&gt;&lt;strong&gt;ID:&lt;\/strong&gt; {result[&#39;id&#39;]}, &lt;strong&gt;Text:&lt;\/strong&gt; {result[&#39;text&#39;]}&lt;\/div&gt;&quot; for result in all_results])\r\n            return f&quot;&quot;&quot;\r\n            &lt;!DOCTYPE html&gt;\r\n            &lt;html&gt;\r\n            &lt;head&gt;\r\n                &lt;title&gt;\u691c\u7d22\u30a8\u30f3\u30b8\u30f3&lt;\/title&gt;\r\n                &lt;style&gt;\r\n                    body {{\r\n                        font-family: Arial, sans-serif;\r\n                        margin: 0 auto;\r\n                        max-width: 800px;\r\n                        padding: 20px;\r\n                    }}\r\n                    h1 {{\r\n                        color: #333;\r\n                    }}\r\n                    form {{\r\n                        margin-bottom: 20px;\r\n                    }}\r\n                    input[type=&quot;text&quot;] {{\r\n                        margin-right: 10px;\r\n                        padding: 10px;\r\n                        width: calc(100% - 122px);\r\n                    }}\r\n                    input[type=&quot;submit&quot;] {{\r\n                        padding: 10px 20px;\r\n                        background-color: #4CAF50;\r\n                        color: white;\r\n                        border: none;\r\n                        cursor: pointer;\r\n                    }}\r\n                    input[type=&quot;submit&quot;]:hover {{\r\n                        background-color: #45a049;\r\n                    }}\r\n                    div {{\r\n                        margin-bottom: 10px;\r\n                        padding: 10px;\r\n                        background-color: #f2f2f2;\r\n                        border-left: 4px solid #4CAF50;\r\n                    }}\r\n                &lt;\/style&gt;\r\n            &lt;\/head&gt;\r\n            &lt;body&gt;\r\n                &lt;h1&gt;\u691c\u7d22\u30a8\u30f3\u30b8\u30f3&lt;\/h1&gt;\r\n                &lt;form method=&quot;POST&quot;&gt;\r\n                    &lt;label for=&quot;query&quot;&gt;\u691c\u7d22\u30ad\u30fc\u30ef\u30fc\u30c9:&lt;\/label&gt;\r\n                    &lt;input type=&quot;text&quot; name=&quot;query&quot; id=&quot;query&quot; required&gt;\r\n                    &lt;input type=&quot;submit&quot; value=&quot;\u691c\u7d22&quot;&gt;\r\n                &lt;\/form&gt;\r\n                {result_text}\r\n            &lt;\/body&gt;\r\n            &lt;\/html&gt;\r\n            &quot;&quot;&quot;\r\n    return &quot;&quot;&quot;\r\n    &lt;!DOCTYPE html&gt;\r\n    &lt;html&gt;\r\n    &lt;head&gt;\r\n        &lt;title&gt;\u691c\u7d22\u30a8\u30f3\u30b8\u30f3&lt;\/title&gt;\r\n        &lt;style&gt;\r\n            body {\r\n                font-family: Arial, sans-serif;\r\n                margin: 0 auto;\r\n                max-width: 800px;\r\n                padding: 20px;\r\n            }\r\n            h1 {\r\n                color: #333;\r\n            }\r\n            form {\r\n                margin-bottom: 20px;\r\n            }\r\n            input[type=&quot;text&quot;] {\r\n                margin-right: 10px;\r\n                padding: 10px;\r\n                width: calc(100% - 122px);\r\n            }\r\n            input[type=&quot;submit&quot;] {\r\n                padding: 10px 20px;\r\n                background-color: #4CAF50;\r\n                color: white;\r\n                border: none;\r\n                cursor: pointer;\r\n            }\r\n            input[type=&quot;submit&quot;]:hover {\r\n                background-color: #45a049;\r\n            }\r\n        &lt;\/style&gt;\r\n    &lt;\/head&gt;\r\n    &lt;body&gt;\r\n        &lt;h1&gt;\u691c\u7d22\u30a8\u30f3\u30b8\u30f3&lt;\/h1&gt;\r\n        &lt;form method=&quot;POST&quot;&gt;\r\n            &lt;label for=&quot;query&quot;&gt;\u691c\u7d22\u30ad\u30fc\u30ef\u30fc\u30c9:&lt;\/label&gt;\r\n            &lt;input type=&quot;text&quot; name=&quot;query&quot; id=&quot;query&quot; required&gt;\r\n            &lt;input type=&quot;submit&quot; value=&quot;\u691c\u7d22&quot;&gt;\r\n        &lt;\/form&gt;\r\n    &lt;\/body&gt;\r\n    &lt;\/html&gt;\r\n    &quot;&quot;&quot;\r\n\r\nif __name__ == &quot;__main__&quot;:\r\n    app.run(debug=True)\r\n<\/code><\/pre><\/div>\n\n\n\n<p><a href=\"https:\/\/voogle.onrender.com\/\">https:\/\/voogle.onrender.com\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/voogle.onrender.com\/<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[81,80,4,65],"tags":[],"class_list":["post-19021","post","type-post","status-publish","format-standard","hentry","category-css","category-html","category-programming","category-python"],"aioseo_notices":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/19021","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=19021"}],"version-history":[{"count":2,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/19021\/revisions"}],"predecessor-version":[{"id":19023,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/19021\/revisions\/19023"}],"wp:attachment":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=19021"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=19021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}