Source code for packages.meetup.group_details

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


[docs]class NoGroupFound(Exception): '''Exception should no group be found by the Meetup API''' def __init__(self, group_urlname): super().__init__("No such group found: {}".format(group_urlname))
[docs]@retry(wait_random_min=200, wait_random_max=600, stop_max_attempt_number=10) def get_group_details(group_urlname, max_results, avoid_exception=True): '''Hit the Meetup API for the details of a specified groups. Args: group_urlname (str): A Meetup group urlname max_results (int): Total number of results to return per API request. Returns: (:obj:`list` of :obj:`dict`): Meetup API response data ''' params = dict(sign='true', fields='topics', page=max_results) params['key'] = meetup_utils.get_api_key() r = requests.get('https://api.meetup.com/{}'.format(group_urlname), params=params) if r.text == "": return {} group_info = r.json() if 'errors' in group_info: if avoid_exception: for err in group_info['errors']: if err["code"] == "group_error": return {} raise NoGroupFound(group_urlname) return group_info
if __name__ == "__main__": import json logging.getLogger().setLevel(logging.INFO) # Load all groups that have been found groups_members = [] for dsname in ['members_groups', 'groups_members']: with open('data/{}.json'.format(dsname), 'r') as f: groups_members += json.load(f) # Get each group details _output = [] for row in groups_members: logging.info(row['group_urlname']) _info = get_group_details(row['group_urlname'], max_results=200) _output.append(_info) # Flatten the output output = meetup_utils.flatten_data(_output, keys = [('category', 'name'), ('category', 'shortname'), ('category', 'id'), 'created', 'country', 'city', 'description', 'id', 'lat', 'lon', 'members', 'name', 'topics', 'urlname']) # Write the output meetup_utils.save_sample(output, 'data/group_details.json', 20)