Source code for packages.meetup.members_groups

import logging
import requests
import time
from retrying import retry
from . import meetup_utils


[docs]class NoMemberFound(Exception): '''Exception should no member be found by the Meetup API''' def __init__(self, member_id): super().__init__("No such member found: {}".format(member_id))
[docs]@retry(wait_random_min=200, wait_random_max=10000, stop_max_attempt_number=10) def get_member_details(member_id, max_results): '''Hit the Meetup API for details of a specified member Args: member_id (str): A Meetup member ID max_results (int): The maximum number of results with each API hit Returns: :obj:`list` of :obj:`dict`: Meetup API response json. ''' params = dict(sign='true', fields='memberships', page=max_results) params['key'] = meetup_utils.get_api_key() r = requests.get('https://api.meetup.com/members/{}'.format(member_id), params=params) member_info = r.json() if 'errors' in member_info: raise NoMemberFound(member_id) return member_info
[docs]def get_member_groups(member_info): '''Extract the groups data from Meetup membership information. Args: member_id (str): A Meetup member ID member_info (:obj:`list` of :obj:`dict`): Meetup member API response json. Returns: :obj:`list` of :obj:`dict`: List of unique member-group combinations ''' output = [] # If memberships aren't in the data the ignore this member member_id=int(member_info['id']) row = dict(member_id=member_id) if 'memberships' not in member_info: logging.warning('No info for {}'.format(member_id)) output.append(row) return output # Group information exists for both member and organizer entities for key in ['member', 'organizer']: if key not in member_info['memberships']: continue for membership in member_info['memberships'][key]: row["group_id"] = membership['group']['id'] row["group_urlname"] = membership['group']['urlname'] output.append(row.copy()) return output
if __name__ == "__main__": import json logging.getLogger().setLevel(logging.INFO) with open("data/groups_members.json", "r") as f: groups_members = json.load(f) # Generate the groups for these members output = [] for row in groups_members: member_info = get_member_details(row['member_id'], max_results=200) output += get_member_groups(member_info) # Write the output meetup_utils.save_sample(output, 'data/members_groups.json', 20)