Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1d9a0b2f0 | ||
|
|
10751f9ddb |
@@ -39,7 +39,7 @@ fetch(c.token, 'метод', 'эндпоинт', {'данные': 'данные'
|
||||
Из методов поддерживается `get`, `post`, `put` итд, которые есть в `requests`
|
||||
К названию эндпоинта добавляется домен итд и `api`, то есть в этом примере отпарвится `https://xn--d1ah4a.com/api/эндпоинт`.
|
||||
|
||||
> ![INFO]
|
||||
> [!NOTE]
|
||||
> `xn--d1ah4a.com` - punycode от "итд.com"
|
||||
|
||||
## прочее
|
||||
@@ -47,4 +47,4 @@ fetch(c.token, 'метод', 'эндпоинт', {'данные': 'данные'
|
||||
Идея (и часть эндпоинтов): https://github.com/FriceKa/ITD-SDK-js
|
||||
- По сути этот проект является реворком, просто на другом языке
|
||||
|
||||
Автор: [SizedBox](https://xn--d1ah4a.com/SizedBox) (в итд) [@desicars](https://t.me/desicars) (в тг)
|
||||
Автор: [itd_sdk](https://xn--d1ah4a.com/itd_sdk) (в итд) [@desicars](https://t.me/desicars) (в тг)
|
||||
@@ -8,6 +8,7 @@ from itd.notifications import get_notifications, mark_as_read, mark_all_as_read,
|
||||
from itd.posts import create_post, get_posts, get_post, edit_post, delete_post, pin_post, repost, view_post
|
||||
from itd.reports import report
|
||||
from itd.search import search
|
||||
from itd.files import upload_file
|
||||
from itd.request import refresh_auth
|
||||
|
||||
|
||||
@@ -50,8 +51,8 @@ class Client:
|
||||
return self.get_user('me')
|
||||
|
||||
@refresh_on_error
|
||||
def update_profile(self, username: str | None = None, display_name: str | None = None, bio: str | None = None) -> dict:
|
||||
return update_profile(self.token, bio, display_name, username)
|
||||
def update_profile(self, username: str | None = None, display_name: str | None = None, bio: str | None = None, banner_id: str | None = None) -> dict:
|
||||
return update_profile(self.token, bio, display_name, username, banner_id)
|
||||
|
||||
@refresh_on_error
|
||||
def follow(self, username: str) -> dict:
|
||||
@@ -190,4 +191,9 @@ class Client:
|
||||
|
||||
@refresh_on_error
|
||||
def search_hashtag(self, query: str, limit: int = 5):
|
||||
return search(self.token, query, 0, limit)
|
||||
return search(self.token, query, 0, limit)
|
||||
|
||||
|
||||
@refresh_on_error
|
||||
def upload_file(self, name: str, data: bytes):
|
||||
return upload_file(self.token, name, data)
|
||||
5
itd/files.py
Normal file
5
itd/files.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from itd.request import fetch
|
||||
|
||||
|
||||
def upload_file(token: str, name: str, data: bytes):
|
||||
return fetch(token, 'post', 'files/upload', files={'file': (name, data)})
|
||||
@@ -3,8 +3,9 @@ from requests import Session
|
||||
s = Session()
|
||||
|
||||
|
||||
def fetch(token: str, method: str, url: str, params: dict = {}):
|
||||
res = eval(f's.{method}')(f'https://xn--d1ah4a.com/api/{url}', timeout=20, params=params, headers={
|
||||
def fetch(token: str, method: str, url: str, params: dict = {}, files: dict[str, tuple[str, bytes]] = {}):
|
||||
base = f'https://xn--d1ah4a.com/api/{url}'
|
||||
headers = {
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||
"Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
|
||||
"Accept-Encoding": "gzip, deflate, br, zstd",
|
||||
@@ -19,7 +20,13 @@ def fetch(token: str, method: str, url: str, params: dict = {}):
|
||||
"Pragma": "no-cache",
|
||||
"Cache-Control": "no-cache",
|
||||
"TE": "trailers"
|
||||
})
|
||||
}
|
||||
method = method.lower()
|
||||
if method == "get":
|
||||
res = s.get(base, timeout=120 if files else 20, params=params, headers=headers)
|
||||
else:
|
||||
res = s.request(method.upper(), base, timeout=20, json=params, headers=headers, files=files)
|
||||
|
||||
res.raise_for_status()
|
||||
return res.json()
|
||||
|
||||
@@ -51,4 +58,4 @@ def refresh_auth(cookies: str):
|
||||
"TE": "trailers",
|
||||
})
|
||||
res.raise_for_status()
|
||||
return res.json()['accessToken']
|
||||
return res.json()['accessToken']
|
||||
|
||||
@@ -4,7 +4,7 @@ from itd.request import fetch
|
||||
def get_user(token: str, username: str):
|
||||
return fetch(token, 'get', f'users/{username}')
|
||||
|
||||
def update_profile(token: str, bio: str | None = None, display_name: str | None = None, username: str | None = None):
|
||||
def update_profile(token: str, bio: str | None = None, display_name: str | None = None, username: str | None = None, banner_id: str | None = None):
|
||||
data = {}
|
||||
if bio:
|
||||
data['bio'] = bio
|
||||
@@ -12,6 +12,8 @@ def update_profile(token: str, bio: str | None = None, display_name: str | None
|
||||
data['displayName'] = display_name
|
||||
if username:
|
||||
data['username'] = username
|
||||
if banner_id:
|
||||
data['bannerId'] = banner_id
|
||||
return fetch(token, 'put', 'users/me', data)
|
||||
|
||||
def follow(token: str, username: str):
|
||||
|
||||
Reference in New Issue
Block a user