public static List <TaggableSource> GetFacebookPages(Calinfo calinfo, string location) { var search_template = String.Format("site:www.facebook.com/__TARGET__ \"{0}\"", location); var search_for_fan_pages = search_template.Replace("__TARGET__", "pages"); var search_for_groups = search_template.Replace("__TARGET__", "groups"); var stats = new Dictionary <string, object>(); var fan_page_results = Search.BingSearch(search_for_fan_pages, 1000, stats); // var group_results = Search.BingSearch(search_for_groups, 1000, stats); // doesn't work, location string won't usually appear var group_results = new List <SearchResult>(); // placeholder for now var bing_results = fan_page_results.Concat(group_results).ToList(); var taggable_sources = InitializeTaggables(calinfo, "facebook"); var seen_ids = new List <string>(); string name_and_pk = "facebooksources"; var settings = GenUtils.GetSettingsFromAzureTable(); var options = new ParallelOptions(); Parallel.ForEach(source: bing_results, parallelOptions: options, body: (result) => //foreach (var result in bing_results) { try { var url = Regex.Replace(result.url, @"\?.+", ""); // remove query string if any var name = Regex.Match(result.url, "facebook.com/(pages|groups)/([^/]+)").Groups[2].Value; name = name.Replace('-', ' '); var fb_id = Utils.id_from_fb_fanpage_or_group(url); if (seen_ids.Exists(x => x == fb_id)) { return; } else { seen_ids.Add(fb_id); } string slat = null; string slon = null; var ical = new DDay.iCal.iCalendar(); var facebook_access_token = settings["facebook_access_token"]; // todo: merge with code in collector var j_obj = Utils.GetFacebookEventsAsJsonObject(fb_id, facebook_access_token); var events = Utils.iCalendarizeJsonObjectFromFacebook(j_obj, calinfo, ical, slat, slon, settings); if (events.Count == 0) // no calendar on this page { return; } string page; if (FacebookPageMatchesLocation(url, location, settings, out page) == false) { return; } string origin_url = ""; if (!String.IsNullOrEmpty(page)) { origin_url = GetFacebookPageOrGroupOriginUrl(page); } var ical_url = string.Format("http://{0}/ics_from_fb_page?fb_id={1}&elmcity_id={2}", ElmcityUtils.Configurator.appdomain, fb_id, calinfo.id); var has_future_events = FacebookPageHasFutureEvents(events, calinfo); var taggable = new TaggableSource(name, calinfo.id, url + "?sk=events", ical_url, has_future_events, origin_url); taggable_sources.Add(taggable); RememberTaggable(name_and_pk, fb_id, taggable); } catch (Exception e) { GenUtils.PriorityLogMsg("exception", "GetFacebookPages", e.Message + e.StackTrace); return; } }); return(taggable_sources); }