Обновить
0
0
Алексей Вячеславович Мухин@Hiddenath

Пользователь

Отправить сообщение

Не благодарите, вот парсер на питоне, вывводит все смс. думаю дальше смодите из запомните в переменную и новые пересылать в телеграм, как делаю я )

Скрытый текст
import re
import requests
from bs4 import BeautifulSoup

SMS_URL = "http://10.20.30.7/default/en_US/tools.html?type=sms_inbox"
USERNAME = "admin"
PASSWORD = "admin"

def fetch_page():
    response = requests.get(
        SMS_URL,
        auth=(USERNAME, PASSWORD),
        timeout=10
    )
    response.raise_for_status()
    return response.text

def decode_mojibake(text):
    """Исправляет двойное кодирование (mojibake)"""
    try:
        # Сначала пробуем как Latin-1, затем как UTF-8
        return text.encode('latin1').decode('utf-8')
    except:
        return text

def extract_sms_from_js(html):
    # Ищем все вызовы sms_row_insert
    pattern = r'sms_row_insert\((\w+_sms_store),\s*sms,\s*pos,\s*(\d+)\);'
    matches = re.findall(pattern, html)

    messages = []
    for store_id, line in matches:
        # Ищем массив sms перед вызовом функции
        start = html.rfind('sms= [', 0, html.find(f'sms_row_insert({store_id}'))
        if start == -1:
            continue

        end = html.find('];', start) + 2
        sms_array_str = html[start:end]

        # Парсим массив SMS
        try:
            # Убираем sms= и ; в конце
            array_content = sms_array_str[5:-2].strip()

            # Используем регулярное выражение для извлечения элементов массива
            items = re.findall(r'"(.*?)"', array_content)

            for item in items:
                if not item or item == '""':
                    continue

                # Разбиваем по запятым (максимум 2 разбиения)
                parts = item.split(',', 2)
                if len(parts) >= 3:
                    time_part = parts[0].strip()
                    sender = parts[1].strip()
                    text = parts[2].strip()

                    # Исправляем кодировку
                    time_part = decode_mojibake(time_part)
                    sender = decode_mojibake(sender)
                    text = decode_mojibake(text)

                    # Дополнительная очистка текста
                    text = text.replace('\\n', '\n')
                    text = text.replace('\\r', '')
                    text = text.replace('\\t', ' ')

                    messages.append({
                        'line': line,
                        'time': time_part,
                        'from': sender,
                        'text': text
                    })
        except Exception as e:
            print(f"Ошибка парсинга массива SMS: {e}")

    return messages

def main():
    try:
        html = fetch_page()

        # Сохраняем для отладки
        with open("goip_sms_page.html", "w", encoding="utf-8") as f:
            f.write(html)

        messages = extract_sms_from_js(html)

        print(f"\nНайдено SMS: {len(messages)}\n")

        for i, sms in enumerate(messages, 1):
            print(f"SMS #{i}")
            print(f"Линия: {sms['line']}")
            print(f"Время: {sms['time']}")
            print(f"От: {sms['from']}")
            print(f"Текст: {sms['text']}")
            print("-" * 50)

    except Exception as e:
        print(f"Ошибка: {e}")

if __name__ == "__main__":
    main()



И подарок, парсер звонков, что бы приходили уведомления кто звонит... а то мой mikopbx не может считать номер звонящено....

Скрытый текст
import requests
from bs4 import BeautifulSoup
import time
import re

# Конфигурация
GOIP_URL = "http://10.20.30.7/default/en_US/status.html"
USERNAME = "admin"
PASSWORD = "admin"

def get_status():
    # Получаем страницу с базовой аутентификацией
    response = requests.get(GOIP_URL, auth=(USERNAME, PASSWORD))

    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')

        # Находим все строки с статусами линий (l1_line_state, l2_line_state, и т.д.)
        for i in range(1, 5):  # Для линий 1-4
            status_cell = soup.find('td', {'id': f'l{i}_line_state'})
            if status_cell:
                status = status_cell.get_text(strip=True)
                print(f"Линия {i}: {status}")

                # Если статус содержит "INCOMING", извлекаем номер
                if "INCOMING:" in status:
                    # Извлекаем номер с помощью регулярного выражения
                    caller_number = re.search(r'INCOMING:(\d+)', status).group(1)
                    caller_number = f"+{caller_number}"
                    print(f"Входящий звонок на линии {i} от: {caller_number}")
                    # Здесь можно добавить отправку уведомления
                    # send_notification(f"Входящий звонок на линии {i} от: {caller_number}")
            else:
                print(f"Не удалось найти статус для линии {i}")
    else:
        print(f"Ошибка доступа. Статус: {response.status_code}")
    

def main():
    while True:
        print("\n--- Проверка статуса ---")
        get_status()
        time.sleep(1)  # Пауза в 1 секунду

if __name__ == "__main__":
    main()

Ознакомился, интересная вешь, мне вот курсор не зашел, и этот тоже не нравиться, что недает свои локальные модели использовать... модет кто подскажет, подобные решения, но с вожножностью подключать свои локальные и глобальные ии апи. мне вот очень поравилось работать с чери студио, там много моделий, может как мост служить между моделями, проверять накакой железке модел как работает, проверять как проходит обучение... не всегда подхотят готовые решения и да и не хочется раскрывать ии свои базы, не хочу безплатно обучать чужие модели и учить их искать ошибки.

Да, так мы сэкономим десятки гигов, но просчеты будут у того, что запустил. Думаю и запуск будет очень долгий из-за заполнения графической памяти из сети, скорость запуска сильно зависит от скорости интерфейса, запуск на мак студии с 128 гигов оперативы быстрее чем на pci5.0x16 ada6000, и в разы быстрее если pci3.0x16 ada6000. Это все касается только LM Studio. Скорость работы, честно не сравнивал. На мак студии студии запучшена более жирная модель. Так как там 80 гигов выделяется под видео память, а у ada6000 48 гигов.

LM Studio сегодня меня довел до ручки, и перешел на Ollama, интерфейс сделали очень красивый, я в восторге... oss-120 отлично себя чувствует на мак студио 128Гб, использую удаленно, это значительно дешевле, чем покупать видео карту с таким количество памяти. возьмите на заметку. Если подскажите будет очень классно, Ollama заставить использовать облачные или уделанные модели. Локальную LM Studio можно подключить удаленной LM Studio и использовать в локальной сети всем желающим, хочу повторить данный опыт с Ollama

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Системный администратор, DevOps-инженер
От 300 000 ₽
Python
Высоконагруженные системы