ChatGPT API Magic: Использование конечных точек API фронтенда для расширенного извлечения данных
Table Of Content
- GitHub - rodolflying/GPT_scraper: Этот репозиторий предоставляет способ полного извлечения истории пользователя (или...
- Этот репозиторий предоставляет способ извлечения полной истории использования ChatGPT с помощью 2 методов: скрытого API фронтенда...
- Введение:
- Настройка заголовков:
- Импорты:
- Импорт известных библиотек Python
- Заголовки я вынес в другой файл, так как они слишком большие
- Скрипт:
- Определение вспомогательной функции для отправки HTTP-запросов GET
- Определение функции для извлечения идентификаторов, заголовков и времени создания бесед
- Определение функции для получения бесед с использованием идентификаторов бесед
- Запуск скрипта:
- Заключение:
Раскрытие секретов бесед 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
Весь процесс запуска и получения результатов можно увидеть на анимационной картинке:
Заключение:
В этой статье мы предоставили исчерпывающее руководство по использованию скрипта на Python для парсинга данных разговоров с frontend API. Мы подробно объяснили каждую функцию, предоставили соответствующие фрагменты кода и поделились необходимыми шагами для настройки заголовков для успешного извлечения данных. С этими знаниями вы можете уверенно извлекать данные разговоров для своих собственных проектов и целей.