Рубрики
Без рубрики

Как сохранить данные из API справки Scout к CSV в Python

Есть много раз, когда вам нужно скачать данные из API и хранить его в CSV. Возможно, ты … помеченный Python, наукой данных.

Есть много раз, когда вам нужно скачать данные из API и хранить его в CSV. Возможно, вы хотите проанализировать некоторые данные. Или вы хотите объединить данные с другими наборами данных.

В этой статье мы собираемся исследовать, как это сделать, одновременно используя API справки Scout. Помогите скаут Решение службы поддержки, которое использует команды при общении со своими клиентами.

Мы возьмем «разговоры» от одного из наших почтовых ящиков Scout Scout и храните эти данные в CSV. Эти разговоры будут включать, кто отправил письмо, тему, даты, какие из членов нашей команды были назначены разговором, а когда он был закрыт.

Получение вашего приложения и секрет

Прежде чем мы сможем начать получать данные из справочного SCOT API, нам нужно создать идентификатор приложения и секрет. Во-первых, войдите в helpscout и перейдите в “Ваш профиль”.

Нажмите «Мои приложения» в левом меню.

Нажмите кнопку «Создайте мое приложение» и заполните имя. Поскольку у нас не будет пользователей, аутентифицирующихся с помощью этого приложения, вы можете ввести любой URL для перенаправления. Я обычно просто поставлю URL для сайта компании.

Нажмите кнопку «Создать». После создания вы увидите идентификатор вашего приложения и секрет.

В то время как в справочном разведке откройте почтовый ящик, для которого вы хотите получить разговор. В URL вы найдете почтовые ящики, которые нам понадобится позже:

Получение вашего доступа

Поскольку мы не будем аутентифицировать пользователей, мы будем использовать помощь Скаут Поток клиентских учетных данных для аутентификации. Для этого нам сначала нужно получить токен доступа.

Во-первых, нам нужно импортировать какие-либо пакеты, которые нам нужны. Я почти всегда использую Пакет «Запрос» При работе с API. Кроме того, поскольку у нас есть созданное время и закрытое время, мне нравится идти вперед и рассчитать время разрешения здесь. Для этого я буду использовать Библиотека Python’s “DateTime” Отказ

import csv
import datetime
import requests

Далее нам нужно отправить удостоверение личности нашего приложения и секрет в конечную точку токена. Мы можем сделать это, сделав запрос и получаю Access_Token ключ от Json они возвращаются.

# The token endpoint.
auth_endpoint = 'https://api.helpscout.net/v2/oauth2/token'

# Preparing our POST data.
post_data = ({
    'grant_type': 'client_credentials',
    'client_id': YOUR_HELPSCOUT_APP_ID,
    'client_secret': YOUR_HELPSCOUT_APP_SECRET
})

# Send the data.
r = requests.post(auth_endpoint, data=post_data)

# Save our token.
token = r.json()['access_token']

Нам нужен способ продолжать проходить через нашу петлю, пока мы не скачали все разговоры. API Скаута Скаут содержит TotalPages Ключ, к которому мы можем проверить.

Есть несколько разных способов справиться с этим Но я люблю просто установить флаг самоуверенности на ложь.

all_conversations = False
page = 1

Затем нам нужно подготовить наши авторизационные заголовки.

# Prepare our headers for all endpoints using token.
endpoint_headers = {
    'Authorization': 'Bearer {}'.format(token)
}

Теперь, когда у нас есть наш токен, мы можем настроить наш файл CSV. Если вы не работали с CSV в Python раньше, Проверьте мою «чтение и запись в файлы CSV в Python» статью Отказ

Во-первых, откройте наш файл CSV и напишите заголовок:

# Creates our file or rewrites it if one is present.
with open('conversations.csv', mode="w", newline='', encoding='utf-8') as fh:
    # Define our columns.
    columns = ['ID', 'Customer Name', 'Customer email addresses', 'Assignee', 'Status', 'Subject', 'Created At',
               'Closed At', 'Closed By', 'Resolution Time (seconds)']  
    csv_writer = csv.DictWriter(fh, fieldnames=columns) # Create our writer object.
    csv_writer.writeheader() # Write our header row.

