Skip to content

Instantly share code, notes, and snippets.

@rickcnagy
Created March 25, 2014 04:13
Show Gist options
  • Save rickcnagy/9755148 to your computer and use it in GitHub Desktop.
Save rickcnagy/9755148 to your computer and use it in GitHub Desktop.
Adds a "Default Contact" person to each record in the PLD company database.
#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python
import requests
import math
import json
api_key = 'API_KEY'
base_url = "https://api.pipelinedeals.com/api/v3"
azreen_id = '25077'
def main():
r = PaginatedPldRequest()
r.params = {
'conditions[company_state]': 'Colorado',
'conditions[company_imported_at][from_date]': '2014-03-20'
}
r.url = '/companies.json'
r.function = requests.get
r.make_request()
while(r.has_next()):
company_id = r.next_entry()['id']
p = PldRequuest()
p.params = {
'person[first_name]': 'Default',
'person[last_name]': 'Contact',
'person[company_id]': company_id,
'person[type]': 'Lead',
'person[user_id]': azreen_id
}
p.function = requests.post
p.url = "/people.json"
p.make_request()
print p.json['first_name']
class PldRequuest(object):
def __init__(self):
self.params = None
self.url = None
self.function = None
self.response = None
self.text = None
self.json = None
def make_request(self):
self.response = self.function(self.full_url(), params=self.full_params())
self.text = self.response.text
self.json = self.response.json()
def full_params(self):
basic_param = {'api_key': api_key}
return dict(basic_param.items() + self.params.items())
def full_url(self):
return base_url + self.url
class PaginatedPldRequest(object):
def __init__(self):
self.params = None
self.url = None
self.function = None
self.response = None
self.text = None
self.json = None
self.current_entry = None
self.pagination = None
self.data = None
self.per_page = None
self.total_entries = 0
self.total_pages = 0
self.current_page = 1
self.current_entry = 1
def make_request(self):
self.response = self.function(self.full_url(), params=self.full_params())
self.text = self.response.text
self.json = self.response.json()
self.pagination = self.json['pagination']
self.data = self.json['entries']
self.process_response()
def full_params(self):
basic_param = {'api_key': api_key, 'page': self.current_page}
return dict(basic_param.items() + self.params.items())
def full_url(self):
return base_url + self.url
def process_response(self):
self.per_page = self.pagination['per_page']
self.total_entries = self.pagination['total']
self.total_pages = math.ceil(float(self.total_entries) / self.per_page)
def has_next(self):
return self.has_next_on_page() or self.has_next_page()
def next_entry(self):
next = None
if not self.has_next_on_page() and self.has_next_page():
self.get_next_page()
if self.has_next_on_page():
next = self.data[self.current_entry - 1]
self.current_entry += 1
return next
def has_next_entry(self):
return (self.current_entry + self.per_page * (self.current_page - 1)) < self.total_entries
def has_next_on_page(self):
return self.current_entry < self.per_page and self.has_next_entry()
def has_next_page(self):
return self.current_page < self.total_pages
def get_next_page(self):
self.current_page += 1
self.current_entry = 1
self.make_request()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment