<p>好的,这是工作代码,如果有人需要它来和BambooHR一起工作</p>
<blockquote>
<p>url = 'request-with-api-key' must looks like
'<a href="https://__API_KEY__@api.bamboohr.com/api/gateway.php/__SUBDOMAIN__/v1/employees/directory" rel="nofollow noreferrer">https://<strong>API_KEY</strong>@api.bamboohr.com/api/gateway.php/<strong>SUBDOMAIN</strong>/v1/employees/directory</a>'</p>
<p>You can get your API key from BambooHR by clicking on yours photo in the right corner and click API Keys</p>
</blockquote>
<pre><code>import sqlalchemy
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import xml.etree.ElementTree as ET
import json, requests
Base = declarative_base()
class EmployeeData(Base):
__tablename__ = 'employee_data'
id = Column(Integer, primary_key=True)
name = Column(String(120))
department = Column(String(120))
jobTitle = Column(String(120))
email = Column(String(120))
def __init__(self, name, department, jobTitle, email):
self.name = name
self.department = department
self.jobTitle = jobTitle
self.email = email
engine = sqlalchemy.create_engine('sqlite:///employee_db.db')
connection = engine.connect()
Base.metadata.create_all(engine)
url = 'request-with-api-key'
r = requests.get(url)
root = ET.fromstring(r.text)
employees = []
for emp in root.iter('employee'):
name_photo = {'name': '', 'department': '', 'jobTitle': '', 'email': ''}
for data in emp.iter('field'):
if data.attrib['id'] == 'displayName':
name_photo['name'] = data.text
elif data.attrib['id'] == 'department':
name_photo['department'] = data.text
elif data.attrib['id'] == 'jobTitle':
name_photo['jobTitle'] = data.text
elif data.attrib['id'] == 'workEmail':
name_photo['email'] = data.text
else:
continue
employees.append(name_photo)
session_factory = sessionmaker(engine)
session = session_factory()
employees_list = [EmployeeData(name=item['name'], department=item['department'], jobTitle=item['jobTitle'], email=item['email']) for item in employees]
avoid_duplicates = list(connection.execute('select * from employee_data'))
for i in employees_list:
if i.name not in [j[1] for j in avoid_duplicates]:
session.add(i)
session.commit()
write_list = [{'name': i[1], 'department': i[2], 'jobTitle': i[3], 'email': i[4]} for i in list(connection.execute('select * from employee_data'))]
session.close()
connection.close()
with open('employee_data.json', 'w') as file:
json.dump(write_list, file)
file.close()
</code></pre>