نظام إدارة 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
ملاحظة: إذا كنت تقوم بتشغيله محليًا، فيمكنك استخدام وضع تصحيح الأخطاء متعدد الخيوط مباشرةً في Flask دون استخدام gunicorn:
❯ python app.py
قم بزيارة صفحة الويب http://localhost:8100 واستخدم WeChat لمسح رمز الاستجابة السريعة لتسجيل الدخول.
بعد تسجيل الدخول بنجاح، ابدأ تشغيل 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 افتراضيًا، ولا تزال واجهة برمجة التطبيقات الخلفية تستخدم 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 في الكائن أكثر استقرارًا.
بسبب التغييرات في إعدادات بعض الأشخاص/المجموعات، قد يتغير رمز الاستجابة السريعة الخاص بهم بعد كل عملية مسح لرمز الاستجابة السريعة لتسجيل الدخول، سيتم تشغيل مهمة لتحديث علاقة التعيين لتحديث علاقة التعيين إلى الأحدث. إذا واجهت هذا الخطأ، فهذا يعني أنك بحاجة إلى تسجيل الدخول مرة أخرى، أو تشغيل هذه المهمة يدويًا:
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
عادة ما يكون هناك سببان لعدم العمل:
على الرغم من أنني صممت وظيفة إعادة تشغيل المهام على الكرفس، لأنني قمت بمسح رمز الاستجابة السريعة ضوئيًا لتسجيل الدخول مرة أخرى بعد عدم الاتصال بالإنترنت، إلا أنه لا يمكن تنفيذ هذه الخطوة تلقائيًا، مما تسبب في توقف النظام عن العمل.
إذا كنت تريد أن يعمل هذا النظام لأطول فترة ممكنة، فاقتراحي هو:
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) الخاصة به تحدد إمكانيات هذا النظام.
إن فك تشفير واجهة برمجة تطبيقات WeChat للجوال ودمج واجهات برمجة التطبيقات غير المفتوحة هذه ليس جيدًا جدًا، وقد يتسبب أيضًا في حدوث مشكلات قانونية.
يمكنك الرجوع إلى هذه المشكلة لمعرفة المشكلة التي واجهها الكثير من الأشخاص ولا توجد طريقة لحلها بعد الحظر. ولكن يمكنك التأكد من عدم حظره قدر الإمكان. وبعد عدة أيام من البحث، وجدت ثلاثة دروس: