Meetup’s API
July 9, 2013 Leave a comment
One of the things I want to do at this year’s TRINUG’s code camp is to have self-service kiosks the way that Mark Wilson did for the Charlotte code camp. To that end, I took a look at Justin Saraceno’s awesome project on Github of consuming the Meetup API to do the door prize at TRINUG.
Instead of javascript, I am going to write the app in C# and side-load it onto a couple of kiosks. To that end, I built a web request/response to the meetup API:
- static void GetMeetupInformation()
- {
- String url = @"https://api.meetup.com/2/event/125656692?key=" + _apiKey;
- WebRequest request = WebRequest.Create(url);
- request.ContentType = @"application/json; charset=utf-8";
- WebResponse response = (HttpWebResponse)request.GetResponse();
- using (StreamReader reader = new StreamReader(response.GetResponseStream()))
- {
- String responseText = reader.ReadToEnd();
- Console.WriteLine(responseText);
- }
- }
I then pushed the response text into JSONToCSharp and got the following classes:
- namespace Tff.MeetUpAPI
- {
- public class Member
- {
- public string name { get; set; }
- public int member_id { get; set; }
- }
- public class MemberPhoto
- {
- public string photo_link { get; set; }
- public string thumb_link { get; set; }
- public int photo_id { get; set; }
- public string highres_link { get; set; }
- }
- public class Event
- {
- public string id { get; set; }
- public object time { get; set; }
- public string event_url { get; set; }
- public string name { get; set; }
- }
- public class Venue
- {
- public int id { get; set; }
- public string zip { get; set; }
- public double lon { get; set; }
- public bool repinned { get; set; }
- public string name { get; set; }
- public string state { get; set; }
- public string address_1 { get; set; }
- public double lat { get; set; }
- public string city { get; set; }
- public string country { get; set; }
- }
- public class Group
- {
- public int id { get; set; }
- public double group_lat { get; set; }
- public double group_lon { get; set; }
- public string join_mode { get; set; }
- public string urlname { get; set; }
- }
- public class Result
- {
- public string response { get; set; }
- public Member member { get; set; }
- public MemberPhoto member_photo { get; set; }
- public object created { get; set; }
- public Event @event { get; set; }
- public object mtime { get; set; }
- public int guests { get; set; }
- public int rsvp_id { get; set; }
- public Venue venue { get; set; }
- public Group group { get; set; }
- public string comments { get; set; }
- }
- public class Meta
- {
- public string lon { get; set; }
- public int count { get; set; }
- public string link { get; set; }
- public string next { get; set; }
- public int total_count { get; set; }
- public string url { get; set; }
- public string id { get; set; }
- public string title { get; set; }
- public long updated { get; set; }
- public string description { get; set; }
- public string method { get; set; }
- public string lat { get; set; }
- }
- public class RootObject
- {
- public List<Result> results { get; set; }
- public Meta meta { get; set; }
- }
- }
I then created a data structure that contains only the data that I care about and build a quick translator function:
- private static Attendee CreateAttendeeFromMember(Result result)
- {
- Attendee attendee = new Attendee();
- attendee.MemberId = result.member.member_id;
- attendee.Name = result.member.name;
- if (result.member_photo != null)
- {
- attendee.PhotoUrl = result.member_photo.thumb_link;
- }
- return attendee;
- }
Putting it together, I now have a way of parsing the event and getting a list of the attendees that I can use on the signin page:
- static List<Attendee> GetMeetupAttendees()
- {
- List<Attendee> attendees = new List<Attendee>();
- String url = @"https://api.meetup.com/2/rsvps/?rsvps=yes&event_id=125656692&key=" + _apiKey;
- WebRequest request = WebRequest.Create(url);
- request.ContentType = @"application/json; charset=utf-8";
- WebResponse response = (HttpWebResponse)request.GetResponse();
- using (StreamReader reader = new StreamReader(response.GetResponseStream()))
- {
- String responseText = reader.ReadToEnd();
- var outObject = JsonConvert.DeserializeObject<RootObject>(responseText);
- Attendee attendee = null;
- foreach (Result result in outObject.results)
- {
- attendee = CreateAttendeeFromMember(result);
- attendees.Add(attendee);
- }
- }
- return attendees;
- }
And in action:
- Console.WriteLine("Start");
- List<Attendee> attendees = GetMeetupAttendees();
- foreach (Attendee attendee in attendees)
- {
- Console.WriteLine(attendee.Name);
- }
- Console.WriteLine("End");
- Console.ReadKey();
gives: