Краткое руководство. Поиск в Интернете с помощью REST API Bing для поиска в Интернете и Node.js
Предупреждение
30 октября 2020 г. API-интерфейсы Поиск Bing перемещены из служб ИИ Azure в службы Поиск Bing. Эта документация приводится только для справки. Обновленную информацию см. в документации по API Поиска Bing. Инструкции по созданию ресурсов Azure для Поиска Bing приведены в статье Создание ресурса для Поиска Bing с помощью Azure Marketplace.
Используйте это краткое руководство, чтобы вызвать API Поиска в Интернете Bing. Это приложение Node.js отправляет поисковый запрос к API и показывает ответ в формате JSON. Хотя приложение написано на JavaScript, API представляет собой веб-службу RESTful, совместимую с большинством языков программирования.
Предварительные требования
Для работы с этим кратким руководством вам потребуется следующее:
- Node.js 6 или более поздней версии;
- ключ подписки;
Создание ресурса Azure
Чтобы начать работу с API Поиска в Интернете Bing, создайте один из следующих ресурсов Azure.
- доступен на портале Azure до удаления.
- Используйте бесплатную ценовую категорию, чтобы опробовать службу, а затем выполните обновление до платного уровня для рабочей среды.
- доступен на портале Azure до удаления.
- Используйте один и тот же ключ и конечную точку для приложений в нескольких службах ИИ Azure.
Создание проекта и объявление обязательных модулей
Создайте проект Node.js в используемой вами интегрированной среде разработки или редакторе. Затем скопируйте следующий фрагмент кода в проект в файле с именем search.js.
// Use this simple app to query the Bing Web Search API and get a JSON response.
// Usage: node search.js "your query".
const https = require('https')
Настройка ключа подписки
Для хранения ключа подписки в фрагменте кода используется переменная среды AZURE_SUBSCRIPTION_KEY
, чтобы защитить ключи при развертывании кода.
Если вы не знакомы с переменными среды или вам нужно быстро запустить приложение, замените process.env['AZURE_SUBSCRIPTION_KEY']
ключом подписки, заданным в качестве строки.
const SUBSCRIPTION_KEY = process.env['AZURE_SUBSCRIPTION_KEY']
if (!SUBSCRIPTION_KEY) {
throw new Error('AZURE_SUBSCRIPTION_KEY is not set.')
}
Создание функции для выполнения запроса
Эта функция создает безопасный запрос GET и сохраняет поисковые запросы в качестве параметров запроса в имени пути.
Для значения
hostname
можно использовать глобальную конечную точку в следующем коде или конечную точку пользовательского поддомена, отображаемую на портале Azure для вашего ресурса.Используйте
encodeURIComponent
для экранирования недопустимых символов. Ключ подписки передается в заголовке.На обратный вызов будет получен ответ, который описывает событие
data
для агрегирования текста JSON, событиеerror
для регистрации любых проблем и событиеend
для получения сведений о том, когда сообщение должно считаться полным.В итоге приложение выводит соответствующие заголовки и текст сообщения. Вы можете настроить цвета и задать глубину в соответствии с вашими предпочтениями. Значение
1
глубины делает сводку по ответу удобной для просмотра.
function bingWebSearch(query) {
https.get({
hostname: 'api.cognitive.microsoft.com',
path: '/bing/v7.0/search?q=' + encodeURIComponent(query),
headers: { 'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY },
}, res => {
let body = ''
res.on('data', part => body += part)
res.on('end', () => {
for (var header in res.headers) {
if (header.startsWith("bingapis-") || header.startsWith("x-msedge-")) {
console.log(header + ": " + res.headers[header])
}
}
console.log('\nJSON Response:\n')
console.dir(JSON.parse(body), { colors: false, depth: null })
})
res.on('error', e => {
console.log('Error: ' + e.message)
throw e
})
})
}
Получение запроса
Рассмотрим аргументы программы, чтобы найти запрос. Первым аргументом является путь к узлу, вторым — имя файла, а третьим — запрос. Если запрос отсутствует, используется запрос по умолчанию "Службы ИИ Microsoft Azure".
const query = process.argv[2] || 'Microsoft Cognitive Services'
Выполнение запроса и вывод ответа
Завершив определение, вызовите функцию.
bingWebSearch(query)
Сборка
А теперь выполните код с помощью команды node search.js "<your query>"
.
Вы можете сверить свой код с нашим (здесь он приведен полностью):
const https = require('https')
const SUBSCRIPTION_KEY = process.env['AZURE_SUBSCRIPTION_KEY']
if (!SUBSCRIPTION_KEY) {
throw new Error('Missing the AZURE_SUBSCRIPTION_KEY environment variable')
}
function bingWebSearch(query) {
https.get({
hostname: 'api.cognitive.microsoft.com',
path: '/bing/v7.0/search?q=' + encodeURIComponent(query),
headers: { 'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY },
}, res => {
let body = ''
res.on('data', part => body += part)
res.on('end', () => {
for (var header in res.headers) {
if (header.startsWith("bingapis-") || header.startsWith("x-msedge-")) {
console.log(header + ": " + res.headers[header])
}
}
console.log('\nJSON Response:\n')
console.dir(JSON.parse(body), { colors: false, depth: null })
})
res.on('error', e => {
console.log('Error: ' + e.message)
throw e
})
})
}
const query = process.argv[2] || 'Microsoft Cognitive Services'
bingWebSearch(query)
Пример ответа в формате JSON
Ответы из API Bing для поиска в Интернете возвращаются в формате JSON. Представленный пример сокращен для отображения только одного результата.
{
"_type": "SearchResponse",
"queryContext": {
"originalQuery": "Microsoft Cognitive Services"
},
"webPages": {
"webSearchUrl": "https://www.bing.com/search?q=Microsoft+cognitive+services",
"totalEstimatedMatches": 22300000,
"value": [
{
"id": "https://api.cognitive.microsoft.com/api/v7/#WebPages.0",
"name": "Microsoft Cognitive Services",
"url": "https://www.microsoft.com/cognitive-services",
"displayUrl": "https://www.microsoft.com/cognitive-services",
"snippet": "Knock down barriers between you and your ideas. Enable natural and contextual interaction with tools that augment users' experiences via the power of machine-based AI. Plug them in and bring your ideas to life.",
"deepLinks": [
{
"name": "Face",
"url": "https://azure.microsoft.com/services/cognitive-services/face/",
"snippet": "Add facial recognition to your applications to detect, identify, and verify faces using a Face service from Microsoft Azure. ... Cognitive Services; Face service;"
},
{
"name": "Text Analytics",
"url": "https://azure.microsoft.com/services/cognitive-services/text-analytics/",
"snippet": "Cognitive Services; Text Analytics API; Text Analytics API . Detect sentiment, ... you agree that Microsoft may store it and use it to improve Microsoft services, ..."
},
{
"name": "Computer Vision API",
"url": "https://azure.microsoft.com/products/ai-services?activetab=pivot:visiontab",
"snippet": "Extract the data you need from images using optical character recognition and image analytics with Computer Vision APIs from Microsoft Azure."
},
{
"name": "Emotion",
"url": "https://www.microsoft.com/cognitive-services/emotion-api",
"snippet": "Cognitive Services Emotion API - microsoft.com"
},
{
"name": "Bing Speech API",
"url": "https://azure.microsoft.com/services/cognitive-services/speech/",
"snippet": "Add speech recognition to your applications, including text to speech, with a speech API from Microsoft Azure. ... Cognitive Services; Bing Speech API;"
},
{
"name": "Get Started for Free",
"url": "https://azure.microsoft.com/services/cognitive-services/",
"snippet": "Add vision, speech, language, and knowledge capabilities to your applications using intelligence APIs and SDKs from Cognitive Services."
}
]
}
]
},
"relatedSearches": {
"id": "https://api.cognitive.microsoft.com/api/v7/#RelatedSearches",
"value": [
{
"text": "microsoft bot framework",
"displayText": "microsoft bot framework",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+bot+framework"
},
{
"text": "microsoft cognitive services youtube",
"displayText": "microsoft cognitive services youtube",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+youtube"
},
{
"text": "microsoft cognitive services search api",
"displayText": "microsoft cognitive services search api",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+search+api"
},
{
"text": "microsoft cognitive services news",
"displayText": "microsoft cognitive services news",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+news"
},
{
"text": "ms cognitive service",
"displayText": "ms cognitive service",
"webSearchUrl": "https://www.bing.com/search?q=ms+cognitive+service"
},
{
"text": "microsoft cognitive services text analytics",
"displayText": "microsoft cognitive services text analytics",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+text+analytics"
},
{
"text": "microsoft cognitive services toolkit",
"displayText": "microsoft cognitive services toolkit",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+toolkit"
},
{
"text": "microsoft cognitive services api",
"displayText": "microsoft cognitive services api",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+api"
}
]
},
"rankingResponse": {
"mainline": {
"items": [
{
"answerType": "WebPages",
"resultIndex": 0,
"value": {
"id": "https://api.cognitive.microsoft.com/api/v7/#WebPages.0"
}
}
]
},
"sidebar": {
"items": [
{
"answerType": "RelatedSearches",
"value": {
"id": "https://api.cognitive.microsoft.com/api/v7/#RelatedSearches"
}
}
]
}
}
}