Исходник Arizona Forum API [v2.1]

ZviNK

Новичок
12
5
Есть какой-то вариант получить сам ББКод ответа через get_post()
Сейчас при попытке изменить и вставить содержимое полученное от Post.bb_content - в тему вставляется сырой HTML код вместе с разметкой.
Ломаются любые стили, хайды, реплаи и т.п.
 

fakelag46

Участник
26
22
Есть какой-то вариант получить сам ББКод ответа через get_post()
Сейчас при попытке изменить и вставить содержимое полученное от Post.bb_content - в тему вставляется сырой HTML код вместе с разметкой.
Ломаются любые стили, хайды, реплаи и т.п.
Python:
def get_post_bbcode(self, thread_id: int, post_id: int) -> str:
        """Получить BB-код из HTML-содержимого поста
           
        Returns:
            str: BB-код поста
        """
        params = {
            '_xfRequestUri': f'/threads/{thread_id}/',
            '_xfWithData': 1,
            '_xfToken': self.token,
            '_xfResponseType': 'json'
        }
           
        response = self.session.get(
            f"{MAIN_URL}/posts/{post_id}/edit",
            params=params
        )
           
        html_content = response.json().get('html', {}).get('content', '')
       
        if not html_content:
            return ''
           
        data = {
            '_xfResponseType': 'json',
            '_xfRequestUri': f'/threads/{thread_id}/',
            '_xfWithData': 1,
            '_xfToken': self.token,
            'html': html_content
        }
        response = self.session.post(
            f"{MAIN_URL}/index.php?editor/to-bb-code",
            data=data
        )
        return response.json().get('bbCode', '')
Python:
bbcode = api.get_post_bbcode(9383346, 50815999)
print(bbcode)
Но есть некоторые подводные камни:
1. Нужна покраска 3+ уровня, дабы /edit сработал
2. Возвращает HTML контент + BB код + Лишний мусор (Кнопки сохранить например)
DoVupMf.png
 
  • Нравится
Реакции: ZviNK

choco.pay

Участник
46
4
Как сделать уведомления в консоль при созданиях новой темы в разделе?
 

TastyBread123

Известный
Автор темы
637
306
Как сделать уведомления в консоль при созданиях новой темы в разделе?
каждые 2-3 минуты вызывать метод на поиск тем в категории, сохранять где то в массиве, и если при следующем вызове появляются новые иды, значит это новая тема (дополнительно можно сравнивать еще и дату создания)
 
  • Нравится
Реакции: choco.pay

nclv

Новичок
1
0
Метод поиска по форуму планируется универсальный?
С строкой, разделом в котором искать, от кого сообщение.
 

choco.pay

Участник
46
4
каждые 2-3 минуты вызывать метод на поиск тем в категории, сохранять где то в массиве, и если при следующем вызове появляются новые иды, значит это новая тема (дополнительно можно сравнивать еще и дату создания)
Спасибо!
 

bubbles

Новичок
1
0
Теперь можно получить последнюю активность пользователя
member_object.py:
    def __init__(self, API : 'ArizonaAPI', id: int, username: str, user_title: str, avatar: str, roles: list, messages_count: int, reactions_count: int, trophies_count: int, activity: str) -> None:
        self.API = API
        self.id = id
        """**ID пользователя**"""
        self.username = username
        """**Имя пользователя**"""
        self.user_title = user_title
        """**Звание пользователя**"""
        self.avatar = avatar
        """**Ссылка на аватарку пользователя**"""
        self.roles = roles
        """Роль пользователя на форуме ('покраска')"""
        self.activity = activity
        """**Активность пользователя на форуме**"""
        self.messages_count = messages_count
        """**Количество сообщений в счетчике**"""
        self.reactions_count = reactions_count
        """**Количество реакций в счетчике**"""
        self.trophies_count = trophies_count
        """**Количество баллов в счетчике**"""
        self.url = f"{MAIN_URL}/members/{self.id}/"
        """Ссылка на объект"""
api.py:
    def get_member(self, user_id: int) -> Member:
        """Найти пользователя по ID (возвращает либо Member, либо None (если профиль закрыт / не существует))"""

        request = self.session.get(f"{MAIN_URL}/members/{user_id}?_xfResponseType=json&_xfToken={self.token}").json()
        if request['status'] == 'error':
            return None

        content = unescape(request['html']['content'])
        content = BeautifulSoup(content, 'lxml')

        username = unescape(request['html']['title'])
        activity = content.find('dd', {'dir': 'auto'}).get_text(strip=False).strip('\n')

        roles = []
        for i in content.find('div', {'class': 'memberHeader-banners'}).children:
            if i.text != '\n': roles.append(i.text)

        try: user_title = content.find('span', {'class': 'userTitle'}).text
        except AttributeError: user_title = None
        try: avatar = MAIN_URL + content.find('a', {'class': 'avatar avatar--l'})['href']
        except TypeError: avatar = None

        messages_count = int(content.find('a', {'href': f'/search/member?user_id={user_id}'}).text.strip().replace(',', ''))
        reactions_count = int(content.find('dl', {'class': 'pairs pairs--rows pairs--rows--centered'}).find('dd').text.strip().replace(',', ''))
        trophies_count = int(content.find('a', {'href': f'/members/{user_id}/trophies'}).text.strip().replace(',', ''))
      
        return Member(self, user_id, username, user_title, avatar, roles, messages_count, reactions_count, trophies_count, activity)
 
Последнее редактирование: