لا تخافوا من JSON أو أول تطبيق لواجهة برمجة التطبيقات

لدي حوالي 8 سنوات من الخبرة في اختيار الكود. خلال هذا الوقت ، تمكنت من تجربة العديد من اللغات والتقنيات المختلفة في اتجاهات مختلفة: من "تطوير" جميع أنواع نكات الخداع على PHP Devel Studio إلى تطبيقات الويب الكاملة على الأطر والبرامج الحديثة على الشبكات العصبية. بالمناسبة ، حدث الانغماس الأول في البرمجة في سن 12 بفضل هذا المنصب. أنا الآن في سنتي الثانية من درجة البكالوريوس في علوم الكمبيوتر. حتى وقت قريب ، أي حتى السنة الأولى ، ولطالما كنت خائفة دائمًا في كل مرة رأيتها فيها كلمة JSON. متفهم و متفهم لكنني لاحظت أن العديد من اللاعبين من مجموعتي لا يزالون لا يعملون مع أي واجهة برمجة التطبيقات. أحب المقالات التي يشرح فيها المؤلف بالتفصيل موضوعه ، مع إرفاق مقاطع من التعليمات البرمجية ومضغها لماذا ولماذا قرر ذلك ، ولا يلقي بنفسه الشروط والتقنيات المعقدة. في هذه المقالة سوف أصف استخدام API (باستخدام PUBG API كمثال) مع كلمات بسيطة للمبتدئ ، كما يقولون ، دون هراء. دعنا نذهب!

صورة

جوجل كولاب


لإكمال هذه المقالة ، ستحتاج إلى حد أدنى من معرفة بيثون. بكلمة "الحد الأدنى" ، أعني الطباعة ، إذا ، إذا ، حسناً ، كل أنواع الأوراق والقواميس. سنعمل في بيئة Google Colaboratory (المشار إليها فيما يلي - ببساطة "colab"). Colab هي بيئة مستعرض مجانية حيث يقوم الرجال الأذكياء بتدريب واختبار برامجهم باستخدام الذكاء الاصطناعي والقيام بجميع أنواع البحوث. ولكن الآن لا يهمنا ذلك ، فنحن مهتمون بتنسيق كتابة الشفرة هناك: تسمى الملفات المنفذة هناك "أجهزة الكمبيوتر المحمولة" (من الإنجليزية - جهاز كمبيوتر محمول). في هذا التنسيق ، يمكن كتابة التعليمات البرمجية وتنفيذها على شكل أجزاء (تسمى قطعة من الشفرة في colab "خلية رمز") مباشرة في المتصفح.

لنجرب:

  1. نذهب إلى Google Colab ونقوم بتسجيل الدخول باستخدام حساب Google الخاص بك
  2. سيتم الترحيب بنا من خلال الصفحة الرئيسية مع المساعدة حول كيفية استخدام Colab ، وسنقوم بإنشاء أول كمبيوتر محمول من خلال النقر فوق File> New Python 3 notebook في الزاوية العلوية اليسرى

    في بضع ثوانٍ ، يجب أن نرى شيئًا مشابهًا لهذا:

  3. تذكر اختصارات لوحة المفاتيح التالية:
    Ctrl + Enter (Cmd + Enter لـ MacOS) - قم بتشغيل خلية الرمز الحالية
    ALT + Enter (Option + Enter for MacOS) - قم بتشغيل خلية الرمز الحالية ، وقم بإنشاء وانتقل إلى خلية الرمز الجديدة

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

رمز بايثون

print('Hello, PUBG!') 

فريق وحدة التحكم

 !mkdir hello_pubg !cd hello_pubg 

دعونا نحاول تنفيذ نوع من الخوارزميات البسيطة ، على سبيل المثال ، العثور على أكبر مقسوم مشترك يتكون من رقمين:

  1. في خلية الشفرة ندخل:

     a = 10 b = 8 

  2. اضغط على Alt + Enter (الخيار + Enter لنظام MacOS) واكتب في خلية التعليمات البرمجية الجديدة:

     while a != 0 and b != 0: if a > b: a %= b else: b %= a gcd = a + b 

  3. اضغط على Alt + Enter مرة أخرى (الخيار + Enter لنظام التشغيل MacOS) واكتب في خلية التعليمات البرمجية الجديدة:

     print(gcd) 

    واضغط على Ctrl + Enter (Cmd + Enter لـ MacOS). نحصل على الجواب: 2



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

نحن لا نغلق الكمبيوتر المحمول ، دعنا نذهب أبعد من ذلك.

PUBG API


