2016-07-02 11 views
3

コグニティブサービスWeb検索APIを学習したいので、ボットアプリケーションの作成を開始しました。私はすでにアカウントのサブキーと他の必要な情報も持っています。私は多くの記事を読んで、これについても2016ビデオを見ています。結果をデシリアライズしている間に問題があります。 私はこれを行うために使用できるプロキシクラスを見つけることができません。 私が使用しているURLはhttps://api.cognitive.microsoft.com/bing/v5.0/search/ で、以前のAPIバージョンのプロキシクラスが見つかりました。誰も私にこれらのサービスのためのVS 2015のAPI要求/応答のプロキシクラスを取得する方法を教えてもらえますか?Microsoft認知サービスWeb検索API - 除外問題

マイコードは次のようになります。

string BingSearchUrl = "https://api.cognitive.microsoft.com/bing/v5.0/search/"; 
    const string bingKey = "Key"; 

    public static async Task<string> Search(string query) 
    { 
     var client = HttpClientFactory.Create(); 
     var queryString = BingSearchUrl + "?q=" + query + "&count=10";   
     // Request headers 
     client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", bingKey); 
     client.DefaultRequestHeaders.Add("Accept", "application/json"); 

     // Request parameters 
     string r = await client.GetStringAsync(queryString); 
     var jsonResult = JsonConvert.DeserializeObject<Bing.ExpandableSearchResult>(r); 

     return jsonResult.Web.First().Title; 
+0

サービスは結果を返しますが、私がDeserializeObjectを表示しているときにnullを表示しています –

答えて

0

のようになります。このモデルでは、私は希望の結果を得ることができます。私の場合、他の答えで提示されているモデルは機能していません。

namespace BingSearchBot 
{ 
    public class RootObject 
    { 
     public string _type { get; set; } 
     public WebPages webPages { get; set; } 
     public RelatedSearches relatedSearches { get; set; } 
     public RankingResponse rankingResponse { get; set; } 
    } 
    public class WebPages 
    { 
     public string webSearchUrl { get; set; } 
     public int totalEstimatedMatches { get; set; } 
     public List<Value> value { get; set; } 
    } 
    public class Value 
    { 
     public string id { get; set; } 
     public string name { get; set; } 
     public string url { get; set; } 
     public List<About> about { get; set; } 
     public string displayUrl { get; set; } 
     public string snippet { get; set; } 
     public List<DeepLink> deepLinks { get; set; } 
     public string dateLastCrawled { get; set; } 
     public List<SearchTag> searchTags { get; set; } 
    } 
    public class About 
    { 
     public string name { get; set; } 
    } 

    public class DeepLink 
    { 
     public string name { get; set; } 
     public string url { get; set; } 
     public string snippet { get; set; } 
    } 

    public class SearchTag 
    { 
     public string name { get; set; } 
     public string content { get; set; } 
    } 
    public class Value2 
    { 
     public string text { get; set; } 
     public string displayText { get; set; } 
     public string webSearchUrl { get; set; } 
    } 

    public class RelatedSearches 
    { 
     public string id { get; set; } 
     public List<Value2> value { get; set; } 
    } 

    public class Value3 
    { 
     public string id { get; set; } 
    } 

    public class Item 
    { 
     public string answerType { get; set; } 
     public int resultIndex { get; set; } 
     public Value3 value { get; set; } 
    } 

    public class Mainline 
    { 
     public List<Item> items { get; set; } 
    } 

    public class RankingResponse 
    { 
     public Mainline mainline { get; set; } 
    } 
} 
0

結果を通じてjsonResult.value[0]することができますループ付きコード

public string BingSearchUrl = "https://api.cognitive.microsoft.com/bing/v5.0/search/"; 
     const string bingKey =[KEY]; 

     public async void Search() 
     { 
      var client = new HttpClient(); 
      var queryString = HttpUtility.ParseQueryString(string.Empty); 

      // Request headers 
      client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", bingKey); 

      // Request parameters 
      queryString["q"] = "microsoft"; 
      queryString["count"] = "10"; 
      queryString["offset"] = "0"; 
      queryString["mkt"] = "en-us"; 
      queryString["safeSearch"] = "Moderate"; 
      var uri = "https://api.cognitive.microsoft.com/bing/v5.0/news/search?" + queryString; 

      var response = await client.GetStringAsync(uri); 
      var jsonResult = JsonConvert.DeserializeObject<BingJson>(response); 

      string title = jsonResult.value[0].name.ToString(); 

     } 

の下に試してみてください。最初の結果は[0]です。

Iビン検索応答jsonを見てモデルクラスを作成しました。これは、

public class BingJson 
    { 
     public string _type { get; set; } 
     public Instrumentation instrumentation { get; set; } 
     public string readLink { get; set; } 
     public int totalEstimatedMatches { get; set; } 
     public Value[] value { get; set; } 
    } 

    public class Instrumentation 
    { 
     public string pingUrlBase { get; set; } 
     public string pageLoadPingUrl { get; set; } 
    } 

    public class Value 
    { 
     public string name { get; set; } 
     public string url { get; set; } 
     public string urlPingSuffix { get; set; } 
     public Image image { get; set; } 
     public string description { get; set; } 
     public About[] about { get; set; } 
     public Provider[] provider { get; set; } 
     public DateTime datePublished { get; set; } 
     public string category { get; set; } 
    } 

    public class Image 
    { 
     public Thumbnail thumbnail { get; set; } 
    } 

    public class Thumbnail 
    { 
     public string contentUrl { get; set; } 
     public int width { get; set; } 
     public int height { get; set; } 
    } 

    public class About 
    { 
     public string readLink { get; set; } 
     public string name { get; set; } 
    } 

    public class Provider 
    { 
     public string _type { get; set; } 
     public string name { get; set; } 
    } 
+0

これも同じ結果には役立ちませんでした。また、私の質問は、このWeb APIサービスのプロキシクラスをダウンロードする方法についてです。私はBing Searchの以前のバージョンを探しましたが、これをプロジェクトのService Referenceとして追加できますが、この新しいURLではサービス参照として追加することもWSDLを取得することもできません。以前のバージョンのプロキシで試してみましたが、それも私を助けませんでした。その非常に奇妙なことは、Web検索のためのすべてのドキュメントでは、Webの結果を得る方法について言及されていません。 –

+0

最後に、多くの試行の後、私はあなたのモデルの問題をうまく処理しているモデルを作成しました@codelahiruは、何らかの理由で非直列化されないArrayプロパティを含んでいます。 –

関連する問題