تطوير خدمة عبر الإنترنت للمستثمرين في موقع pythonanywhere.com باستخدام بيانات من Yahoo Finance

الغرض من هذه المقالة هو مشاركة تجربة تطوير خدمة تحليلية عبر الإنترنت للمستثمرين في لغة بيثون. ينصب التركيز على القضايا المفاهيمية أكثر من التركيز على الوصف التفصيلي لأي تقنية معينة. آمل أن يتمكن القارئ من العثور بسهولة على أي تفاصيل باستخدام القليل من البحث على Google. من أجل الوضوح ، أعطي رابطًا للخدمة في بداية العرض التقديمي www.emarkoff.com .



صورة



قليلا عن الاستثمارات



بدأت في الاهتمام بموضوع الاستثمارات في صيف عام 2019 وانغمست على الفور في بحر من المنشورات المختلفة ومدونين الفيديو الذين قدموا ، في خلاف ، نصائح حول كيفية الاستثمار ومكانه. أصبح من الواضح أنه في عالم الاستثمار ، هناك طريقتان رئيسيتان لاتخاذ القرارات ، والتي تستند إلى التحليل الأساسي والفني. الطريقة الأولى أكثر ملاءمة للاستثمارات طويلة الأجل ، والطريقة الثانية للمضاربة.



بعد مرور بعض الوقت ، جاء فهم الفوائد التي لا شك فيها من لعب سيناريوهات تاريخية مختلفة مثل "ماذا سيحدث إذا استثمرت في كذا وكذا عام ولفترة كذا وكذا". يتيح لك هذا النوع من التحليل الشعور بالفرق بين الأوراق المالية المناسبة للاستثمار والمضاربة ويشكل فهماً للمستثمر المبتدئ في الأدوات المالية والإطار الزمني الذي يستحق الاستثمار فيه.



نضج الفكرة واختيار المضيف وبنية خدمة الويب



بمرور الوقت ، نشأت فكرة إنشاء خدمة في شكل موقع على شبكة الإنترنت ، والتي من شأنها أن تسمح بتشغيل سيناريوهات تاريخية للاستثمار في الأدوات المالية المختلفة.



وكانت الخطوة التالية تحديد ثلاث نقاط رئيسية:



  • اختيار المضيف
  • اختيار مجموعة التكنولوجيا وبنية الخدمة ؛
  • ابحث عن مصدر مفتوح للبيانات يمكن من خلاله الحصول على معلومات حول أسعار السوق.


أصبح من الواضح على الفور أنه من المستحسن تشغيل البرامج النصية (أي إجراء جميع الحسابات) على جانب الخادم. وهناك ثلاثة أسباب. الأول هو عدم الرغبة في فتح كل الشفرات للمستخدم. السبب الثاني هو البحث عن حل لا توجد فيه حاجة أساسية لنقل جميع البيانات عبر الشبكة ، والثالث هو الاستقلال عن قدرات الحوسبة من جانب المستخدم. تم الاختيار بهدف المستقبل ، إذا أصبح حجم البيانات فجأة كبيرًا لدرجة أنه سيكون من الضروري نشر النهاية الخلفية على الأنظمة الأساسية المتخصصة مثل Amazon Web Services أو Microsoft Azure. كالعادة ، نظرًا للطموح الكافي ، يتم اختيار الحلول مبدئيًا لتكون قابلة للتطوير.



بالنسبة إلى لغات البرمجة ، لم يكن هناك شك في الواجهة في البداية. كل شيء معياري: html + css + javascript. تقرر كتابة الواجهة الخلفية بلغة بيثون ، لأنها واحدة من أكثر اللغات شعبية ودعمًا للتطوير السريع والنماذج الأولية اليوم. كانت جميع القرارات اللاحقة إلى حد ما نتيجة للاختيار أعلاه.



تم اختيار موقع Pythonanywhere.com كمضيف ، وتتمثل الميزة المميزة له في أنه موجه نحو البرمجة بلغة Python ويقدم سعرًا رخيصًا نسبيًا يبلغ 5 دولارات شهريًا. تم تطوير الموقع لاحقًا باستخدام إطار عمل Django. على الرغم من أن إطار العمل هذا لا يعتبر الأبسط ، إلا أنه يزود المطور بأدوات شاملة في شكل طرق عرض وقوالب وتطبيقات جاهزة مكونة من مكونات إضافية ، والتي تتيح لك في المجمل إنشاء موقع ويب كامل.

فيما يتعلق باختيار مصدر البيانات ، جذبت انتباهي على الفور تقريبًا خدمة مثل Yahoo Finance ، وبالتالي ، توفر مكتبة yfinance واجهة برمجة تطبيقات ملائمة للبيثون.



بعض ميزات موقع pythonanywhere.com



تتيح لك استضافة Pythonanywhere العمل في عدة أوضاع:



  • إطلاق مترجم Python في وحدة التحكم ؛
  • العمل في كمبيوتر محمول jupyter ؛
  • إطلاق تطبيقات ويب كاملة.