الآن ما هو API في كلمات بسيطة. في كل مرة نذهب فيها إلى أحد المواقع ، يرد خادم هذا الموقع برمز HTML ، أي من خلال الانتقال إلى google.com ، على سبيل المثال ، يرسل خادم Google HTML إلى متصفحنا ، والذي تتم معالجته بواسطة المتصفح نفسه ، ويظهر لنا المتصفح صورة جميلة صورة ، بعد معالجة جميع الأنماط ، إلخ. لكن هذا لا يحدث دائمًا ، على سبيل المثال ، باتباع هذا الرابط ، سنرى شيئًا مشابهًا لإخراج القاموس في بيثون باستخدام أمر print (). هكذا هو. هذا هو قاموس المعلومات الطقس الحالية التي حصلنا عليها من openweathermap . ولن يتعامل الشخص أبدًا مع مثل هذه الاستجابات من الخادم بمفرده. لقد زودنا مطورو هذا الموقع بهذه الروابط حتى نتمكن من استخدامها في برامجنا. بشكل عام ، إذا احتجنا لإنشاء كتلة الطقس على موقعنا أو تطبيقنا ، فسنذهب إلى openweathermap (أو أي تناظرية أخرى توفر واجهة برمجة التطبيقات) ، ونفتح وثائقها ونستخدمها. واجهة برمجة التطبيقات في فك تشفير الأصوات وترجمتها إلى اللغة الروسية مثل "واجهة برمجة التطبيقات" ، أي مجموعة من طلبات النموذج site.com/request ، والتي تعرض قاموسًا بالمعلومات التي نحتاجها. وتسمى هذه القواميس JSON. يوجد أيضًا تنسيق XML ، لكننا لن نقوم بتحليله في هذه المقالة.

في البداية ، كتبت أننا سنستخدم API الرسمي من مطوري اللعبة PUBG. لنبدأ. هنا هو المورد الذي سنقوم من خلاله بالتحقق من التكوين الذي تم الحصول عليه ، وفتحه في علامة تبويب جديدة وإدخال لقب أي لاعب في البحث عن اللاعبين ، على سبيل المثال ، "Twitch_todol". إحصائيات هذا اللاعب تفتح:



نفتح آخر مبارياته (الأولى في القائمة) ونرى كل المعلومات التي نحتاجها:



للحصول على معلومات حول هذه المطابقة من واجهة برمجة تطبيقات PUBG:

  1. نذهب إلى الصفحة الرسمية لمطور PUBG .
  2. قم بتسجيل الدخول أو التسجيل على الصفحة من خلال النقر على زر "الحصول على واجهة برمجة التطبيقات الرئيسية الخاصة بك". ولا يهم إذا لعبنا هذه اللعبة أم لا. نحتاج فقط إلى الحصول على الرمز المميز لدينا من هذا الموقع ، أي مفتاح api.

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



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

     eyJ0eXAiOiJKV1QiLWFeCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5ZjIwYTJkMC0xMzYwLTAxMzgtZTFhYS03ZDVjOWM4YTdjZWUiLCJpc3MiOiJnYW1lbG9ja2VyIiwiaWF04IjoxNTc4MzkwNDQwLCJwdWIiOiJibHVlaG9sZSIsInRpdGxlIjoicHViZyIsImFwcCI6ImxlYW5jb3JlZ2ctZ21hIn0.fwFwEeEw3OghE8sACAHbpKWlJFBVo6F_DbB7dbanybLIIToJc4 

  4. انسخ الرمز المميز الخاص بك وافتح علامة التبويب الخاصة بك مع colab. أنت لم تغلقه ، أليس كذلك؟
  5. في خلية الرمز الأولى ، ندخل هذا الرمز:

     import requests url = "endpoint-url" API_KEY = '< >' header = { "Authorization": "Bearer " + API_KEY, "Accept": "application/vnd.api+json" } 

    والركض. في هذا الجزء من الشفرة ، أنشأنا قاموسًا (رأسًا) يحتوي على المعلمات الأساسية للوصول إلى واجهة برمجة تطبيقات PUBG. سنرسل هذا القاموس إلى الخادم في كل مرة نريد فيها الحصول على شيء منه. بشرط ، أخبر الخادم "مرحبًا ، اسمي Petya" - حيث Petya هو الرمز المميز لدينا - "أريد تلقي معلومات منك بتنسيق JSON!" حصلت على الشفرة التي أعطيتها للتو من وثائق واجهة برمجة تطبيقات PUBG في هذه الصفحة .
  6. الآن نحن بحاجة إلى معرفة ما نحتاج إليه بالضبط من الخادم. في حالتنا ، نريد أن نحصل عليه آخر لعبة من لاعب Twitch_todol. للحصول على معلومات حول اللاعب ، نقوم بتقديم طلب على
    api.pubg.com/shards/steam/players؟filter [playerNames] = Twitch_todol

    هذا هو (في الخلية رمز جديد):

     player_name = 'Twitch_todol' r = requests.get('https://api.pubg.com/shards/steam/players?filter[playerNames]=' + player_name, headers=header) player = r.json() 

    حيث نستخدم في السطر الثاني الوظيفة من مكتبة الطلبات ، حيث المعلمة الأولى هي ما نحتاجه من الخادم ، والمعلمة الثانية هي قاموس الرأس لدينا. بمعنى آخر ، نقول للخادم "مرحبًا ، أنا بيتيا! أريد الحصول على معلومات منك حول مشغل Twitch_todol بتنسيق JSON. "

    وفي السطر الثالث ، نترجم الاستجابة من الخادم إلى نفس JSON. لماذا نفعل هذا؟ الحقيقة هي أن الخادم لا يُرجع رد json إلينا ، لكن json تُرجمت إلى سلسلة. ومع طريقة .json () ، نقوم بتحويل هذه السلسلة إلى قاموس يفهمه بيثون.

    دعونا نتأكد من ذلك عن طريق الكتابة في خلية التعليمات البرمجية الجديدة:

     type(player) 

    الجواب تملى . أي أننا نعرف الآن أن متغير اللاعب يحتوي على قاموس يمكن فهمه لدى Python بمعلومات عن اللاعب.
  7. ما الذي يحتويه هذا القاموس بالضبط؟ دعونا نرى عن طريق العمل

     player.keys() 

    نرى الجواب:

    dict_keys (['البيانات' ، 'الروابط' ، 'التعريف'])

    هذه هي مفاتيح قاموسنا. ما يحتوي كل منهم مكتوب على هذه الصفحة .

    للتأكد من حصولنا على اللاعب الذي نحتاجه ، سنكتب ما يلي:

     player['data'][0]['attributes'] 

    نرى هنا المعلومات الأساسية عن اللاعب: عندما يسجل ، اسم الشهرة الخاص به ، على أي منصة يلعب ، وهكذا.
  8. نحتاج إلى الحصول على معرف آخر تطابق له ، والذي يمكننا التحقق منه من خلال موقع pubg.op.gg ، وهو مفتوح بالفعل في إحدى علامات تبويب المتصفح الخاصة بنا. لهذا نكتب:

     player['data'][0]['relationships']['matches']['data'][0]['id'] 

    حصلنا على شيء مشابه لـ "ca2c453b-649a-4556-b768-66b9e01aae63" (قد يكون مختلفًا عنك ، لأن اللاعب في وقت قراءة هذا المقال قد يلعب بالفعل عدة مباريات). استخدم ما حصلت عليه بنفسك. أعطيك مثالاً حتى لا تتشوش.

    لذلك ، نحن نعرف معرف التطابق ، فلنحصل الآن على معلومات حول هذه المطابقة ، ولهذا نقوم بإنشاء متغير match_id ، الذي نساوي مع المعرف الذي تلقيناه. ونقدم الطلب على عنوان مختلف قليلاً ، ولكن وفقًا للمخطط المعتاد ، هذا مثل:

     match_id = player['data'][0]['relationships']['matches']['data'][0]['id'] # id  r = requests.get('https://api.pubg.com/shards/steam/matches/' + match_id, headers=header) match = r.json() 

  9. يحتوي متغير المطابقة ، وهو قاموس ، على جميع المعلومات حول هذه المطابقة. للبدء ، نحصل على أداء جميع اللاعبين في هذه المباراة:

     match_players = [item for item in match['included'] if item['type'] == 'participant'] match_players 

    في هذه الحالة ، نقوم بملء قائمة اللاعبين (match_players) ، من خلال الانتقال إلى تطابق القاموس ['included'] ('included' هو مفتاح قاموس القاموس الذي يحتوي على مؤشرات جميع اللاعبين في المباراة) ، مع التحقق في وقت واحد من قيمة "type" للمفتاح. لماذا نتحقق من ذلك
    المطابقة ["مضمنة"] تحتوي على معلومات اللاعب؟ والحقيقة هي أن هذا ليس صحيحًا تمامًا ، فالمباراة ["المضمنة"] تحتوي أيضًا على معلومات حول الفرق التي يلعبها اللاعبون (أي ، العنصر ["النوع"] يمكن أن يساوي "القائمة"). وهذا يعني أن المطابقة ["مضمنة"] تبدو كالتالي:

    [لاعب ، فريق ، فريق ، لاعب ، لاعب ، لاعب ، فريق ، ...]

    ليس من الواضح تمامًا لماذا قرر المطورون القيام بذلك ، لكن هذا لا يزعجنا بأي شكل من الأشكال.

    لذلك ، حصلنا على أداء اللاعبين ، لكننا لسنا مهتمين بشكل خاص بكيفية لعب لاعبين آخرين في هذه المباراة ، سننظر في أداء لاعبنا Twitch_todol في هذه المباراة. للقيام بذلك ، نقوم بتنفيذ:

     my_player_stats = [item for item in match_players if item['attributes']['stats']['name'] == player_name][0] my_player_stats 


مقارنة الإحصاءات الناتجة:



مع إحصاءات على pubg.op.gg



نرى أن كل شيء يتزامن. افرحوا! بالمناسبة ، أثناء كتابة هذا المقال ، تمكن بطلنا بالفعل من لعب عدة مباريات ، لذا قد لا تتزامن بعض لقطات الشاشة التي قدمتها أعلاه.

اكتمال


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

وأريد أيضًا أن أشكر هابر والمؤلف ( ArhMax ) لمساعدتي في كتابة الكود لأول مرة منذ 8 سنوات.

Source: https://habr.com/ru/post/ar483964/


All Articles