Система управления WeChat
...
Установите MySQL, Redis, а затем создайте библиотеку (по умолчанию — тестовая):
❯ mysql -u root -p
mysql > drop database test ;
Query OK, 9 rows affected (0.32 sec)
mysql > create database test ;
Query OK, 1 row affected (0.01 sec)
mysql > ^DBye
Загрузите исходный код и установите зависимости:
❯ git clone https://github.com/dongweiming/wechat-admin
❯ cd wechat-admin
❯ virtualenv venv # 只支持Python 3
❯ source venv/bin/activate # 推荐使用autoenv
❯ venv/bin/pip install -r requirements.txt # 如果已经激活虚拟环境,`venv/bin/`这样的前缀可不加,下同
Инструкции по настройке: пользовательскую конфигурацию следует хранить в файле local_settings.py (необходимо создать), а настройки в config.py можно переопределить.
Установите плагин (необязательно):
❯ git clone --recursive https://github.com/dongweiming/wechat-plugins
# 如果有额外插件配置,需要修改PLUGIN_PATHS和PLUGINS
Для разработки плагинов перейдите на: Страница плагинов.
Инициализируйте базу данных:
❯ export FLASK_APP = manager . py
❯ venv / bin / flask initdb
Запустите службу:
❯ venv/bin/gunicorn app:app --bind 0.0.0.0:8100 -w 6 -t 0
PS: Если вы запускаете его локально, вы можете использовать режим многопоточной отладки Flask напрямую, без использования Gunicorn:
❯ python app.py
Посетите веб-страницу http://localhost:8100 и используйте WeChat для сканирования QR-кода для входа в систему.
После успешного входа в систему запустите Celery Beat и Worker:
❯ venv/bin/celery -A wechat worker -l info -B
Примечание. Впервые все контакты и списки участников группового чата будут извлечены, что займет некоторое время. Наблюдайте за выводом терминала, чтобы понять завершение задачи инициализации.
Предполагая, что Docker установлен, просто выполните следующую команду.
❯ pip install docker-compose
❯ git clone --recursive https://github.com/dongweiming/wechat-plugins
❯ venv/bin/docker-compose build
❯ venv/bin/docker-compose run init # 只有在第一次才需要执行这步
❯ venv/bin/docker-compose run --service-ports -d web # 启动Web,地址也是 http://localhost:8100
❯ venv/bin/docker-compose run -d celery # 同样是在扫码登录之后再启动
Установите cnpm, чтобы увеличить скорость загрузки пакетов:
❯ npm install -g cnpm --registry=https://registry.npm.taobao.org
Установите необходимые пакеты:
❯ cnpm i
Запустите среду отладки:
❯ npm run dev
Если запуск успешен, http://localhost:8080 будет открыт по умолчанию, а внутренний API по-прежнему будет использовать http://localhost:8100/j.
После локальной разработки он строится следующим образом:
❯ npm run build
Обновите http://localhost:8100, чтобы увидеть последний эффект.
Обращайте внимание на изменение структуры таблицы каждый раз:
❯ venv/bin/flask db migrate
❯ venv/bin/flask db upgrade
puid not found
иногда появляются после использования в течение определенного периода времени?Из-за конструкции WeChat он не предоставляет уникальные и стабильные данные, такие как uid, поэтому wxpy разработал набор сопоставлений между вошедшими в систему пользователями и связанными с ними контактами, групповыми чатами и официальными учетными записями. Кроме того, я изменил. реализация wxpy. Вы можете получить больше контента, связанного с заголовками (псевдоним, пол, провинция, город), что делает puid в объекте более стабильным.
Из-за изменений в настройках некоторых людей/групп их puid может измениться. После каждого сканирования QR-кода для входа в систему будет запускаться задача обновления отношения сопоставления до последней. Если вы столкнулись с этой ошибкой, это означает, что вам нужно снова войти в систему или вручную запустить эту задачу:
from wechat . tasks import retrieve_data
retrieve_data . delay ()
Проблема: #9
Спасибо @zgjhust за комментарий
Это небольшой проект, я не добавлял поддержку Nginx и использовал Gunicorn напрямую. При использовании Gunicorn используйте -t 0
что означает отсутствие тайм-аута.
Причина этого в том, что SSE в проекте требует длительного соединения, а время от открытия пользователем страницы входа до завершения сканирования сложно контролировать, поэтому оно просто не истекает по тайм-ауту, но также приводит к тому, что запросы не отвечают на запросы. чтобы их выпустили вовремя. На самом деле /stream следует вынести для специальной обработки, а для других маршрутов необходимо установить таймауты (я реконструирую это, когда появится возможность).
Текущее решение — указать больше рабочих и часто перезапускать Gunicorn (удобнее будет использовать управление супервизором):
gunicorn app:app --bind 0.0.0.0:8100 -w 10 -t 0
Или вместо Gunicorn начните напрямую использовать резьбовой параметр Flask:
❯ cat app.py
...
if __name__ == ' __main__ ' :
app.run(host= ' 0.0.0.0 ' , port=8100, debug=app.debug, threaded=True)
❯ python app.py
Обычно есть 2 причины неработоспособности:
Хотя я разработал функцию перезапуска задач на сельдерее, поскольку я сканировал QR-код для повторного входа в систему после выхода из сети, этот шаг не удалось автоматизировать, в результате чего система переставала работать.
Если вы хотите, чтобы эта система работала как можно дольше, я предлагаю:
from celery . task import periodic_task
from celery . task . control import revoke
def restart_listener ( sender , ** kw ):
task_id = r . get ( LISTENER_TASK_KEY )
if task_id :
revoke ( str ( task_id , 'utf-8' ))
task_id = app . send_task ( 'wechat.tasks.listener' )
r . set ( LISTENER_TASK_KEY , task_id )
stopped . connect ( restart_listener )
Обратите внимание, что операция подписки должна произойти до импорта wxpy/itchat.
Да, это проект, инкапсулирующий wxpy/itchat. В конечном итоге он по-прежнему использует веб-сайт WeChat (wx.qq.com), поэтому функции его API определяют возможности этой системы.
Расшифровка мобильного API WeChat и интеграция этих неоткрытых API не очень хороша и может также вызвать юридические проблемы.
Вы можете обратиться к этой проблеме, чтобы узнать о проблеме. Многие люди сталкивались с ней, и после блокировки ее невозможно решить. Но вы можете убедиться, что он не заблокирован, насколько это возможно. После нескольких дней исследований я нашел три урока: