CoderCastrov logo
CoderCastrov
ChatGPT

ChatGPT API Magic: Использование конечных точек API фронтенда для расширенного извлечения данных

ChatGPT API Magic: Использование конечных точек API фронтенда для расширенного извлечения данных
просмотров
6 мин чтение
#ChatGPT

Раскрытие секретов бесед ChatGPT путем использования конечных точек API фронтенда и эффективных техник парсинга данных

Это вторая статья серии статей, связанных с парсингом ChatGPT! Проверьте сводку репозитория GPT_scraper здесь

GitHub - rodolflying/GPT_scraper: Этот репозиторий предоставляет способ полного извлечения истории пользователя (или...

Этот репозиторий предоставляет способ извлечения полной истории использования ChatGPT с помощью 2 методов: скрытого API фронтенда...

github.com

Если вы уже знаете все о парсинге, мы сразу перейдем к сути. Иногда одна GIF-ка говорит больше без дополнительных объяснений:

Введение:

В мире искусственного интеллекта и обработки естественного языка ChatGPT стал революционной технологией, которая постоянно изменяет способ взаимодействия с машинами. В то время как многие пользователи исследуют его потенциал, настоящая сила ChatGPT часто скрыта в глубинах его API-точек доступа. Эта статья послужит вашим руководством по пониманию и использованию потенциала API-точек фронтенда ChatGPT, позволяя вам углубиться в его возможности и извлечь ценные инсайты из ваших разговоров.

Я предоставлю пошаговые инструкции о том, как осмотреть элементы и использовать API фронтенда в своих интересах. К концу этой статьи вы будете хорошо знакомы с искусством извлечения данных из ChatGPT, что позволит вам раскрыть полный потенциал этой революционной технологии. Независимо от того, являетесь ли вы энтузиастом искусственного интеллекта, ученым-исследователем или разработчиком, стремящимся расширить свои знания о ChatGPT, это исчерпывающее руководство создано специально для вас. Итак, отправимся в это захватывающее приключение и раскроем скрытые сокровища API-точек фронтенда ChatGPT!

Настройка заголовков:

Перед тем, как приступить к функциям, важно настроить необходимые заголовки для запросов к API. Выполните следующие шаги, чтобы получить заголовки:

I. Откройте ваш чат GPT во вкладке Chrome и нажмите CTRL+SHIFT+I, чтобы открыть инструменты разработчика.

II. Перейдите на вкладку "Network" и отфильтруйте запросы по "Fetch/XHR", затем обновите страницу (или нажмите F5). Нажмите на один из предыдущих разговоров.

III. Найдите запрос "conversations?offset=0&limit=20" и что-то вроде "e1dbb0b1–2567–48cd-b2c0–0bcda815d7yd" (это два заголовка скрытого API бэкэнда, которые мы будем использовать).

IV. Нажмите правой кнопкой мыши на каждом из них и скопируйте их как cURL (bash).

V. Следуйте инструкциям для выбранного вами инструмента для тестирования API (Postman или Insomnia), чтобы импортировать команды cURL и получить заголовки.

VI. Переименуйте файл "headers" в "headers.py" и вставьте соответствующие заголовки.

ids_header = {вставьте сюда заголовки "conversations?offset=0&limit=20" из кода, предоставленного в Postman/Insomnia}
conversation_header = {вставьте сюда заголовки "e1dbb0b1-2567-48cd-b2c0-0bcda815d7yd" из кода, предоставленного в Postman/Insomnia}

Импорты:

# Импорт известных библиотек Python
import pandas as pd
import json
import random
import requests
from time import sleep, strftime
# Заголовки я вынес в другой файл, так как они слишком большие
from headers import ids_header, conversation_header

Скрипт:

Скрипт состоит из нескольких функций, которые взаимодействуют между собой для парсинга и обработки данных из API-точек доступа фронтенда. Эти функции включают:

get_response(url, headers, payload): Эта вспомогательная функция отправляет HTTP-запрос GET с использованием указанного URL, заголовков и данных и возвращает ответ. Функция используется во всем скрипте для выполнения вызовов API.

# Определение вспомогательной функции для отправки HTTP-запросов GET
def get_response(url, headers, payload):
    response = requests.request("GET", url, headers=headers, data=payload)
    return response

get_ids(): Эта функция извлекает идентификаторы, заголовки и время создания бесед, перебирая данные ответа API. Она вычисляет общее количество итераций, необходимых для получения всех бесед, и сохраняет их в виде списка словарей.

# Определение функции для извлечения идентификаторов, заголовков и времени создания бесед
def get_ids():
    # Инициализация переменных
    payload = {}
    headers = ids_header
    data = {}
    ids, create_time, titles = [], [], []

    # Перебор смещения и лимита для получения всех бесед
    i, offset, total_iterations = 0, 0, 0
    while True:
        try:
            # Формирование URL для запроса API
            url = f"https://chat.openai.com/backend-api/                    conversations?offset={str(offset)}&limit=100"
            response = get_response(url, headers, payload)
            data = json.loads(response.text)
            # Перебор данных ответа API для извлечения деталей беседы
            for item in data['items']:
                ids.append(item['id'])
                create_time.append(item['create_time'])
                titles.append(item['title'])
            # Обновление общего количества итераций, при необходимости
            if i == 0:
                total_chats = data['total']
                total_iterations = total_chats / 100
                if total_iterations / 100 % 1 != 0:
                    total_iterations = int(total_iterations) + 1
                offset = offset + 101
                i += 1
            else:
                offset = offset + 100
                i += 1
            # Прерывание цикла, когда все беседы обработаны
            if i == total_iterations:
                break
        except Exception as e:
            print(str(e))
            print('done')
            break
    # Сохранение данных по идентификаторам с помощью генератора (учитывая также список create_time)
    data = {'conversations': [{'id': id, 'title': title, 
      'create_time': create_time, 'messages': []} 
       for id, title, create_time in zip(ids, titles, create_time)]}
    return data, ids

get_conversations(data, ids): Эта функция извлекает детали бесед, используя идентификаторы бесед, полученные с помощью get_ids(). Она перебирает идентификаторы, отправляет запрос к API-точке для каждой беседы и добавляет сообщения беседы в словарь данных.

# Определение функции для получения бесед с использованием идентификаторов бесед
def get_conversations(data, ids):
    # Инициализация переменных
    payload = {}
    headers = conversation_header

    # Перебор идентификаторов бесед и получение соответствующей беседы
    for i, id in enumerate(ids):
        url = f"https://chat.openai.com/backend-api/conversation/{id}"
        response = get_response(url, headers, payload)
        response_json = json.loads(response.text)

        # Перебор сообщений в беседе
        for message_id, message_data in response_json["mapping"].items():
            if "message" in message_data:
                role = message_data["message"]["author"]["role"]

                # Проверка, является ли роль "пользователь" или "ассистент"
                if role == "user":
                    # Добавление нового объекта сообщения для вопроса пользователя 
                    # в список сообщений беседы
                    human_message = {
                        'sender': 'human',
                        'text': message_data["message"]["content"]["parts"]
                    }
                    data['conversations'][i]['messages'].append(human_message)

                elif role == "assistant":
                    # Добавление нового объекта сообщения для ответа бота 
                    # в список сообщений беседы
                    bot_message = {
                        'sender': 'bot',
                        'text': message_data["message"]["content"]["parts"]
                    }
                    data['conversations'][i]['messages'].append(bot_message)

        # Задержка на случайное время (2-5 секунд) для избежания блокировки 
        # из-за слишком большого количества запросов
        sleep(random.randint(2, 5))

    return data

save_json(data, date): Эта функция сохраняет полученные данные в JSON-файле. Она принимает словарь данных и текущую дату в качестве входных данных, создает имя файла и записывает JSON-файл в папку "outputs".

def save_json(data, date):
    filename = f"outputs/API scraped conversations {str(date)}.json"
    with open(filename, "w") as f:
        json.dump(data, f)

save_csv(data, date): Эта функция сохраняет полученные данные в CSV-файле. Она читает созданный JSON-файл с помощью save_json(), преобразует его в DataFrame и записывает CSV-файл в папку "outputs".

def save_csv(data, date):
    json_file = f"outputs/API scraped conversations {str(date)}.json"
    df = pd.read_json(json_file)
    df = pd.DataFrame(df['conversations'].values.tolist())
    filename = f"outputs/API scraped conversations {str(date)}.csv"
    df.to_csv(filename, index=False)

main(): Это основная функция, которая связывает все вместе. Она вызывает другие функции в правильном порядке, устанавливает текущую дату и время, и сохраняет полученные данные в виде JSON- и CSV-файлов.

def main():
    data, ids = get_ids()
    data = get_conversations(data, ids)
    date = strftime("%d-%m-%Y %H-%M")
    save_json(data, date)
    save_csv(data, date)

if __name__ == "__main__":
    main()

Запуск скрипта:

Чтобы запустить скрипт api_scraper.py, откройте терминал, перейдите в нужную папку или откройте проект в вашем редакторе кода и выполните следующую команду:

python api_scraper.py

Весь процесс запуска и получения результатов можно увидеть на анимационной картинке:

Running the script

Заключение:

В этой статье мы предоставили исчерпывающее руководство по использованию скрипта на Python для парсинга данных разговоров с frontend API. Мы подробно объяснили каждую функцию, предоставили соответствующие фрагменты кода и поделились необходимыми шагами для настройки заголовков для успешного извлечения данных. С этими знаниями вы можете уверенно извлекать данные разговоров для своих собственных проектов и целей.

Conclusion