如何通过MS Cognitive Search将Bing News Search API实现到网站中

时间:2016-12-03 20:55:21

标签: python api search bing

对于API来说,我有点无能为力,但我相信这是我需要的代码。这是一个通过Microsoft认知服务调用Bing News Search API的python程序,这是调用API的新方法。我的问题是如何实现/嵌入到我的实际网站(由html,css,js和server.js文件组成)的结果?基本上,哪些部分需要去哪里?我非常感谢你能给我的任何帮助。谢谢!

import requests, requests.utils
from py_ms_cognitive_search import PyMsCognitiveSearch

##
##
## News Search
##
##

class PyMsCognitiveNewsException(Exception):
pass

class PyMsCognitiveNewsSearch(PyMsCognitiveSearch):

SEARCH_NEWS_BASE = 'https://api.cognitive.microsoft.com/bing/v5.0/news/search'

def __init__(self, api_key, query, safe=False, custom_params=''):
    query_url = self.SEARCH_NEWS_BASE + custom_params
    PyMsCognitiveSearch.__init__(self, api_key, query, query_url, safe=safe)

def _search(self, limit, format):
    '''
    Returns a list of result objects, with the url for the next page MsCognitive search url.
    '''
    payload = {
      'q' : self.query,
      'count' : '50', #currently 50 is max per search.
      'offset': self.current_offset,
      #'mkt' : 'en-us', #optional
      #'safesearch' : 'Moderate', #optional
    }
    headers = { 'Ocp-Apim-Subscription-Key' : self.api_key }
    response = requests.get(self.QUERY_URL, params=payload, headers=headers)
    json_results = self.get_json_results(response)

    packaged_results = [NewsResult(single_result_json) for single_result_json in json_results["value"]]
    self.current_offset += min(50, limit, len(packaged_results))
    return packaged_results

class NewsResult(object):
'''
The class represents a SINGLE news result.
Each result will come with the following:
the variable json will contain the full json object of the result.
category: category of the news
name: name of the article (title)
url: the url used to display.
image_url: url of the thumbnail
date_published: the date the article was published
description: description for the result
Not included: about, provider, mentions
'''

def __init__(self, result):
    self.json = result
    self.category = result.get('category')
    #self.about = result['about']
    self.name = result.get('name')
    self.url = result.get('url')
    try:
        self.image_url = result['image']['thumbnail']['contentUrl']
    except KeyError as kE:
        self.image_url = None
    self.date_published = result.get('datePublished')
    self.description = result.get('description')

1 个答案:

答案 0 :(得分:0)

_search函数返回结果列表(packaged_results)。如果您想在网站中显示这些内容,则必须使用Python脚本加载/呈现html文件。这就是像Django这样的框架派上用场的地方,其中使用了视图和模板。

Django中搜索页面的基本视图(进入应用程序的views.py模块):

def search(request):
    result_list = []

    if request.method=='POST':
        query = request.POST['query'].strip()
        if query:
            result_list = _search(query)

    return render(request, 'web/search.html', {'result_list': result_list})

在search.html模板的正文中(使用Django模板语言,以及每个新闻结果的问题作者类):

<div>
        {% if result_list %}
        <h3>Results</h3>
        <!-- Display search results -->
        <div>
            {% for result in result_list %}
            <div>
                <h4>
                    {{ result.category }}</a>
                </h4>
                <p>{{ result.about }}</p>
            </div>
            {% endfor %}
        </div>
        {% endif %}
</div>

如果您希望将Django用于此特定问题,请参阅编写视图的文档和Django模板的另一个文档,这些模板都是HTML文件。

https://docs.djangoproject.com/en/1.10/topics/http/views/

https://docs.djangoproject.com/en/1.10/topics/templates/