public static List<Dictionary<string, string>> BingImageSearch(string search_expression, int max)
{
HttpUtils.Wait(1);
var url_template = "http://api.search.live.net/json.aspx?AppId=" + CalendarAggregator.Configurator.bing_api_key + "&Market=en-US&Sources=Image&Adult=Strict&Query={0}&Image.Count={1}";
var results_list = new List<Dictionary<string, string>>();
Uri search_url;
search_url = new Uri(string.Format(url_template, search_expression, max));
var page = HttpUtils.RetryHttpRequestExpectingStatus(search_url.ToString(), HttpStatusCode.OK).DataAsString();
try
{
JObject o = (JObject)JsonConvert.DeserializeObject(page);
var results_query =
from result in o["SearchResponse"]["Image"]["Results"].Children()
select new Dictionary<string, string>() {
{ "Width", result.Value<int>("Width").ToString() ?? "" },
{ "Height", result.Value<int>("Height").ToString() ?? "" },
{ "MediaUrl", result.Value<string>("MediaUrl").ToString() ?? "" },
{ "Title", result.Value<string>("Title").ToString() ?? "" },
{ "Thumbnail", result["Thumbnail"].Value<string>("Url").ToString() ?? ""},
};
foreach (var result in results_query)
{
if (result == null)
continue;
var w = Convert.ToDouble(result["Width"]);
var h = Convert.ToDouble(result["Height"]);
if (w < 140)
continue;
if (h >= w)
continue;
var ratio = w / h;
if (ratio > 1.5)
continue;
results_list.Add(result);
}
}
catch
{
Console.WriteLine("BingImageSearch: " + search_expression);
}
return results_list;
}