文件:claude_api.py
源代码如下:
import json
import os
import uuid
from curl_cffi import requests
import requests as req
import re
class Client:
def __init__(self, cookie):
self.cookie = cookie
self.organization_id = self.get_organization_id()
def get_organization_id(self):
url = "https://claude.ai/api/organizations"
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Accept-Language': 'en-US,en;q=0.5',
'Referer': 'https://claude.ai/chats',
'Content-Type': 'application/json',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Connection': 'keep-alive',
'Cookie': f'{self.cookie}'
}
response = requests.get(url, headers=headers,impersonate="chrome110")
res = json.loads(response.text)
uuid = res[0]['uuid']
return uuid
def get_content_type(self, file_path):
# Function to determine content type based on file extension
extension = os.path.splitext(file_path)[-1].lower()
if extension == '.pdf':
return 'application/pdf'
elif extension == '.txt':
return 'text/plain'
elif extension == '.csv':
return 'text/csv'
# Add more content types as needed for other file types
else:
return 'application/octet-stream'
# Lists all the conversations you had with Claude
def list_all_conversations(self):
url = f"https://claude.ai/api/organizations/{self.organization_id}/chat_conversations"
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Accept-Language': 'en-US,en;q=0.5',
'Referer': 'https://claude.ai/chats',
'Content-Type': 'application/json',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Connection': 'keep-alive',
'Cookie': f'{self.cookie}'
}
response = requests.get(url, headers=headers,impersonate="chrome110")
conversations = response.json()
# Returns all conversation information in a list
if response.status_code == 200:
return conversations
else:
print(f"Error: {response.status_code} - {response.text}")
# Send Message to Claude
def send_message(self, prompt, conversation_id, attachment=None,timeout=500):
url = "https://claude.ai/api/append_message"
# Upload attachment if provided
attachments = []
if attachment:
attachment_response = self.upload_attachment(attachment)
if attachment_response:
attachments = [attachment_response]
else:
return {"Error: Invalid file format. Please try again."}
# Ensure attachments is an empty list when no attachment is provided
if not attachment:
attachments = []
payload = json.dumps({
"completion": {
"prompt": f"{prompt}",
"timezone": "Asia/Kolkata",
"model": "claude-2"
},
"organization_uuid": f"{self.organization_id}",
"conversation_uuid": f"{conversation_id}",
"text": f"{prompt}",
"attachments": attachments
})
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Accept': 'text/event-stream, text/event-stream',
'Accept-Language': 'en-US,en;q=0.5',
'Referer': 'https://claude.ai/chats',
'Content-Type': 'application/json',
'Origin': 'https://claude.ai',
'DNT': '1',
'Connection': 'keep-alive',
'Cookie': f'{self.cookie}',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'TE': 'trailers'
}
response = requests.post( url, headers=headers, data=payload,impersonate="chrome110",timeout=500)
decoded_data = response.content.decode("utf-8")
decoded_data = re.sub('\n+', '\n', decoded_data).strip()
data_strings = decoded_data.split('\n')
completions = []
for data_string in data_strings:
json_str = data_string[6:].strip()
data = json.loads(json_str)
if 'completion' in data:
completions.append(data['completion'])
answer = ''.join(completions)
# Returns answer
return answer
# Deletes the conversation
def delete_conversation(self, conversation_id):
url = f"https://claude.ai/api/organizations/{self.organization_id}/chat_conversations/{conversation_id}"
payload = json.dumps(f"{conversation_id}")
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Accept-Language': 'en-US,en;q=0.5',
'Content-Type': 'application/json',
'Content-Length': '38',
'Referer': 'https://claude.ai/chats',
'Origin': 'https://claude.ai',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Connection': 'keep-alive',
'Cookie': f'{self.cookie}',
'TE': 'trailers'
}
response = requests.delete( url, headers=headers, data=payload,impersonate="chrome110")
# Returns True if deleted or False if any error in deleting
if response.status_code == 204:
return True
else:
return False
# Returns all the messages in conversation
def chat_conversation_history(self, conversation_id):
url = f"https://claude.ai/api/organizations/{self.organization_id}/chat_conversations/{conversation_id}"
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Accept-Language': 'en-US,en;q=0.5',
'Referer': 'https://claude.ai/chats',
'Content-Type': 'application/json',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Connection': 'keep-alive',
'Cookie': f'{self.cookie}'
}
response = requests.get( url, headers=headers,impersonate="chrome110")
# List all the conversations in JSON
return response.json()
def generate_uuid(self):
random_uuid = uuid.uuid4()
random_uuid_str = str(random_uuid)
formatted_uuid = f"{random_uuid_str[0:8]}-{random_uuid_str[9:13]}-{random_uuid_str[14:18]}-{random_uuid_str[19:23]}-{random_uuid_str[24:]}"
return formatted_uuid
def create_new_chat(self):
url = f"https://claude.ai/api/organizations/{self.organization_id}/chat_conversations"
uuid = self.generate_uuid()
payload = json.dumps({"uuid": uuid, "name": ""})
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Accept-Language': 'en-US,en;q=0.5',
'Referer': 'https://claude.ai/chats',
'Content-Type': 'application/json',
'Origin': 'https://claude.ai',
'DNT': '1',
'Connection': 'keep-alive',
'Cookie': self.cookie,
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'TE': 'trailers'
}
response = requests.post( url, headers=headers, data=payload,impersonate="chrome110")
# Returns JSON of the newly created conversation information
return response.json()
# Resets all the conversations
def reset_all(self):
conversations = self.list_all_conversations()
for conversation in conversations:
conversation_id = conversation['uuid']
delete_id = self.delete_conversation(conversation_id)
return True
def upload_attachment(self, file_path):
if file_path.endswith('.txt'):
file_name = os.path.basename(file_path)
file_size = os.path.getsize(file_path)
file_type = "text/plain"
with open(file_path, 'r', encoding='utf-8') as file:
file_content = file.read()
return {
"file_name": file_name,
"file_type": file_type,
"file_size": file_size,
"extracted_content": file_content
}
url = 'https://claude.ai/api/convert_document'
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Accept-Language': 'en-US,en;q=0.5',
'Referer': 'https://claude.ai/chats',
'Origin': 'https://claude.ai',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Connection': 'keep-alive',
'Cookie': f'{self.cookie}',
'TE': 'trailers'
}
file_name = os.path.basename(file_path)
content_type = self.get_content_type(file_path)
files = {
'file': (file_name, open(file_path, 'rb'), content_type),
'orgUuid': (None, self.organization_id)
}
response = req.post(url, headers=headers, files=files)
if response.status_code == 200:
return response.json()
else:
return False
# Renames the chat conversation title
def rename_chat(self, title, conversation_id):
url = "https://claude.ai/api/rename_chat"
payload = json.dumps({
"organization_uuid": f"{self.organization_id}",
"conversation_uuid": f"{conversation_id}",
"title": f"{title}"
})
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Accept-Language': 'en-US,en;q=0.5',
'Content-Type': 'application/json',
'Referer': 'https://claude.ai/chats',
'Origin': 'https://claude.ai',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Connection': 'keep-alive',
'Cookie': f'{self.cookie}',
'TE': 'trailers'
}
response = requests.post(url, headers=headers, data=payload,impersonate="chrome110")
if response.status_code == 200:
return True
else:
return False
我们也可以通过pip install cluade_api,进行安装。
用法
在 Python 脚本中导入 claude_api 模块:
from claude_api import Client
- 接下来,您需要通过提供您的 Claude AI cookie 来创建 Client 类的实例:
- 您可以从浏览器的开发者工具网络选项卡获取cookie(查看任何claude.ai请求检查cookie,复制整个值)或存储选项卡(您可以找到claude.ai的cookie,将有四个值)
- (查看下图了解 cookie 的格式,最好使用网络选项卡轻松获取 cookie)
cookie = os.environ.get('cookie')claude_api = Client(cookie)
列出所有对话
要列出您与 Claude 的所有对话 ID,您可以使用 list_all_conversations 方法:
conversations = claude_api.list_all_conversations()
for conversation in conversations:
conversation_id = conversation['uuid']
print(conversation_id)
发信息
要向 Claude 发送消息,您可以使用 send_message 方法。您需要提供提示和对话 ID:
prompt = "Hello, Claude!"
conversation_id = "<conversation_id>" or claude_api.create_new_chat()['uuid']
response = claude_api.send_message(prompt, conversation_id)
print(response)
发送带有附件的消息
您可以使用 send_message() 中的附件参数向 claude 发送任何类型的附件以获取响应。注意:Claude 目前仅支持部分文件类型。
{ 如果需要,您还可以使用超时参数添加超时[默认设置为 500] }
prompt = "Hey,Summarize me this document.!"
conversation_id = "<conversation_id>" or claude_api.create_new_chat()['uuid']
response = claude_api.send_message(prompt, conversation_id,attachment="path/to/file.pdf",timeout=600)
print(response)
删除对话
要删除对话,您可以使用delete_conversation方法:
conversation_id = "<conversation_id>"
deleted = claude_api.delete_conversation(conversation_id)
if deleted:
print("Conversation deleted successfully")
else:
print("Failed to delete conversation")
聊天对话历史记录
要获取聊天对话历史记录,您可以使用 chat_conversation_history 方法:
conversation_id = "<conversation_id>"
history = claude_api.chat_conversation_history(conversation_id)
print(history)
创建新聊天
要创建新的聊天对话(id),您可以使用 create_new_chat 方法:
new_chat = claude_api.create_new_chat()
conversation_id = new_chat['uuid']
print(conversation_id)
重置所有对话
要重置所有对话,您可以使用reset_all方法:
reset = claude_api.reset_all()
if reset:
print("All conversations reset successfully")
else:
print("Failed to reset conversations")
重命名聊天
要重命名聊天对话,您可以使用 rename_chat 方法:wangyue
conversation_id = "<conversation_id>"
title = "New Chat Title"
renamed = claude_api.rename_chat(title, conversation_id)
if renamed:
print("Chat conversation renamed successfully")
else:
print("Failed to rename chat conversation")
免责声明
该项目为 Claude AI 提供非官方 API,不隶属于 Claude AI 或 Anthropic,也不受其认可。需要您自担风险使用它。
更多关于如何使用Claude AI的信息请参考Claude AI官方文档[ https://claude.ai/docs ]。
版权归原作者 淘小白_TXB2196 所有, 如有侵权,请联系我们删除。