إذا رغبت في ذلك ، تسمح لك الاستضافة بتثبيت واستخدام أي إطار عمل للويب من نوع Python. قد لا يكون بالضرورة جانغو ، ولكن ، على سبيل المثال ، نفس القارورة ، التي تعتبر أسهل في التعلم. يعد إعداد تطبيق الويب ونشره حرفيًا على بعد بضع نقرات حتى تتمكن من التركيز على الأساسيات.



توفر لوحة القيادة المريحة وصولاً سريعًا إلى الملفات والمجلدات ووحدة التحكم وأي إعدادات. دعم مدمج لـ https ، وأسماء المجالات المتصلة ، بالإضافة إلى حماية كلمة المرور لمحتوى الموقع. تتوفر مراقبة حركة المرور ، بالإضافة إلى سجلات الخادم عبر الرابط في لوحة القيادة.



أود أيضًا أن أشير إلى راحة أخرى لا شك فيها للمطور. بالإضافة إلى سجلات الخادم ، عند حدوث أخطاء في الواجهة الخلفية ، غالبًا ما يتم عرض التتبع والقيم المحلية للمتغيرات مباشرةً في نافذة المتصفح الحالية في وقت استدعاء الوظائف والأساليب المقابلة. علاوة على ذلك ، يمكن رؤية التتبع حتى في نافذة المتصفح على الهاتف الذكي.

ساعدني هذا النوع من وضع التصحيح شخصيًا كثيرًا ، مما سمح لي بتصحيح الأخطاء في الكود حرفيًا أثناء التنقل.



نقطة أخرى مهمة ، والتي تستحق اهتمامك بلا شك ، هي العمل مع أنظمة التحكم في الإصدار. تتوفر Git و svn و hg / mercurial في وحدة تحكم Bash المضمنة.



العمل مع البيانات



اخترت مزود المعلومات المالية Yahoo Finance ومكتبة yfinance بسبب عدم وجود رسوم اشتراك والوصول إلى التحديثات اليومية لمعلومات الأسهم. من خلال yfinance API ، تقوم الخدمة عبر الإنترنت بسحب المعلومات بسرعة من ثلاث بورصات أمريكية NASDAQ و NYSE و AMEX. ومع ذلك ، يجب الانتباه على الفور إلى حقيقة أن موقع المطور yfinance يحتوي على تحذير بشأن حظر الاستخدام التجاري.



بالنسبة لتقنية التفاعل مع خادم الويب ، يتم تحميل نموذج بعلامات html مبدئيًا في المتصفح. الخطوة التالية هي تشغيل جافا سكريبت ، والتي تستخدم طريقة الحصول على الطلبات لاسترداد جميع البيانات الضرورية من الخادم. يتم تحديث محتوى الصفحة باستخدام تقنية Ajax من خلال واجهات مكتبة jQuery.



يتم تخزين جميع بيانات الخدمة عبر الإنترنت بتنسيقين: csv و SQLite. سمح لي هذا الاختيار بالبدء بسرعة في تنفيذ المنطق الأساسي دون الحاجة إلى تثبيت خادم قاعدة البيانات وتكوينه.



قليلا عن Django



أود أيضًا أن أتناول بالتفصيل ثلاثة مكونات برمجية تم دمجها في بنية الموقع باستخدام كتل جاهزة ، مما أدى إلى تسريع عملية التطوير بشكل كبير. أعني لوحة إدارة Django ووحدة إدارة الجلسة django.contrib.sessions وإطار عمل excontrib / django_comments.



يسمح لك Django ببناء مشاريع من مكونات برمجية منفصلة تسمى التطبيقات. بمجرد كتابتها ، يمكن إعادة استخدام التطبيقات في مشاريع مختلفة. لتضمين المكونات المذكورة أعلاه في المشروع ، يجب عليك تحديدها بشكل صريح في ملف settings.py



INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.sessions',
    'django_comments',
]


بالإضافة إلى ذلك ، يجب تكوين أنماط عنوان URL بشكل مناسب لتقديم الطلبات من جانب المتصفح:



urlpatterns = [
    url(r'^admin/', admin.site.urls)
    url(r'^comments/', include('django_comments.urls')),
]


كما ترون من مقتطفات التعليمات البرمجية أعلاه ، ليس من الصعب تضمين مكونات جاهزة ، ونتيجة لذلك فإنها تضيف جزءًا كبيرًا من الوظائف إلى المشروع.



بعد نشر إطار عمل django ، يتطلب بدء لوحة الإدارة بضع خطوات بسيطة: تحقق من إعدادات ملف settings.py ، وترحيل نماذج البيانات المضمنة ، وإنشاء مستخدم متميز. يتم تعيين تسجيل الدخول الشخصي وكلمة المرور وصندوق البريد للمسؤول. بشكل افتراضي ، يتم الوصول إلى لوحة الإدارة عن طريق إضافة المسار القياسي / المسؤول / إلى عنوان URL للمجال.

يوجد داخل اللوحة واجهة ملائمة لإدارة قاعدة البيانات المدمجة. بشكل افتراضي ، تخزن قاعدة البيانات هذه معلومات حول المستخدمين ومجموعات المستخدمين. هذا ملائم للغاية لأنه من السهل تنفيذ ترخيص المستخدم على الموقع. وإذا كانت سرعة إطلاق موقع الويب مهمة بشكل أساسي ، فيمكنك توفير الوقت وعدم إنشاء صفحة منفصلة للحصول على مستخدمين جدد ومنحهم الحقوق. يكفي الذهاب إلى لوحة الإدارة وإضافة إدخال جديد إلى قاعدة البيانات عبر واجهة المستخدم. ومع ذلك ، فإن هذا الحل مناسب فقط لعدد قليل من المستخدمين ، لأنه لا يمنح المستخدمين القدرة على التسجيل وإعادة تعيين كلمة المرور الخاصة بهم بأنفسهم.



ميزة أخرى للوحة الإدارة هي أنها تتيح الوصول ليس فقط إلى بيانات المستخدم ، ولكن ، من حيث المبدأ ، إلى أي بيانات مخزنة في قاعدة البيانات تحت سيطرة Django. على سبيل المثال ، بالإضافة إلى البيانات المتعلقة بالمستخدمين المصرح لهم ، تخزن قاعدة البيانات جزئيًا محتوى الموقع والتعليقات التي تركها الزوار.



سأخبرك عن اختراق للحياة استخدمته لإضافة نموذج ملاحظات إلى صفحة "نبذة عني". من أجل عدم كتابة رمز منفصل إما للمتصفح أو لمعالجة البيانات على الخادم ، بدلاً من نموذج التعليقات ، تم إنشاء كتلة تعليق قياسية في قالب html المقابل ، ولكن تمت إزالة القدرة على عرض المحفوظات. باستخدام هذا الأسلوب ، تتم معالجة بيانات نموذج الملاحظات وتخزينها في نفس الجدول مثل تعليقات زوار الموقع.



تم تنفيذ إدارة الجلسة باستخدام وحدة django.contrib.sessions المدمجة. تقوم كائنات الجلسات بتخزين معلومات حول الإعدادات المحددة من قبل المستخدمين عند زيارتهم للموقع. على وجه الخصوص ، تخزن الجلسات فترة الاستثمار المحددة ، والفترة التاريخية للتحليل ، ولغة الموقع.



سوف أسهب قليلاً في كيفية جعل الموقع متعدد اللغات. كان من المهم بالنسبة لي أن أجد حلًا بسيطًا وسريعًا ، يمكنني من خلاله الانتقال إلى لوحة الاستضافة وتحرير نص أي مقال بنقرتين فقط. لذلك ، لتخزين نصوص المقالات ، اخترت تنسيق الملفات النصية المستقلة ، وليس التحميل في قاعدة البيانات. بالنظر إلى عدد قليل من المقالات (تقريبًا ، ما يصل إلى 10) وخيارين فقط لاختيار اللغة (الروسية والإنجليزية) ، فإنني أعتبر هذا الحل مقبولًا تمامًا. مرة أخرى ، كل هذا يتوقف على المقياس.

وآخر شيء أود التركيز عليه هو استخدام قوالب Django. من بين أشياء أخرى ، تسمح لك القوالب باستيراد قيم متغيرة إلى صفحة html مباشرة من كود Python ، وكذلك جمع صفحات html من عدة كتل مستقلة. كتوضيح ، سأقدم مثالاً مباشرةً من الكود الخاص بي.



تضمين العديد من الكتل ذات المحتوى الديناميكي في الهيكل العام لصفحة html:



html:
        {% include article_file_name %}
        {% include online_service_file_name %}
        {% include comments_file_name %}

Pyhton/backend:

def view_article(request, selected_url_path = 'expected_return'):

    context = {
        'article_file_name':article_file_name,
        'online_service_file_name':online_service_file_name,
        'comments_file_name':comments_file_name,
    }
    return render(request, 'articles/base_blog_page.html', context=context)


هنا article_file_name و online_service_file_name و comments_file_name هي في الواقع أسماء المتغيرات التي يتم من خلالها تمرير المسارات إلى ملفات html مع المحتوى المضاف.



خاتمة. تجربة مفيدة في التطوير الذاتي لخدمة الويب



يمكنك رؤية نتيجة عملي في المشروع من خلال النقر على الرابط www.emarkoff.com .



تعد منصة pythonanywhere بشكل عام حلاً جيدًا لتطوير تطبيقات الويب المستندة إلى Django. وإذا كانت لديك أفكارك الخاصة ، فسيكون شهرين أو ثلاثة أشهر كافيين تمامًا لفهم الأساسيات وتنفيذ بعض تطبيقات الويب البسيطة ، حتى لو لم تكن مطور ويب محترفًا.



يمكن أن تكون هذه الخبرة مفيدة جدًا للمديرين والمحللين وأي شخص يتعين عليه التعامل مع تطوير الويب وخدمات الويب أثناء أداء واجبه ، خاصة أثناء مرحلة الاختبار التجريبي. ستكون قادرًا على فهم معنى رسائل خطأ الخادم بشكل أفضل ، والتواصل بشكل أكثر إنتاجية مع الدعم الفني وممثلي التطوير.



All Articles