Как использовать API поиска Bing в Windows Phone?

Я пытаюсь использовать API поиска Bing, чтобы найти изображения в качестве фона для плиток внутри моего приложения. Я включил BingSearchContainer.cs в свой проект, но не могу заставить его работать с приведенным здесь примером кода.

Буду признателен за любые рекомендации по использованию Bing Search API в моем приложении для Windows Phone 8!

Спасибо за любой ответ.


person Mikael Dúi Bolinder    schedule 27.02.2013    source источник


Ответы (1)


Я ожидаю, что у вас уже есть AccountKey, поэтому я не буду говорить, что вам нужно его получить.

Реализация

  1. Прежде всего добавьте BingSearchContainer.cs. к вашему проекту
  2. Реализуйте пример кода C#, который можно найти в Кратком руководстве по Bing API.
  3. После этого щелкните правой кнопкой мыши Ссылки и выберите Управление пакетами NuGet..., найдите и установите Microsoft.Data.Services.Client.WindowsP.
  4. Измените пример кода, чтобы он работал с Windows Phone:

    using Bing;
    using System;
    using System.Data.Services.Client;
    using System.Linq;
    using System.Net;
    
    namespace StackOverflow.Samples.BingSearch
    {
        public class Finder
        {
            public void FindImageUrlsFor(string searchQuery)
            {
                // Create a Bing container. 
                string rootUri = "https://api.datamarket.azure.com/Bing/Search";
                var bingContainer = new Bing.BingSearchContainer(new Uri(rootUri));
                bingContainer.UseDefaultCredentials = false;
    
                // Replace this value with your account key. 
                var accountKey = "YourAccountKey";
    
                // Configure bingContainer to use your credentials. 
                bingContainer.Credentials = new NetworkCredential(accountKey, accountKey);
    
                // Build the query. 
                var imageQuery = bingContainer.Image(query, null, null, null, null, null, null);
    
                imageQuery.BeginExecute(_onImageQueryComplete, imageQuery);
    
            }
    
            // Handle the query callback. 
            private void _onImageQueryComplete(IAsyncResult imageResults)
            {
                // Get the original query from the imageResults.
                DataServiceQuery<Bing.ImageResult> query =
                    imageResults.AsyncState as DataServiceQuery<Bing.ImageResult>;
    
                var resultList = new List<string>();
    
                foreach (var result in query.EndExecute(imageResults))
                    resultList.Add(result.MediaUrl);
    
                FindImageCompleted(this, resultList);
            }
    
            public event FindImageUrlsForEventHandler FindImageUrlsForCompleted;
            public delegate void FindImageUrlsForEventHandler(object sender, List<string> result);
        }
    }
    

Пример

  1. А теперь давайте воспользуемся кодом, который я вам предоставил:

    using Bing;
    using System;
    using System.Data.Services.Client;
    using System.Linq;
    using System.Net;
    
    namespace StackOverflow.Samples.BingSearch
    {
        public class MyPage
        {
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                var finder = new Finder();
                finder.FindImageUrlsForCompleted += finder_FindImageUrlsForCompleted;
                finder.FindImageUrlsFor("candy");
            }
    
            void finder_FindImageUrlsForCompleted(object sender, List<string> result)
            {
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    foreach (var s in result)
                        MyTextBox.Text += s + "\n";
                });
            }
        }
    }
    
person Mikael Dúi Bolinder    schedule 27.02.2013
comment
Я хочу интегрировать тот же API в приложение iOS. Не могли бы вы сказать мне, какую учетную запись мы должны иметь? и где мы можем зарегистрироваться для этого? Спасибо. - person Murali; 15.11.2013
comment
Я хочу добавить, что вы должны установить bingContainer.UseDefaultCredentials = false , как описано на social.msdn.microsoft.com/Forums/windowsazure/en-US/. - person redtuna; 27.11.2013
comment
Я реализовал это сейчас, @redtuna - person Mikael Dúi Bolinder; 06.06.2014