public static List<TaggableSource> GetEventBriteOrganizers(Calinfo calinfo, Dictionary<string, string> settings)
{
var organizers = new List<TaggableSource>();
var name_and_pk = "eventbritesources";
var collector = new Collector(calinfo, settings);
string method = "event_search";
string args = collector.MakeEventBriteArgs();
int page_count = collector.GetEventBritePageCount(method, args);
var results = from evt in collector.EventBriteIterator(page_count, method, args)
select new
{
id = evt.Descendants("organizer").Descendants("id").FirstOrDefault().Value,
name = evt.Descendants("organizer").Descendants("name").FirstOrDefault().Value,
city = evt.Descendants("venue").Descendants("city").FirstOrDefault().Value.ToLower()
};
results = results.Distinct();
Parallel.ForEach(source: results, body: (id_name_city) =>
{
if (id_name_city.city != calinfo.City)
return;
var organizer_id = id_name_city.id;
var name = id_name_city.name;
var home_url = "http://www.eventbrite.com/org/" + organizer_id;
var escaped_name = Uri.EscapeDataString(name);
var ical_url = string.Format("http://{0}/ics_from_eventbrite_organizer?organizer={1}&elmcity_id={2}", ElmcityUtils.Configurator.appdomain, escaped_name, calinfo.id);
var taggable = new TaggableSource(name, calinfo.id, home_url, ical_url, id_name_city.city);
RememberTaggable(name_and_pk, organizer_id, taggable);
organizers.Add(taggable);
});
return organizers;
}