2019-08-23 11:37:25 +01:00
|
|
|
"""
|
|
|
|
|
This script can be used to retrieve Zendesk tickets.
|
|
|
|
|
This can be run locally if you set the ZENDESK_API_KEY. Or the script can be run from a flask shell from a ssh session.
|
|
|
|
|
"""
|
2019-11-29 13:03:23 +00:00
|
|
|
# flake8: noqa: T001 (print)
|
|
|
|
|
|
2021-03-08 15:36:23 +00:00
|
|
|
import csv
|
2019-08-23 11:37:25 +01:00
|
|
|
import os
|
|
|
|
|
import urllib.parse
|
2021-03-08 15:36:23 +00:00
|
|
|
|
|
|
|
|
import requests
|
2019-08-23 11:37:25 +01:00
|
|
|
|
|
|
|
|
# Group: 3rd Line--Notify Support
|
|
|
|
|
NOTIFY_GROUP_ID = 360000036529
|
|
|
|
|
|
|
|
|
|
# Organization: GDS
|
|
|
|
|
NOTIFY_ORG_ID = 21891972
|
|
|
|
|
|
|
|
|
|
# the account used to authenticate with. If no requester is provided, the ticket will come from this account.
|
|
|
|
|
NOTIFY_ZENDESK_EMAIL = 'zd-api-notify@digital.cabinet-office.gov.uk'
|
|
|
|
|
ZENDESK_API_KEY = os.environ.get('ZENDESK_API_KEY')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_tickets():
|
|
|
|
|
ZENDESK_TICKET_URL = 'https://govuk.zendesk.com/api/v2/search.json?query={}'
|
|
|
|
|
query_params = 'type:ticket group:{}'.format(NOTIFY_GROUP_ID)
|
|
|
|
|
query_params = urllib.parse.quote(query_params)
|
|
|
|
|
|
|
|
|
|
next_page = ZENDESK_TICKET_URL.format(query_params)
|
|
|
|
|
|
|
|
|
|
with open("zendesk_ticket_data.csv", 'w') as csvfile:
|
|
|
|
|
fieldnames = [
|
|
|
|
|
'Service id',
|
|
|
|
|
'Ticket id',
|
|
|
|
|
'Subject line',
|
|
|
|
|
'Date ticket created',
|
|
|
|
|
'Tags',
|
|
|
|
|
]
|
|
|
|
|
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
|
|
|
|
|
writer.writeheader()
|
|
|
|
|
while next_page:
|
|
|
|
|
print(next_page)
|
|
|
|
|
response = requests.get(
|
|
|
|
|
next_page,
|
|
|
|
|
headers={'Content-type': 'application/json'},
|
|
|
|
|
auth=(
|
|
|
|
|
'{}/token'.format(NOTIFY_ZENDESK_EMAIL),
|
|
|
|
|
ZENDESK_API_KEY
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
data = response.json()
|
|
|
|
|
print(data)
|
|
|
|
|
for row in data["results"]:
|
|
|
|
|
service_url = [x for x in row["description"].split('\n')
|
|
|
|
|
if x.startswith("https://www.notifications.service.gov.uk/services/")]
|
|
|
|
|
service_url = service_url[0][50:] if len(service_url) > 0 else None
|
|
|
|
|
if service_url:
|
|
|
|
|
writer.writerow({'Service id': service_url,
|
|
|
|
|
'Ticket id': row['id'],
|
|
|
|
|
'Subject line': row['subject'],
|
|
|
|
|
'Date ticket created': row["created_at"],
|
|
|
|
|
'Tags': row.get('tags', '')
|
|
|
|
|
})
|
|
|
|
|
next_page = data["next_page"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_tickets_without_service_id():
|
|
|
|
|
ZENDESK_TICKET_URL = 'https://govuk.zendesk.com/api/v2/search.json?query={}'
|
|
|
|
|
query_params = 'type:ticket group:{}'.format(NOTIFY_GROUP_ID)
|
|
|
|
|
query_params = urllib.parse.quote(query_params)
|
|
|
|
|
|
|
|
|
|
next_page = ZENDESK_TICKET_URL.format(query_params)
|
|
|
|
|
with open("zendesk_ticket_data_without_service.csv", 'w') as csvfile:
|
|
|
|
|
fieldnames = [
|
|
|
|
|
'Ticket id',
|
|
|
|
|
'Subject line',
|
|
|
|
|
'Date ticket created',
|
|
|
|
|
'Tags',
|
|
|
|
|
]
|
|
|
|
|
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
|
|
|
|
|
writer.writeheader()
|
|
|
|
|
while next_page:
|
|
|
|
|
print(next_page)
|
|
|
|
|
response = requests.get(
|
|
|
|
|
next_page,
|
|
|
|
|
headers={'Content-type': 'application/json'},
|
|
|
|
|
auth=(
|
|
|
|
|
'{}/token'.format(NOTIFY_ZENDESK_EMAIL),
|
|
|
|
|
ZENDESK_API_KEY
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
data = response.json()
|
|
|
|
|
print(data)
|
|
|
|
|
for row in data["results"]:
|
|
|
|
|
service_url = [x for x in row["description"].split('\n')
|
|
|
|
|
if x.startswith("https://www.notifications.service.gov.uk/services/")]
|
|
|
|
|
service_url = service_url[0][50:] if len(service_url) > 0 else None
|
|
|
|
|
if not service_url:
|
|
|
|
|
writer.writerow({'Ticket id': row['id'],
|
|
|
|
|
'Subject line': row['subject'],
|
|
|
|
|
'Date ticket created': row["created_at"],
|
|
|
|
|
'Tags': row.get('tags', '')
|
|
|
|
|
})
|
|
|
|
|
next_page = data["next_page"]
|
|
|
|
|
|
2019-11-19 13:56:25 +00:00
|
|
|
|
|
|
|
|
def get_tickets_with_description():
|
|
|
|
|
ZENDESK_TICKET_URL = 'https://govuk.zendesk.com/api/v2/search.json?query={}'
|
|
|
|
|
query_params = 'type:ticket group:{}, created>2019-07-01'.format(NOTIFY_GROUP_ID)
|
|
|
|
|
query_params = urllib.parse.quote(query_params)
|
|
|
|
|
|
|
|
|
|
next_page = ZENDESK_TICKET_URL.format(query_params)
|
|
|
|
|
with open("zendesk_ticket.csv", 'w') as csvfile:
|
|
|
|
|
fieldnames = [
|
|
|
|
|
'Ticket id',
|
|
|
|
|
'Subject line',
|
|
|
|
|
'Description',
|
|
|
|
|
'Date ticket created',
|
|
|
|
|
'Tags',
|
|
|
|
|
]
|
|
|
|
|
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
|
|
|
|
|
writer.writeheader()
|
|
|
|
|
while next_page:
|
|
|
|
|
print(next_page)
|
|
|
|
|
response = requests.get(
|
|
|
|
|
next_page,
|
|
|
|
|
headers={'Content-type': 'application/json'},
|
|
|
|
|
auth=(
|
|
|
|
|
'{}/token'.format(NOTIFY_ZENDESK_EMAIL),
|
|
|
|
|
ZENDESK_API_KEY
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
data = response.json()
|
|
|
|
|
print(data)
|
|
|
|
|
for row in data["results"]:
|
|
|
|
|
writer.writerow({'Ticket id': row['id'],
|
|
|
|
|
'Subject line': row['subject'],
|
|
|
|
|
'Description': row['description'],
|
|
|
|
|
'Date ticket created': row["created_at"],
|
|
|
|
|
'Tags': row.get('tags', '')
|
|
|
|
|
})
|
|
|
|
|
next_page = data["next_page"]
|