Skip to content

Instantly share code, notes, and snippets.

Last active January 4, 2022 16:01
Show Gist options
  • Save samatjain/5ae8860b0754eb1fa3cc to your computer and use it in GitHub Desktop.
Save samatjain/5ae8860b0754eb1fa3cc to your computer and use it in GitHub Desktop.
Dump all the previous events for a group. See
#!/usr/bin/env python3
import collections
import datetime
import pprint
import click
import jinja2
import requests
template = '''
<!DOCTYPE html>
<html lang="en">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name=viewport content="width=device-width, initial-scale=1.0">
<style type="text/css">
td.date_pretty {
text-align: right;
<h1>Previous events for <a href="{{ group_name }}/">{{ group_name }}</a>
{% for grouping_name, events in groupings.items() %}
<h2>{{ grouping_name }}</h2>
<table>{% for i in events %}
<tr><td class="date_pretty">{{ i.date_pretty }}</td><td><a href="{{ i.event_url }}">{{ }}</a></td></tr>
{%- endfor %}</table>
{% endfor %}
default_payload = { 'status': 'past' }
def generate_html(group_name, g):
global template
je = jinja2.Environment()
jt = je.from_string(template)
out = jt.render(group_name=group_name, groupings=g)
return out
def generate_events(group_name, api_key):
offset = 0
while True:
offset_payload = { 'offset': offset,
'key': api_key,
'group_urlname': group_name }
payload = default_payload.copy()
# Above is the equivalent of jQuery.extend()
# for Python 3.5: payload = {**default_payload, **offset_payload}
r = requests.get('', params=payload)
json = r.json()
results, meta = json['results'], json['meta']
for item in results:
yield item
# if we no longer have more results pages, stop…
if not meta['next']:
offset = offset + 1
@click.option('--groupname', 'group_name', default='jornadahikers', help='Name of group in URL, i.e.<groupname>/')
@click.option('--apikey', 'api_key', envvar='MEETUP_API_KEY', help='Your API key, from')
def go(group_name, api_key):
all_events = list(generate_events(group_name, api_key))
for event in all_events:
# convert time returned by Meetup API
time = int(event['time'])/1000
time_obj = datetime.datetime.fromtimestamp(time)
# create a pretty-looking date, and group by month
date_pretty = time_obj.strftime('%a %b %-d')
grouping_name = time_obj.strftime('%b %Y')
event['grouping_name'] = grouping_name
event['date_pretty'] = date_pretty
# group by month
groupings = collections.OrderedDict()
for event in all_events:
grouping_name = event['grouping_name']
grouping = groupings.get(grouping_name, [])
groupings[grouping_name] = grouping
print(generate_html(group_name, groupings))
if __name__ == '__main__':
Copy link

They now have an API which can list all the past events in JSON, you just have to give status as "past"

Copy link

newswim commented Jan 26, 2018

on version 3 you can is this previewer and under "fields" add the key past_event_count.

Copy link

brisdaz commented Feb 10, 2020

Is this still up to date with the Meetup API updates?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment