Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 32 additions & 19 deletions indeed/__init__.py
Original file line number Diff line number Diff line change
@@ -1,41 +1,54 @@
import requests
from requests import Session

DEFAULT_FORMAT = "json"
API_ROOT = "http://api.indeed.com/ads"
API_SEARCH = {'end_point': "%s/apisearch" % API_ROOT, 'required_fields': ['userip', 'useragent', ['q', 'l']]}
API_JOBS = {'end_point': "%s/apigetjobs" % API_ROOT, 'required_fields': ['jobkeys']}

API_SEARCH = dict(
end_point=f"{API_ROOT}/apisearch",
required_fields=["userip", "useragent", ['q', 'l']]
)

API_JOBS = dict(
end_point=f"{API_ROOT}/apigetjobs",
required_fields=["jobkeys"]
)

class IndeedClientException(Exception):
pass

class IndeedClient:
def __init__(self, publisher, version = "2"):
class IndeedClient(Session):
def __init__(self, publisher, version = '2'):
super(IndeedClient, self).__init__()
self.publisher = publisher
self.version = version

def search(self, **args):
return self.__process_request(API_SEARCH.get('end_point'), self.__valid_args(API_SEARCH.get('required_fields'), args))
return self.__process_request(
API_SEARCH.get("end_point"),
self.__valid_args(API_SEARCH.get("required_fields"), args))

def jobs(self, **args):
valid_args = self.__valid_args(API_JOBS.get('required_fields'), args)
valid_args['jobkeys'] = ",".join(valid_args['jobkeys'])
return self.__process_request(API_JOBS.get('end_point'), valid_args)
valid_args = self.__valid_args(API_JOBS.get("required_fields"), args)
valid_args["jobkeys"] = ','.join(valid_args["jobkeys"])
return self.__process_request(API_JOBS.get("end_point"), valid_args)

def __process_request(self, endpoint, args):
format = args.get('format', DEFAULT_FORMAT)
raw = True if format == 'xml' else args.get('raw', False)
args.update({'v': self.version, 'publisher': self.publisher, 'format': format})
r = requests.get(endpoint, params = args)
return r.json() if not raw else r.content
format_ = args.get("format", DEFAULT_FORMAT)
if format_ == "xml":
raw = True
else:
raw = args.get("raw", False)
args.update({'v': self.version, "publisher": self.publisher, "format": format_})
response = self.get(endpoint, params = args)
return response.json() if not raw else response.content

def __valid_args(self, required_fields, args):
for field in required_fields:
if type(field) is list:
validation_list = [args.get(f) != None for f in field]
if not (True in validation_list):
raise IndeedClientException("You must provide one of the following %s" % ",".join(field))
if isinstance(field, list):
if not (True in [args.get(f) != None for f in field]):
raise IndeedClientException(f"You must provide one of the following {','.join(field)}")
elif not args.get(field):
raise IndeedClientException("The field %s is required" % field)
raise IndeedClientException(f"The field {field} is required")
return args