빠른 시작: C#을 사용하여 Bing Entity Search REST API에 검색 요청 보내기
경고
2020년 10월 30일에 Bing Search API가 Azure AI 서비스에서 Bing Search Services로 이동되었습니다. 이 문서는 참조용으로만 제공됩니다. 업데이트된 문서는 Bing search API 문서를 참조하세요. Bing 검색을 위한 새 Azure 리소스 만들기에 대한 지침은 Azure Marketplace를 통해 Bing Search 리소스 만들기를 참조하세요.
이 빠른 시작을 사용하여 Bing Entity Search API를 처음 호출하고 JSON 응답을 봅니다. 이 간단한 C# 애플리케이션은 뉴스 검색 쿼리를 API에 보내고, 응답을 표시합니다. 이 애플리케이션의 소스 코드는 GitHub에 제공됩니다.
이 애플리케이션은 C#으로 작성되었지만 API는 대부분의 프로그래밍 언어와 호환되는 RESTful 웹 서비스입니다.
사전 요구 사항
- Visual Studio 2017 이상의 모든 버전.
- 또는 Linux나 MacOS를 사용하는 경우 Visual Studio Code 및 .NET Core를 사용하여 이 빠른 시작을 수행할 수 있습니다.
- 체험판 Azure 계정
Azure 리소스 만들기
다음 Azure 리소스 중 하나를 만들어 Bing Entity Search API 사용을 시작합니다.
Bing Entity Search 리소스
- 리소스를 삭제할 때까지 Azure Portal을 통해 사용할 수 있습니다.
- 평가판 가격 책정 계층을 사용하여 서비스를 사용해보고, 나중에 프로덕션용 유료 계층으로 업그레이드합니다.
- Bing Entity Search는 Bing Search v7 리소스의 유료 계층에서도 제공됩니다.
다중 서비스 리소스
- 리소스를 삭제할 때까지 Azure Portal을 통해 사용할 수 있습니다.
- 여러 Azure AI 서비스에서 애플리케이션에 동일한 키와 엔드포인트를 사용합니다.
프로젝트 만들기 및 초기화
Visual Studio에서 새 C# 콘솔 솔루션을 만듭니다.
Newtonsoft.Json NuGet 패키지를 추가합니다.
- 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭합니다.
- NuGet 패키지 관리를 선택합니다.
- Newtonsoft.Json을 검색하여 선택한 다음, 패키지를 설치합니다.
그런 다음, 주 코드 파일에 다음 네임스페이스를 추가합니다.
using Newtonsoft.Json; using System; using System.Net.Http; using System.Text;
새 클래스를 만들고 API 엔드포인트, 구독 키 및 검색하려는 쿼리에 대한 변수를 추가합니다. 다음 코드에서 글로벌 엔드포인트를 사용하거나 리소스의 Azure Portal에 표시되는 사용자 지정 하위 도메인 엔드포인트를 사용할 수 있습니다.
namespace EntitySearchSample { class Program { static string host = "https://api.bing.microsoft.com"; static string path = "/v7.0/search"; static string market = "en-US"; // NOTE: Replace this example key with a valid subscription key. static string key = "ENTER YOUR KEY HERE"; static string query = "italian restaurant near me"; //... } }
요청 보내기 및 API 응답 받기
클래스 내에서
Search()
라는 함수를 만듭니다. 이 함수 내에서 새HttpClient
개체를 만들고 구독 키를Ocp-Apim-Subscription-Key
헤더에 추가합니다.호스트와 경로를 결합하여 요청의 URI를 구성합니다. 그런 다음, 시장을 추가하고 쿼리를 URL로 인코딩합니다.
client.GetAsync()
를 기다려서 HTTP 응답을 가져온 다음,ReadAsStringAsync()
를 기다려서 JSON 응답을 저장합니다.JsonConvert.DeserializeObject()
를 사용하여 JSON 문자열의 서식을 지정한 후 콘솔에 출력합니다.async static void Search() { //... HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key); string uri = host + path + "?mkt=" + market + "&q=" + System.Net.WebUtility.UrlEncode(query); HttpResponseMessage response = await client.GetAsync(uri); string contentString = await response.Content.ReadAsStringAsync(); dynamic parsedJson = JsonConvert.DeserializeObject(contentString); Console.WriteLine(parsedJson); }
애플리케이션의
Main()
메서드에서Search()
함수를 호출합니다.static void Main(string[] args) { Search(); Console.ReadLine(); }
예제 JSON 응답
성공한 응답은 다음 예제와 같이 JSON으로 반환됩니다.
{
"_type": "SearchResponse",
"queryContext": {
"originalQuery": "italian restaurant near me",
"askUserForLocation": true
},
"places": {
"value": [
{
"_type": "LocalBusiness",
"webSearchUrl": "https://www.bing.com/search?q=sinful+bakery&filters=local...",
"name": "Liberty's Delightful Sinful Bakery & Cafe",
"url": "https://www.contoso.com/",
"entityPresentationInfo": {
"entityScenario": "ListItem",
"entityTypeHints": [
"Place",
"LocalBusiness"
]
},
"address": {
"addressLocality": "Seattle",
"addressRegion": "WA",
"postalCode": "98112",
"addressCountry": "US",
"neighborhood": "Madison Park"
},
"telephone": "(800) 555-1212"
},
. . .
{
"_type": "Restaurant",
"webSearchUrl": "https://www.bing.com/search?q=Pickles+and+Preserves...",
"name": "Munson's Pickles and Preserves Farm",
"url": "https://www.princi.com/",
"entityPresentationInfo": {
"entityScenario": "ListItem",
"entityTypeHints": [
"Place",
"LocalBusiness",
"Restaurant"
]
},
"address": {
"addressLocality": "Seattle",
"addressRegion": "WA",
"postalCode": "98101",
"addressCountry": "US",
"neighborhood": "Capitol Hill"
},
"telephone": "(800) 555-1212"
},
. . .
]
}
}