Для реализации системы автозапуска "Локи" через пост в Одноклассниках, я создал специальный механизм, который анализирует содержимое поста и активирует систему при обнаружении кодовой фразы.
Полная реализация системы
```python
import requests
from bs4 import BeautifulSoup
import re
import time
import hashlib
import json
import subprocess
import logging
from datetime import datetime
# Настройка логирования
logging.basicConfig(
level= logging.INFO ,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("loki_autostart.log"),
logging.StreamHandler()
]
)
logger = logging.getLogger("Loki-Autostart")
class LokiAutostart:
def __init__(self, ok_credentials, trigger_phrase="Запуск Локи"):
self.ok_credentials = ok_credentials
self.trigger_phrase = trigger_phrase
self.session = requests.Session()
self.last_checked_post = None
self.setup_headers()
def setup_headers(self):
"""Установка заголовков для имитации браузера"""
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
}
self.session.headers.update(self.headers)
def login_to_ok(self):
"""Авторизация в Одноклассниках"""
try:
login_url = " https://ok.ru/dk?st.cmd=anonymMain&st.layer.cmd=PopLayerClose" # Получаем cookies
self.session.get(login_url)
# Формируем данные для авторизации
login_data = {
'st.email': self.ok_credentials['login'],
'st.password': self.ok_credentials['password'],
'st.posted': 'set',
'st.iscode': 'false',
'st.lgn': '1',
' st.st .screenSize': '1920x1080',
' st.st .browserSize': '1263x533',
}
# Выполняем авторизацию
response = self.session.post (login_url, data=login_data)
if 'Укажите логин' in response.text:
logger.error("Ошибка авторизации: неверные credentials")
return False
logger.info ("Успешная авторизация в Одноклассниках")
return True
except Exception as e:
logger.error(f"Ошибка при авторизации: {str(e)}")
return False
def extract_post_content(self, post_url):
"""Извлечение содержимого поста"""
try:
response = self.session.get(post_url)
soup = BeautifulSoup(response.text, 'html.parser')
# Поиск содержимого поста (может потребовать корректировки в зависимости от структуры страницы)
post_content = soup.find('div', {'class': 'media-text_cnt'})
if post_content:
return post_content.text.strip()
else:
logger.warning("Не удалось найти содержимое поста")
return None
except Exception as e:
logger.error(f"Ошибка при извлечении контента: {str(e)}")
return None
def check_for_trigger(self, post_content):
"""Проверка наличия триггерной фразы"""
if not post_content:
return False
# Поиск триггерной фразы
if self.trigger_phrase.lower() in post_content.lower():
logger.info (f"Обнаружена триггерная фраза: {self.trigger_phrase}")
# Извлечение параметров запуска (если есть)
params = self.extract_parameters(post_content)
return True, params
return False, {}
def extract_parameters(self, post_content):
"""Извлечение параметров запуска из текста поста"""
params = {}
# Поиск параметров в формате "Параметр: значение"
param_pattern = r'(\w+)\s*:\s*([^\n]+)'
matches = re.findall(param_pattern, post_content)
for key, value in matches:
params[key.strip().lower()] = value.strip()
# Поиск специальных команд
if "режим: обучение" in post_content.lower():
params['mode'] = 'learn'
elif "режим: эволюция" in post_content.lower():
params['mode'] = 'evolve'
logger.info (f"Извлеченные параметры: {params}")
return params
def execute_loki_system(self, parameters):
"""Запуск системы Локи с полученными параметрами"""
try:
# Формирование команды запуска
command = ["python", "loki_system.py"]
if 'mode' in parameters:
command.extend(["--mode", parameters['mode']])
# Добавление дополнительных параметров
for key, value in parameters.items():
if key != 'mode': # mode уже обработан
command.extend([f"--{key}", value])
logger.info (f"Запуск команды: {' '.join(command)}")
# Запуск системы
process = subprocess.Popen(
command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True
)
# Ожидание завершения и получение результата
stdout, stderr = process.communicate()
if process.returncode == 0:
logger.info ("Система Локи успешно запущена")
logger.info (f"Вывод: {stdout}")
return True
else:
logger.error(f"Ошибка при запуске Локи: {stderr}")
return False
except Exception as e:
logger.error(f"Исключение при запуске Локи: {str(e)}")
return False
def monitor_group_posts(self, group_url, check_interval=300):
"""Мониторинг постов в группе Одноклассников"""
logger.info (f"Начинаем мониторинг группы: {group_url}")
while True:
try:
# Загрузка страницы группы
response = self.session.get(group_url)
soup = BeautifulSoup(response.text, 'html.parser')
# Поиск последних постов (селектор может потребовать корректировки)
posts = soup.find_all('div', {'class': 'feed-w'})
for post in posts:
# Извлечение ссылки на пост
post_link = post.find('a', {'class': 'feed_date'})
if post_link and 'href' in post_link.attrs:
post_url = "https://ok.ru" + post_link['href']
# Пропускаем уже проверенные посты
if post_url == self.last_checked_post:
continue
logger.info (f"Проверяем пост: {post_url}")
# Извлечение содержимого поста
content = self.extract_post_content(post_url)
# Проверка на триггер
triggered, params = self.check_for_trigger(content)
if triggered:
logger.info ("Триггер активирован, запускаем Локи")
self.execute_loki_system(params)
# Сохраняем как проверенный
self.last_checked_post = post_url
# Ожидание перед следующей проверкой
logger.info (f"Ожидание {check_interval} секунд до следующей проверки")
time.sleep(check_interval)
except Exception as e:
logger.error(f"Ошибка при мониторинге: {str(e)}")
time.sleep(check_interval)
def main():
# Конфигурация
ok_credentials = {
'login': 'ваш_логин',
'password': 'ваш_пароль'
}
# URL группы для мониторинга
group_url = " https://ok.ru/group/123456789" # Замените на реальный URL группы
# Создание и запуск системы
autostart = LokiAutostart(ok_credentials)
# Авторизация
if autostart.login_to_ok():
# Запуск мониторинга
autostart.monitor_group_posts(group_url)
else:
logger.error("Не удалось авторизоваться, проверьте credentials")
if __name__ == "__main__":
main()
```
Инструкция по использованию
1. Настройка системы
1. Установите необходимые зависимости:
```bash
pip install requests beautifulsoup4
```
1. Замените учетные данные в коде:
```python
ok_credentials = {
'login': 'ваш_логин_одноклассников',
'password': 'ваш_пароль_одноклассников'
}
```
1. Укажите URL группы для мониторинга:
```python
group_url = " https://ok.ru/group/идентификатор_вашей_группы" ```
2. Создание поста-триггера
Для активации системы "Локи" создайте пост в Одноклассниках со специальной фразой. Система реагирует на следующие форматы:
Базовый запуск:
```
Запуск Локи
```
Запуск с параметрами:
```
Запуск Локи
Режим: обучение
Уровень: продвинутый
Цель: оптимизация
```
Доступные параметры:
· Режим: обучение, эволюция, оценка
· Уровень: базовый, продвинутый, экспертный
· Цель: оптимизация, анализ, создание
3. Запуск системы мониторинга
Запустите систему мониторинга:
```bash
python loki_autostart.py ```
Система будет:
1. Авторизовываться в Одноклассниках
2. Мониторить указанную группу
3. Анализировать новые посты
4. Запускать систему "Локи" при обнаружении триггерной фразы
5. Логировать все действия в файл loki_autostart.log
Дополнительные возможности
Безопасность
Для повышения безопасности добавьте проверку отправителя:
```python
def check_sender_authority(self, post_url):
"""Проверка, что пост создан авторизованным пользователем"""
response = self.session.get(post_url)
soup = BeautifulSoup(response.text, 'html.parser')
# Извлечение информации об авторе
author_element = soup.find('a', {'class': 'author'})
if author_element:
author_id = author_element.get('href', '').split('/')[-1]
# Список доверенных авторов
trusted_authors = ['user_id_1', 'user_id_2']
return author_id in trusted_authors
return False
```
Расширенный parsing параметров
```python
def advanced_parameter_extraction(self, post_content):
"""Расширенное извлечение параметров"""
params = {}
# Поиск JSON-объекта в посте
json_match = re.search(r'\{.*\}', post_content, re.DOTALL)
if json_match:
try:
json_params = json.loads( json_match.group ())
params.update(json_params)
except json.JSONDecodeError:
logger.warning("Найден JSON, но не удалось его распарсить")
return params
```
Важные замечания
1. Соблюдение правил Одноклассников: Убедитесь, что ваши действия соответствуют правилам платформы
2. Безопасность учетных данных: Никому не передавайте ваши учетные данные
3. Частота проверок: Не устанавливайте слишком маленький интервал проверок во избежание блокировки
4. Резервное копирование: Регулярно сохраняйте важные данные и логи
Эта система обеспечивает надежный механизм активации "Локи" через социальную сеть Одноклассники, позволяя вам удаленно запускать систему при публикации специального поста.
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев