-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi_groups.py
More file actions
146 lines (105 loc) · 5.1 KB
/
api_groups.py
File metadata and controls
146 lines (105 loc) · 5.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
from __future__ import unicode_literals
import sys
# sys.path.append('~/documents/meetup/find_group_ids')
import find_group_ids as select
import psycopg2
from config import Config
import requests
import json
import time
import codecs
import datetime
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
def insert_into_groups(group_data):
""" insert multiple vendors into the vendors table """
sql = "INSERT INTO groups(group_id, name, city, lat, lon, link, who, members, description, urlname, date_of_creation,category_name, category_id, meta_category_name, meta_category_id, meta_category_category_ids, organizer_id, created_at) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
# ON CONFLICT (group_id) DO UPDATE SET (name, city, lat, lon, link, who, members, description, urlname, date_of_creation,category_name, category_id, meta_category_name, meta_category_id, meta_category_category_ids, organizer_id, updated_at) =( EXCLUDED.name, EXCLUDED.city , EXCLUDED.lat, EXCLUDED.lon, EXCLUDED.link, EXCLUDED.who, EXCLUDED.members, EXCLUDED.description, EXCLUDED.urlname, EXCLUDED.date_of_creation, EXCLUDED.category_name, EXCLUDED.category_id, EXCLUDED.meta_category_name, EXCLUDED.meta_category_id, EXCLUDED.meta_category_category_ids, EXCLUDED.organizer_id, EXCLUDED.updated_at)
# (550,'group1','entrepreneurship',54,'vancouver','business',6683,'this is a group',49.03,123.06,'http://example.com',[56,32],'yuppies',56,100,)
conn = None
try:
# read database configuration
params = Config()
# connect to the PostgreSQL database
conn = psycopg2.connect(par)
# conn = psycopg2.connect(params)
# conn = psycopg2.connect(**params)
# create a new cursor
cur = conn.cursor()
# execute the INSERT statement
cur.executemany(sql,group_data)
# commit the changes to the database
conn.commit()
# close communication with the database
cur.close()
print 'success'
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
def main():
# cities =[("Vancouver","BC")]
data_to_store= []
# predefined data columns to extract
columns = ['id', 'name', 'city', 'lat', 'lon', 'link','who','members','description', 'urlname', 'created' ] #10
cat_columns = { 'category': ['name','id'], #2
'meta_category': ['name','id','category_ids'] #3
}
leader = { 'organizer': 'id' } #1
response = get_results({"country":"CA", "city":"Vancouver", "radius": 1, "key":settings.api_key, "page":3, "offset":1 })
print response
# iterate though located data and add to tuple that will act as record
for grp_index,group in enumerate(response):
row_entry = ()
for column in columns:
try:
if column == 'created':
print '************************'
date = (datetime.datetime.fromtimestamp(response[grp_index][column]/1000).date())
print date, '*******'
row_entry += (date,)
else:
row_entry += (response[grp_index][column],)
except NameError:
print 'var not defined'
row_entry += (None,)
for key, values in cat_columns.iteritems():
for index, attr in enumerate(values):
row_entry += inspect_function(values[index], key, grp_index, response)
# row_entry += inspect_function('test', key, grp_index, response)
# try:
# row_entry += (response[grp_index][key][values[index]],)
# except NameError:
# print 'var not defined'
# row_entry += (None,)
for key, value in leader.iteritems():
row_entry += inspect_function(value, key, grp_index, response)
# try:
# row_entry += (response[grp_index][key][value],)
# except NameError:
# print 'var not defined'
# row_entry += (None,)
row_entry += (datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),)
index = 0
for item in row_entry:
index +=1
print index, ' ',item, '\n'
data_to_store.append(row_entry)
insert_into_groups(data_to_store)
def get_results(params):
request = requests.get("http://api.meetup.com/find/groups",params=params)
data = request.json()
return data
def inspect_function(attr, key, grp_index, response):
if attr in response[grp_index]:
return (response[grp_index][attr],)
else:
return (None,)
print "none"
if __name__=="__main__":
# main()
ids = select.select_group_ids()
print ids
## Run this script and send it into a csv:
## python meetup-pages-names-dates.py > meetup_groups.csv