انتقل إلى المحتوى

كيفية استخدام واجهة برمجة تطبيقات خرائط Google في لغة بايثون: دليل سريع

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

في هذا الدليل الشامل، ستتعرف على كيفية البدء باستخدام واجهة برمجة التطبيقات لخرائط Google باستخدام لغة Python. سنغطي:

  • الحصول على مفتاح API
  • عناوين الترميز الجغرافي وجلب الإحداثيات
  • حساب المسافات وزمن السفر
  • التغلب على حدود واجهة برمجة التطبيقات (API) من خلال تجريف الويب
  • استخراج بيانات خرائط جوجل باستخدام بايثون

وأكثر من ذلك بكثير! دعونا نتعمق.

مقدمة إلى واجهة برمجة التطبيقات لخرائط Google

Google Maps API عبارة عن خدمة ويب توفر الوصول إلى النظام الأساسي القوي لخرائط Google من خلال واجهة JSON/XML. فهو يسمح لك بتضمين خرائط Google على صفحات الويب وتخصيص أنماط الخرائط والعلامات والمضلعات والتراكبات.

لكن واجهة برمجة التطبيقات تتيح أيضًا بعض الإمكانات الجغرافية المكانية المفيدة بشكل لا يصدق مثل:

  • الترميز الجغرافي – تحويل عناوين الشوارع إلى إحداثيات جغرافية
  • عكس الترميز الجغرافي – تحويل الإحداثيات الجغرافية إلى العنوان الأقرب
  • مصفوفة المسافة – حساب مسافة السفر والوقت بين الأماكن
  • طريقة الإستخدام - الحصول على الاتجاهات والطرق من نقطة إلى نقطة
  • وجهات - البحث عن والحصول على تفاصيل الأماكن والشركات المحلية
  • خرائط ثابتة – توليد صور خريطة ثابتة

مع أكثر من 15 واجهة برمجة تطبيقات وأكثر من 100 قدرة، فإن النطاق لا يصدق. كما أن أسعار واجهة برمجة التطبيقات لخرائط Google ميسورة التكلفة للغاية - فالعديد من الإمكانات مجانية حتى حدود الاستخدام.

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

لنبدأ بالإعداد.

الحصول على مفتاح API لخرائط Google

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

  1. انتقل إلى جوجل كلاود كونسول وقم بتسجيل الدخول باستخدام حساب Google الخاص بك.

  2. انقر فوق قائمة التنقل وحدد واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

  3. في صفحة بيانات الاعتماد، انقر فوق إنشاء بيانات الاعتماد، ثم حدد مفتاح API.

  4. انسخ مفتاح API الجديد هذا واحفظه في مكان آمن. سوف نستخدمه قريبا!

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

  • API التشفير الجغرافي
  • مصفوفة المسافة API

في صفحة بيانات الاعتماد، انقر فوق تمكين واجهات برمجة التطبيقات والخدمات في الجزء العلوي. ابحث عن واجهات برمجة التطبيقات هذه وقم بتمكينها لمشروعك.

نحن الآن جاهزون لبدء استخدام واجهات برمجة التطبيقات في Python.

عناوين الترميز الجغرافي في بيثون

أحد أكثر التطبيقات المفيدة لـ Google Maps API هو تحويل عناوين الشوارع إلى إحداثيات جغرافية (خطوط الطول والعرض). هذه العملية تسمى الترميز الجغرافي.

تتيح لك واجهة برمجة التطبيقات Geocoding API تمرير أي عنوان واستعادة إحداثيات موقعه. إليك وظيفة بايثون للقيام بذلك:

import requests

def geocode_address(api_key, address):

  url = ‘https://maps.googleapis.com/maps/api/geocode/json‘

  params = {
    ‘address‘: address,
    ‘key‘: api_key
  }

  response = requests.get(url, params=params)

  if response.status_code == 200:
    data = response.json()

    if data[‘status‘] == ‘OK‘:
      location = data[‘results‘][0][‘geometry‘][‘location‘]
      lat = location[‘lat‘]
      lng = location[‘lng‘]
      return lat, lng

    else:
      print(f"Error: {data[‘error_message‘]}")
      return None, None

  else:
    print(‘Request failed.‘)
    return None, None

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

دعونا نختبر ذلك:

api_key = ‘YOUR_API_KEY‘ 

address = ‘1600 Amphitheatre Parkway Mountain View, CA 94043‘

lat, lng = geocode_address(api_key, address)

print(lat, lng)

يجب أن يؤدي هذا إلى طباعة الإحداثيات 37.4224764، -122.0842499.

لدينا الآن طريقة بسيطة لتحويل العناوين إلى إحداثيات جغرافية في لغة بايثون باستخدام واجهة برمجة تطبيقات الترميز الجغرافي لخرائط Google!

بعض حالات الاستخدام للترميز الجغرافي:

  • رسم المواقع على الخريطة من قائمة العناوين
  • تحليل التوزيع الجغرافي للعملاء
  • قم بوضع علامة على سجلات قاعدة البيانات باستخدام خطوط الطول/العرض لعمليات البحث عن قرب

ولكن ماذا لو أردنا أن نسير في الاتجاه الآخر – تحويل الإحداثيات الجغرافية إلى عناوين؟

عكس الترميز الجغرافي في بايثون

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

تتعامل واجهة برمجة التطبيقات Geocoding API مع هذا الأمر latlng المعلمة بدلاً من address:

import requests

def reverse_geocode(api_key, lat, lng):

  url = ‘https://maps.googleapis.com/maps/api/geocode/json‘

  params = {
    ‘latlng‘: f‘{lat},{lng}‘,
    ‘key‘: api_key  
  }

  response = requests.get(url, params=params)

  if response.status_code == 200:
    data = response.json()

    if data[‘status‘] == ‘OK‘:
      return data[‘results‘][0][‘formatted_address‘]

    else:
      print(f"Error: {data[‘error_message‘]}")
      return None

  else:
    print(‘Request failed.‘)  
    return None

دعونا اختبار ذلك:

lat = 37.4224764
lng = -122.0842499

address = reverse_geocode(api_key, lat, lng)

print(address) 

يطبع هذا "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA".

يعد الترميز الجغرافي العكسي مفيدًا لتخطيط العناوين على الخريطة من بيانات خطوط الطول/العرض.

بعد ذلك، دعونا نرى كيفية حساب المسافات بين الأماكن باستخدام Google Maps API.

حساب المسافة وزمن السفر في بايثون

توفر واجهة برمجة تطبيقات مصفوفة المسافة مسافة السفر والوقت لمصفوفة الأصول والوجهات.

يمكنك تمرير مجموعة من الأصول والوجهات، وسوف تقوم بإرجاع المسافة والمدة بين كل زوج من الأصل والوجهة.

وإليكم عينة من الطلب:

import requests 

origins = ‘Vancouver+BC|Seattle‘
destinations = ‘San+Francisco|Victoria+BC‘

url = ‘https://maps.googleapis.com/maps/api/distancematrix/json‘

params = {
  ‘origins‘: origins,
  ‘destinations‘: destinations,
  ‘key‘: api_key
}

response = requests.get(url, params=params)
data = response.json()

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

rows تحتوي على النتائج لكل نقطة الأصل، و elements لديه النتائج لكل وجهة.

بعض استخدامات Distance Matrix API:

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

يوضح هذا جزءًا صغيرًا فقط مما يمكنك فعله باستخدام Google Maps API. دعونا ننظر في التغلب على بعض القيود بعد ذلك.

التغلب على حدود واجهة برمجة تطبيقات خرائط Google باستخدام تجريف الويب

توفر Google Maps API قيمة ممتازة مع حدود مجانية سخية. لكنها لا تزال حدود المعدل والاستخدام.

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

وبديل ذلك هو كشط بيانات خرائط جوجل مباشرةً من المتصفحات التي تستخدم مكتبات Python مثل Selenium وBeautiful Soup وما إلى ذلك.

يؤدي هذا إلى تجنب حدود واجهة برمجة التطبيقات (API) تمامًا نظرًا لأنك تستخرج البيانات من الواجهة الأمامية بدلاً من استخدام واجهات برمجة التطبيقات الخلفية.

يمنحك استخراج خرائط Google المرونة اللازمة لاستخراج أي بيانات تريدها:

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

دعونا نلقي نظرة سريعة على استخراج بعض بيانات خرائط Google باستخدام لغة Python.

تجريف خرائط Google باستخدام Python وBeautifulSoup

لتوضيح كيفية استخراج خرائط Google من الويب، سنستخرج بعض أسماء المطاعم ومراجعاتها.

أولاً سنبحث عن "المطاعم في فانكوفر" على خرائط Google. ثم قم بمسح اسم المكان وتقييمه ونماذج التقييمات في الصفحة الأولى.

البرنامج النصي الخاص بنا سوف:

  1. استخدم السيلينيوم لتحميل الصفحة
  2. قم بالتبديل إلى BeautifulSoup لتحليل HTML
  3. ابحث عن عناصر المكان باستخدام محددات CSS
  4. استخراج الاسم والتقييم والمراجعات

إليك الكود الكامل:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Chrome()

url = ‘https://www.google.com/maps/search/restaurants+in+vancouver‘
driver.get(url)
time.sleep(3)

soup = BeautifulSoup(driver.page_source, ‘html.parser‘)

places = soup.select(‘div.section-result-content‘)

data = []
for place in places:

  name = place.select_one(‘h3.section-result-title‘).text

  rating = place.select_one(‘span.section-result-rating‘).text

  reviews = [review.text for review in place.select(‘span.section-review-text‘)]

  data.append({
    ‘name‘: name,
    ‘rating‘: rating, 
    ‘sample_reviews‘: reviews[:2]
  })

driver.quit()

print(data)

سيؤدي هذا إلى استخراج بيانات مثل:

[
  {
    ‘name‘: ‘The Flying Pig‘,
    ‘rating‘: ‘4.6‘,
    ‘sample_reviews‘: [‘Amazing food!‘, ‘Staff are so friendly.‘]
  },
  {  
    ‘name‘: ‘The Eatery‘,
    ‘rating‘: ‘4.5‘,
    ‘sample_reviews‘: [‘Delicious!‘, ‘Great prices.‘]
  }
]

الميزة الرئيسية – لا حدود لواجهة برمجة التطبيقات (API)! يمكنك استخراج أي بيانات على نطاق واسع.

بعض النصائح لتجريد الويب بشكل مسؤول:

  • أضف تأخيرات عشوائية لتجنب التحميل الزائد على الخوادم
  • تعريف كمتصفح عادي، وليس بوت
  • احترام قواعد ملف robots.txt
  • استخدم تدوير الوكيل لتجنب حظر IP

اطلع على دليلنا التفصيلي للحصول على المزيد من النصائح حول استخراج خرائط Google!

الوجبات السريعة الرئيسية

تتيح واجهة برمجة تطبيقات خرائط Google إمكانات جغرافية مكانية قوية من خلال واجهة بسيطة:

  • عناوين الترميز الجغرافي وإحداثيات الترميز الجغرافي العكسي
  • حساب المسافات وأوقات السفر
  • بحث وتفصيل الأماكن والاتجاهات وأكثر من ذلك

يتكامل بسهولة مع بايثون باستخدام وحدة الطلبات. لكن حدود الاستخدام يمكن أن تشكل تحديات لأعباء العمل الأكبر.

يوفر تجريف الويب بديلاً قابلاً للتطوير لاستخراج البيانات الجغرافية المكانية من خرائط Google بلا حدود.

تعمل مكتبات Python مثل Selenium وBeautifulSoup على تسهيل استخراج الأماكن والتعليقات والاتجاهات وإحصائيات حركة المرور والتجوّل الافتراضي والمزيد.

نأمل أن يمنحك هذا أساسًا متينًا لإطلاق الإمكانات الكاملة لبيانات خرائط Google باستخدام واجهة برمجة التطبيقات أو الاستخراج - فالاحتمالات لا حصر لها!

الانضمام إلى محادثة

لن يتم نشر عنوان بريدك الإلكتروني. الحقول المشار إليها إلزامية *