كيف تتعلم هنا API في وقت قصير

بديل الصورة
اين انت
أنا هنا

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


خلال هذه الساعات الـ 48 ، كلفنا بما يلي:

قم بتطوير تطبيق جوال أولي يسمح للركاب بطلب توصيل الطعام من المطاعم الموجودة في المدن على طول مسار القطار.

كلمات


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


في هذه المقالة ، أود أن أشارك تمامًا تجربة استخدام واجهة برمجة تطبيقات HERE المكتسبة خلال 48 ساعة بلا نوم ، وبشكل أكثر دقة ، كمطور مبتكر لبيثون وأنظمة موزعة على الشبكة للتفاعل مع الأنظمة الأخرى على الشبكة. لا تتظاهر المقالة بأنها ترجمة جميع وثائق HERE API ، فهي تصف التطبيق العملي فقط في حل مشكلاتنا.


مقدمة


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


أظهر تحليل واجهات برمجة التطبيقات (APIs) العامة أن طلبات REST التالية هي الأكثر ملاءمة لحل المشكلة:



يبدأ استخدام واجهة برمجة التطبيقات عن طريق التسجيل في قسم المطورين في الموقع الرسمي لإنشاء واستلام مفاتيح APP و APP CODE. يسمح لك مفتاح API المجاني بتنفيذ ما يصل إلى 250 ألف طلب شهريًا. صدقوني ، هذا يغطي جميع احتياجات hackathon.


أظهرت إحصائيات استخدام HERE API من خلال تطبيقنا لمدة 48 ساعة الأرقام التالية:



ممارسة


يحتوي كل طلب على الحقول التالية:


deplocation = A #   arrlocation = B #   # ,      app_id = os.getenv('HERE_APP_ID') app_code = os.getenv('HERE_APP_CODE') 

العثور على وقت السفر باستخدام وسائل النقل العام


 url = f"https://transit.api.here.com/v3/route.json" query = { 'dep': deplocation, 'arr': arrlocation, 'time': datetime.now().strftime('%Y-%m-%dT%H:%M:%S'), # ,     'app_id': app_id, 'app_code': app_code, 'routing': 'tt' #    } response = requests.get(url, params=query) data = response.json() status = data["Res"] if "Message" in status: print(status["Message"]) exit(-1) if "Connections" in status: route_dut_time = iso8601toSec( status["Connections"]["Connection"][0]["duration"] ) 

أود أن أشير إلى أنه في هذا الطلب ، يتم إعطاء الوقت باستخدام ISO 8601. تم تنفيذ وظيفة تحويل مدة الوقت المستلمة إلى ثوان iso8601toSec.



العثور على وقت السفر باستخدام المركبات الشخصية


 url = f"https://route.api.here.com/routing/7.2/calculateroute.json" query = { 'waypoint0': deplocation, 'waypoint1': arrlocation, 'mode': 'fastest;car;traffic:enabled', #       'app_id': app_id, 'app_code': app_code, 'departure': 'now' #   } response = requests.get(url, params=query) data = response.json() route_dur_time = data['response']['route'][0]['summary']['trafficTime'] 

لا توجد مشاكل مع هذا الطلب بمرور الوقت ، حيث يتم إرجاعه في ثوانٍ.



العثور على وقت السفر باستخدام ساقيك (المشي)


 url = f"https://route.api.here.com/routing/7.2/calculateroute.json" query = { 'waypoint0': deplocation, 'waypoint1': arrlocation, 'mode': 'fastest;pedestrian', #   'app_id': app_id, 'app_code': app_code } response = requests.get(url, params=query) data = response.json() route_dur_time = data['response']['route'][0]['summary']['travelTime'] 

في هذا الطلب ، كما في المثال السابق ، لا توجد مشاكل مع الوقت ، فهي تُرجع في ثوانٍ.


النتائج


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

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


All Articles