Загрузка наших разговоров и положить их в CSV

Теперь, когда у нас есть наш токен доступа, и наш CSV открыл, пришло время получить разговоры. API Справочника SCOT посылает разговоры в пагированном формате.

Не забудьте сохранить все это отступы внутри с открытым () Заявление, поэтому мы можем написать на наш CSV.

Внутри цикл While, мы получим нашу первую страницу разговоров:

while not all_conversations:
    # Prepare conversations endpoint with the status of conversations we want and the mailbox.
    conversations_endpoint = 'https://api.helpscout.net/v2/conversations?status=all&mailbox=YOUR_MAILBOX_ID&page={}'.format(
        page
    )
    r = requests.get(conversations_endpoint, headers=endpoint_headers)
    conversations = r.json()

Далее мы рассмотрим каждый из разговоров на этой странице, чтобы сохранить их в CSV. Поскольку в Json есть много ключей, которые могут отсутствовать в зависимости от разговора, нам нужно чистить и обработать данные достаточно, чтобы сохранить его.

# Cycle over conversations in response.
for conversation in conversations['_embedded']['conversations']:

    # If the email is missing, we won't keep this conversation.
    # Depending on what you will be using this data for,
    # You might omit this.
    if 'email' not in conversation['primaryCustomer']:
        print('Missing email for {}'.format(customer_name))
        continue

    # Prepare customer name.
    customer_name = '{} {}'.format(
        conversation['primaryCustomer']['first'],
        conversation['primaryCustomer']['last']
    )

    # Prepare assignee, subject, and closed date if they exist.
    assignee = '{} {}'.format(conversation['assignee']['first'], conversation['assignee']['last']) \
        if 'assignee' in conversation else ''
    subject = conversation['subject'] if 'subject' in conversation else 'No subject'
    closed_at = conversation['closedAt'] if 'closedAt' in conversation else ''

    # If the conversation has been closed, let's get the resolution time and who closed it.
    closed_by = ''
    resolution_time = 0
    if 'closedByUser' in conversation and conversation['closedByUser']['id'] != 0:
        closed_by = '{} {}'.format(
            conversation['closedByUser']['first'], conversation['closedByUser']['last']
        )
        createdDateTime = datetime.datetime.strptime(conversation['createdAt'], "%Y-%m-%dT%H:%M:%S%z")
        closedDateTime = datetime.datetime.strptime(conversation['closedAt'], "%Y-%m-%dT%H:%M:%S%z")
        resolution_time = (closedDateTime - createdDateTime).total_seconds()

Затем напишите наши результаты к CSV:

# Write row to CSV
csv_writer.writerow({
    'ID': conversation['id'],
    'Customer Name': customer_name,
    'Customer email addresses': conversation['primaryCustomer']['email'],
    'Assignee': assignee,
    'Status': conversation['status'],
    'Subject': subject,
    'Created At': conversation['createdAt'],
    'Closed At': closed_at,
    'Closed By': closed_by,
    'Resolution Time (seconds)': resolution_time
})

Наконец, проверьте свой ключ «TOOTSPAGES» на странице, мы узнаем, что сделаем ли мы все разговоры. Если нет, увеличивайте текущую страницу, а затем снова начнем процесс.

if page == conversations['page']['totalPages']:
    all_conversations = True
    continue
else:
    page += 1

Здорово! Теперь у нас есть наш скрипт готов бежать. Вы можете увидеть весь этот код вместе В моем Github Gist здесь Отказ

Следующие шаги

Продолжайте и запустите свой скрипт, чтобы извлечь все разговоры с вашего почтового ящика Scout.

Если вы смотрели, просто получите резервную копию, то вы хотите пойти. Если вы хотите данные для выполнения анализа данных, теперь вы можете открыть файл в Excel или использовать с ним Pandas. Или, если это был первый шаг вашего конвейера данных, вы теперь можете начать работать на следующем шаге в трубопроводе.

Оригинал: “https://dev.to/fpcorso/how-to-save-data-from-help-scout-s-api-to-csv-in-python-3lml”