Google Maps API — ابزاری قدرتمند برای ژئوکدینگ آدرسها، جستجوی سازمانها و جمعآوری دادههای کسبوکارهای محلی است. اما وقتی که شروع به کار با آن در مقیاس صنعتی میکنید، مسدودیتهای کلید، تجاوز از محدودیتها و درخواستهای مشکوک ظاهر میشوند. در این مقاله بررسی میکنیم که چرا این اتفاق میافتد و چگونه پروکسی را تنظیم کنیم تا کلیدها نسوزند و دادهها به طور پایدار جمعآوری شوند.
چرا Google Maps API کلیدها و درخواستها را مسدود میکند
زمانی که شما صدها یا هزاران درخواست به Google Maps API از یک آدرس IP یا یک کلید ارسال میکنید، Google این را به عنوان فعالیت غیرعادی درک میکند. سیستم حفاظت به طور همزمان بر اساس چندین معیار کار میکند: فراوانی درخواستها، جغرافیای IP، الگوهای رفتاری و تاریخچه کلید.
در اینجا دلایل اصلی وجود دارد که چرا کلیدها محدودیت یا مسدودیت کامل دریافت میکنند:
- تجاوز از محدودیت روزانه درخواستها — هر کلید یک سهمیه دارد و در صورت تمام شدن آن، API خطای
OVER_QUERY_LIMITرا برمیگرداند. - فراوانی بالای درخواستها از یک IP — حتی در چارچوب محدودیت، Google درخواستهای متوالی سریع را به عنوان خودکار شناسایی میکند.
- یک IP برای چندین کلید — اگر شما کلیدها را چرخش میدهید اما IP را چرخش نمیدهید، Google آنها را در یک جلسه مرتبط میکند.
- عدم تطابق جغرافیایی کلید و IP — کلید در یک کشور ثبت شده است، در حالی که درخواستها از کشور دیگری میآیند که باعث ایجاد شک و تردید میشود.
- عدم وجود تأخیر بین درخواستها — الگوهای ماشینی بدون وقفه به سرعت شناسایی میشوند.
- استفاده از IPهای دیتاسنتر بدون ماسکگذاری — Google به خوبی دامنههای IP ارائهدهندگان ابری (AWS, GCP, Azure) را میشناسد و سطح بررسی را برای آنها افزایش میدهد.
مهم است که درک کنید: Google Maps API یک محصول پولی است و Google آن را نه تنها از سوءاستفادهها، بلکه از دور زدن صورتحساب نیز محافظت میکند. به همین دلیل سیستم شناسایی در اینجا به طور قابل توجهی سختتر از، به عنوان مثال، جستجوی وب معمولی است. مسدودیت کلید به معنای از دست دادن دسترسی به دادهها و نیاز به ایجاد یک حساب کاربری جدید در Google Cloud است — که خود کار پرهزینهای است.
مهم است بدانید
Google نه تنها آدرس IP را ردیابی میکند، بلکه User-Agent، هدرهای درخواست، زمان بین درخواستها و الگوی نقاط پایانی استفاده شده را نیز ردیابی میکند. پروکسی یک عنصر ضروری، اما نه تنها عنصر حفاظت از کلیدها است.
چه کسانی و چرا از Google Maps API در کسبوکار استفاده میکنند
قبل از اینکه به جزئیات فنی بپردازیم، بیایید به سناریوهای واقعی استفاده بپردازیم. این به انتخاب نوع مناسب پروکسی و استراتژی چرخش برای وظیفه خاص کمک میکند.
ژئوکدینگ آدرسها در حالت انبوه
شرکتهای لجستیکی، تجمیعکنندگان املاک و بازارهای تحویل به طور منظم هزاران آدرس متنی را به مختصات تبدیل میکنند. به عنوان مثال، هنگام بارگذاری پایگاه دادهای از 50,000 آدرس مشتریان برای ایجاد مسیرها. Geocoding API این کار را خودکار میکند، اما 50,000 درخواست از یک کلید در مدت زمان کوتاه — راه مستقیم به مسدودیت است.
جمعآوری دادههای کسبوکارهای محلی (Places API)
آژانسهای بازاریابی، تولیدکنندگان لید و پایگاههای داده شرکتها از Places API برای جمعآوری اطلاعات درباره سازمانها استفاده میکنند: نامها، تلفنها، وبسایتها، امتیازها، ساعات کاری، نظرات. وظیفه معمولی — جمعآوری تمام رستورانها، دندانپزشکیها یا خدمات اتومبیل در چندین شهر برای تماس یا ارسال ایمیل بعدی.
نظارت بر رقبا و تحلیل جغرافیایی
خردهفروشان افتتاح نقاط جدید رقبا را در مناطق خود ردیابی میکنند. شبکههای فرانچایز مکانهای بالقوه برای فروشگاههای جدید را تحلیل میکنند. آژانسهای تبلیغاتی جغرافیایی را بررسی میکنند — اینکه نتایج در یک شهر یا منطقه خاص چگونه به نظر میرسد.
غنیسازی دادههای CRM
محصولات SaaS و خدمات B2B به طور خودکار کارتهای شرکتها را در CRM غنی میکنند: مختصات را اضافه میکنند، صحت آدرسها را بررسی میکنند و دادهها را از Google Business Profile میکشند. این نیاز به درخواستهای منظم پسزمینه به API به صورت خودکار دارد.
در تمام این سناریوها یک چیز مشترک است: فراوانی بالای درخواستها که بدون پروکسی به طور حتم منجر به مسدودیتها میشود. رویکرد به حل این مشکل بسته به وظیفه متفاوت است.
کدام پروکسیها برای کار با Google Maps API مناسب هستند
انتخاب نوع پروکسی به طور مستقیم بر ثبات کار و احتمال مسدودیت تأثیر میگذارد. بیایید سه گزینه اصلی را در ارتباط با وظایف Google Maps API بررسی کنیم.
| نوع پروکسی | قابلیت اطمینان | سرعت | قیمت | بهترین برای |
|---|---|---|---|---|
| پروکسیهای مسکونی | ★★★★★ | ★★★☆☆ | بالا | جمعآوری از Places API، ژئوکدینگ در مناطق حساس |
| پروکسیهای موبایل | ★★★★★ | ★★★★☆ | بالا | قابلیت اطمینان حداکثری، وظایف بلندمدت |
| پروکسیهای دیتاسنتر | ★★★☆☆ | ★★★★★ | پایین | ژئوکدینگ انبوه با حساسیت پایین |
پروکسیهای مسکونی — انتخاب بهینه برای اکثر وظایف
پروکسیهای مسکونی از آدرسهای IP کاربران واقعی اینترنت استفاده میکنند. برای Google، آنها به عنوان افراد عادی که نقشهها را در مرورگر باز میکنند، به نظر میرسند. این آنها را به امنترین گزینه برای کار با Places API و ژئوکدینگ با فراوانی بالای درخواستها تبدیل میکند. مجموعه بزرگ IP اجازه میدهد که برای هر درخواست یا هر چند درخواست چرخش انجام شود — Google نمیتواند آنها را در یک جلسه واحد مرتبط کند.
پروکسیهای موبایل — زمانی که به حداکثر قابلیت اطمینان نیاز دارید
IPهای موبایل از اپراتورهای تلفن همراه یک مورد خاص هستند. یک IP موبایل واقعاً توسط چندین دستگاه تحت NAT استفاده میشود، بنابراین Google به ندرت این آدرسها را حتی در فعالیت بالا مسدود میکند. اگر وظیفه شما به شدت مهم است و نمیتوانید وقفهای را تحمل کنید — پروکسیهای موبایل حداکثر ثبات را ارائه میدهند. منفی — قیمت بالاتر و مجموعه آدرسهای کمتر.
پروکسیهای دیتاسنتر — فقط برای وظایف غیرحساس
پروکسیهای سروری سریع و ارزان هستند، اما Google Maps API به آنها با شک و تردید بیشتری نگاه میکند. اگر از آنها برای ژئوکدینگ حجم بالای آدرسها با فراوانی متوسط و چرخش خوب استفاده کنید — ممکن است کار کنند. اما برای جمعآوری از Places API یا کار در مناطق با محدودیتهای سخت، خطر مسدودیت کلید به طور قابل توجهی بالاتر است.
تنظیم پروکسی برای ژئوکدینگ: راهنمای گام به گام
بیایید تنظیم عملی را با مثال Geocoding API — رایجترین سناریو بررسی کنیم. وظیفه: تبدیل یک لیست از 10,000 آدرس به مختصات بدون مسدودیت کلید.
گام 1. زیرساخت را آماده کنید
ابتدا با تعداد کلیدها و پروکسیها تصمیم بگیرید. قاعده اصلی: یک کلید — یک مجموعه IP. از یک مجموعه پروکسی یکسان برای کلیدهای مختلف استفاده نکنید — Google میتواند آنها را بر اساس الگوهای رفتاری مرتبط کند. برای وظیفه 10,000 آدرس، حداقل 2-3 کلید Google Cloud و مجموعهای از 50+ IP مسکونی توصیه میشود.
گام 2. چرخش IP را تنظیم کنید
استراتژی بهینه برای ژئوکدینگ — تغییر IP هر 10-20 درخواست، نه برای هر درخواست. تغییر بیش از حد مکرر IP نیز میتواند مشکوک به نظر برسد. اکثر ارائهدهندگان پروکسی مسکونی یک نقطه پایانی چرخشی ارائه میدهند — یک آدرس واحد که به طور خودکار IP را در فواصل مشخص تغییر میدهد. از آن استفاده کنید، نه از تغییر دستی.
Python — مثال پایهای از درخواست از طریق پروکسی
import requests
GOOGLE_API_KEY = "کلید_شما"
PROXY_HOST = "rotating.proxyprovider.com"
PROXY_PORT = "8080"
PROXY_USER = "نام_کاربری"
PROXY_PASS = "گذرواژه"
proxies = {
"http": f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}",
"https": f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
}
def geocode_address(address):
url = "https://maps.googleapis.com/maps/api/geocode/json"
params = {
"address": address,
"key": GOOGLE_API_KEY,
"language": "fa"
}
response = requests.get(url, params=params, proxies=proxies, timeout=10)
return response.json()
# مثال استفاده
result = geocode_address("مسکو، خیابان تووراسکایا، 1")
print(result["results"][0]["geometry"]["location"])
گام 3. تأخیرهایی بین درخواستها اضافه کنید
هرگز درخواستها را در حالت "هر چه سریعتر" ارسال نکنید. تأخیر تصادفی از 0.5 تا 2 ثانیه بین درخواستها اضافه کنید. تصادفی بودن مهم است — فاصله ثابت (به عنوان مثال، دقیقاً 1 ثانیه) نیز به عنوان الگوی ماشینی به نظر میرسد. در Python این با time.sleep(random.uniform(0.5, 2.0)) پیادهسازی میشود.
گام 4. هدرهای درخواست را به درستی تنظیم کنید
درخواستهای API به Google Maps باید شامل User-Agent واقعی باشند. اگرچه به طور فنی API به User-Agent مرورگر نیاز ندارد، عدم وجود آن یا User-Agent استاندارد Python احتمال شناسایی را افزایش میدهد. از User-Agent استفاده کنید که شبیه یک مرورگر واقعی باشد و آن را در یک جلسه بیش از حد تغییر ندهید.
گام 5. خطاها و تلاشهای مجدد را مدیریت کنید
پیادهسازی مدیریت صحیح وضعیتهای پاسخ. در صورت دریافت OVER_QUERY_LIMIT — 60 ثانیه توقف کنید و IP را تغییر دهید. در صورت REQUEST_DENIED — کلید مسدود شده است، به کلید پشتیبان سوئیچ کنید. در صورت ZERO_RESULTS — مشکل با آدرس است، نه با پروکسی.
جمعآوری دادههای کسبوکارها از طریق Places API با پروکسی
Places API — نقطه پایانی به مراتب حساستری نسبت به Geocoding API است. Google میفهمد که هدف اصلی درخواستهای انبوه به آن — جمعآوری دادههای تجاری است، بنابراین حفاظت در اینجا سختتر است. بیایید رویکرد صحیح برای کار با آن را بررسی کنیم.
استراتژی جمعآوری دادهها از طریق Places API
Places API از دو روش اصلی کار میکند: Nearby Search (جستجو بر اساس مختصات و شعاع) و Text Search (جستجو بر اساس درخواست متنی). برای پوشش یک منطقه بزرگ از روش شبکه استفاده میشود — تقسیم منطقه به سلولها با همپوشانی، و عبور متوالی از هر سلول با درخواست.
ویژگی کلیدی: Places API حداکثر 60 نتیجه را در یک جستجو برمیگرداند (3 صفحه 20 تایی). اگر در منطقه بیش از 60 شیء وجود داشته باشد — باید شعاع جستجو را کاهش داده و چگالی شبکه را افزایش دهید. این به طور خودکار تعداد درخواستها را افزایش میدهد، که چرخش پروکسی را به شدت حیاتی میکند.
Python — درخواست به Places API از طریق پروکسی با صفحهبندی
import requests
import time
import random
def search_places_nearby(lat, lng, radius, place_type, api_key, proxies):
results = []
url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json"
params = {
"location": f"{lat},{lng}",
"radius": radius,
"type": place_type,
"key": api_key,
"language": "fa"
}
while True:
response = requests.get(url, params=params, proxies=proxies, timeout=15)
data = response.json()
if data.get("status") == "OVER_QUERY_LIMIT":
print("محدودیت درخواستها — توقف 60 ثانیه")
time.sleep(60)
continue
results.extend(data.get("results", []))
# توکن صفحه بعدی
next_token = data.get("next_page_token")
if not next_token:
break
# توقف اجباری قبل از صفحه بعدی (نیاز Google)
time.sleep(random.uniform(2.0, 3.5))
params = {"pagetoken": next_token, "key": api_key}
return results
دریافت دادههای دقیق از طریق جزئیات مکان
پس از دریافت لیست place_id از طریق Nearby Search یا Text Search، باید یک درخواست جداگانه Place Details برای هر مکان انجام دهید تا تلفن، وبسایت، ساعات کاری و نظرات را دریافت کنید. این تعداد درخواستها را دو برابر میکند. در اینجا چرخش IP به ویژه مهم است — هر درخواست Place Details بهتر است با یک آدرس جدید از مجموعه انجام شود.
فقط فیلدهای مورد نیاز را از طریق پارامتر fields درخواست کنید. این هزینه درخواست را کاهش میدهد و حجم دادههای منتقل شده را کاهش میدهد، که الگوی درخواستها را از نظر حجم ترافیک کمتر مشکوک میکند.
چرخش کلیدها و IP: چگونه کار پایدار را سازماندهی کنیم
کار حرفهای با Google Maps API نیاز به یک رویکرد سیستماتیک برای مدیریت کلیدها و IP دارد. اینجا چگونه زیرساخت به درستی ساخته شده است.
مجموعه کلیدهای Google Cloud
چندین پروژه در Google Cloud Console ایجاد کنید — حداقل 3-5 برای وظایف جدی. هر پروژه کلید API خود را دریافت میکند. بار را به طور یکنواخت بین کلیدها توزیع کنید: اگر شما 10,000 درخواست در روز دارید و 5 کلید، هر کلید 2,000 درخواست انجام میدهد — به طور قابل توجهی زیر آستانه مشکوک باقی میماند.
قاعده مهم: هر کلید را به یک دامنه IP جداگانه از مجموعه پروکسی خود متصل کنید. کلید شماره 1 فقط از IPهای دامنه A کار میکند، کلید شماره 2 — از دامنه B. مخلوط کردن کلیدها و IP — یکی از بزرگترین اشتباهات است که منجر به مسدودیتهای انبوه میشود.
برنامهریزی درخواستها
همه درخواستها را در شب یا در زمانهای غیرکاری راهاندازی نکنید — این یک الگوی غیرمعمول برای "کاربر عادی" است. وظایف را در طول روز کاری توزیع کنید و فعالیت طبیعی را شبیهسازی کنید. اگر وظیفه اجازه میدهد که چند روزه انجام شود — بهتر است آن را در 3-5 روز با بار متوسط گسترش دهید تا اینکه همه چیز را در یک شب انجام دهید.
نظارت بر وضعیت کلیدها
پیادهسازی نظارت خودکار بر وضعیتهای پاسخ API. در صورت مشاهده اولین نشانههای محدودیت (افزایش خطاهای OVER_QUERY_LIMIT) بلافاصله فراوانی درخواستها برای این کلید را کاهش دهید و به آن "استراحت" چند ساعته دهید. منتظر مسدودیت کامل نباشید — درمان بسیار دشوارتر از پیشگیری است.
توصیهای برای معماری
برای وظایف جدی در جمعآوری از Places API، توصیه میکنیم از صف وظایف (Redis + Celery یا مشابه) با کنترل فراوانی درخواستها در سطح کارگران استفاده کنید. این امکان را میدهد که دقیقاً RPS (درخواستها در ثانیه) را برای هر کلید کنترل کنید و به طور خودکار به کلید پشتیبان در صورت بروز مشکلات سوئیچ کنید.
محدودیتهای Google Maps API و چگونه با آنها کار کنیم
درک محدودیتهای Google Maps API برای برنامهریزی زیرساخت به شدت مهم است. محدودیتها به دو نوع تقسیم میشوند: سهمیهای (چند درخواست در روز/ماه) و محدودیتهای نرخ (چند درخواست در ثانیه). پروکسیها در استفاده صحیح از هر دو نوع کمک میکنند.
| API | سهمیه رایگان | محدودیت نرخ | قیمت بالای محدودیت |
|---|---|---|---|
| Geocoding API | $200/ماه (~40,000 درخواست) | 50 QPS | $5 برای 1,000 |
| Places API (Nearby Search) | $200/ماه (~6,600 درخواست) | 100 QPS | $32 برای 1,000 |
| Places API (جزئیات مکان) | $200/ماه (~3,400 درخواست) | 100 QPS | $17–$32 برای 1,000 |
| Distance Matrix API | $200/ماه (~40,000 عنصر) | 1,000 QPM | $5 برای 1,000 |
توجه داشته باشید: محدودیتها به کلید مربوط میشوند، نه به IP. به همین دلیل چرخش کلیدها در کنار چرخش IP — تنها راه برای مقیاسگذاری کار بدون افزایش هزینهها برای API است. چندین کلید با سهمیه رایگان $200 هر کدام اجازه میدهد تا حجم کلی درخواستهای رایگان به طور قابل توجهی افزایش یابد.
چگونه پروکسیها در محدودیتهای نرخ کمک میکنند
محدودیت نرخ 50 QPS برای Geocoding API به این معنی است: حداکثر 50 درخواست در ثانیه از یک کلید. پروکسیها در اینجا نمیتوانند این محدودیت را دور بزنند — این به کلید مربوط میشود. اما آنها کمک میکنند تا بار را بین کلیدها توزیع کنیم تا هر کلید در منطقه ایمن باقی بماند (توصیه میشود از 70-80% حداکثر محدودیت نرخ تجاوز نکنید).
اشتباهات رایج و چگونه از آنها جلوگیری کنیم
در سالهای کار با Google Maps API، لیستی از اشتباهات رایج که منجر به از دست دادن کلیدها میشود، شکل گرفته است. هر یک را بررسی میکنیم و راهحلهای مشخصی ارائه میدهیم.
اشتباه 1: استفاده از یک IP برای چندین کلید
این رایجترین اشتباه است. اگر شما کلیدها را چرخش میدهید، اما همه درخواستها از یک پروکسی یا مجموعه کوچک IP میآید — Google میبیند که از یک آدرس کلیدهای مختلف استفاده میشود و آنها را در یک جلسه مرتبط میکند. در صورت مسدودیت یک کلید، همه کلیدهای دیگر در خطر هستند.
راهحل: مجموعههای IP را به شدت بر اساس کلیدها جدا کنید. هر کلید فقط از دامنه آدرسهای اختصاصی خود کار میکند.
اشتباه 2: نادیده گرفتن توقف اجباری بین صفحات Places API
Places API حداقل 2 ثانیه توقف قبل از درخواست صفحه بعدی با pagetoken را میطلبد. اگر صفحه بعدی بلافاصله درخواست شود — API نتیجه خالی یا خطا برمیگرداند. بسیاری از توسعهدهندگان این نیاز را نادیده میگیرند و دادههای نادرستی دریافت میکنند.
راهحل: همیشه 2-3 ثانیه توقف قبل از درخواست صفحه بعدی اضافه کنید. این یک نیاز مستند شده از Google است، نه یک توصیه اختیاری.
اشتباه 3: کلیدهای غیرمحافظتشده در کد
کلیدهای API Google Maps که به مخازن عمومی در GitHub وارد میشوند، به طور خودکار توسط رباتها اسکن شده و توسط مهاجمان استفاده میشوند. Google به طور خودکار نشتهای کلید را شناسایی کرده و اعلانهایی ارسال میکند، اما ممکن است آسیب قبل از آن وارد شود.
راهحل: کلیدها را در متغیرهای محیطی یا سیستمهای مدیریت اسرار (Vault، AWS Secrets Manager) ذخیره کنید. هرگز کلیدها را در کد منبع هاردکد نکنید. محدودیتهای IP را در Google Cloud Console تنظیم کنید — کلید باید فقط از آدرسهای پروکسی شما کار کند.
اشتباه 4: درخواست همه فیلدها در جزئیات مکان
به طور پیشفرض جزئیات مکان همه فیلدهای موجود را برمیگرداند، از جمله فیلدهای پرهزینه (جو، نظرات). این هزینه هر درخواست را 2-4 برابر افزایش میدهد. علاوه بر این، حجم بالای پاسخ پردازش را کند میکند.
راهحل: همیشه از پارامتر fields استفاده کنید و فقط دادههای مورد نیاز را درخواست کنید. به عنوان مثال: fields=name,formatted_phone_number,website,opening_hours,rating.
اشتباه 5: استفاده از پروکسیهای رایگان یا عمومی
پروکسیهای رایگان از لیستهای عمومی — راهی مطمئن برای از دست دادن کلید است. این IPها قبلاً توسط هزاران کاربر دیگر استفاده میشوند، که بسیاری از آنها دقیقاً همان کاری را انجام میدهند که Google از آن محافظت میکند. شهرت این IPها به شدت پایین است و Google آنها را به طور پیشگیرانه مسدود میکند.
راهحل: فقط از پروکسیهای پولی از ارائهدهندگان معتبر با IPهای تمیز و ضمانت انحصاری استفاده کنید.
چکلیست قبل از راهاندازی
- ✅ هر کلید به یک مجموعه IP جداگانه متصل است
- ✅ کلیدها در Google Cloud Console بر اساس IP محدود شدهاند
- ✅ بین درخواستها تأخیرهای تصادفی وجود دارد (0.5–2 ثانیه)
- ✅ مدیریت همه وضعیتهای خطاهای API پیادهسازی شده است
- ✅ کلیدها در متغیرهای محیطی ذخیره میشوند، نه در کد
- ✅ نظارت بر سهمیهها در Google Cloud Console تنظیم شده است
- ✅ فقط فیلدهای مورد نیاز در درخواستها استفاده میشوند
نتیجهگیری
کار با Google Maps API در مقیاس صنعتی همیشه تعادلی بین سرعت جمعآوری دادهها و امنیت کلیدها است. پروکسیها مشکل مسدودیتها بر اساس IP را حل میکنند، اما جایگزین معماری صحیح نمیشوند: چرخش کلیدها، کنترل فراوانی درخواستها، مدیریت صحیح خطاها و تقسیم مجموعههای IP بر اساس وظایف.
نکات اصلی مقاله: پروکسیهای مسکونی با چرخش برای اکثر وظایف با Places API و ژئوکدینگ مناسب هستند؛ هر کلید باید از مجموعه آدرسهای ایزوله خود کار کند؛ تأخیرها بین درخواستها الزامی هستند؛ نظارت بر وضعیت کلیدها باید خودکار باشد.
اگر شما قصد دارید به طور منظم با Google Maps API کار کنید — آدرسها را ژئوکد کنید، دادههای کسبوکارها را جمعآوری کنید یا رقبا را نظارت کنید — توصیه میکنیم به پروکسیهای مسکونی توجه کنید. آنها سطح بالایی از اعتماد را از طرف Google فراهم میکنند و خطر مسدودیت کلیدها را در صورت تنظیم صحیح چرخش IP به حداقل میرسانند. برای وظایفی که نیاز به حداکثر قابلیت اطمینان بدون وقفه دارند، باید به پروکسیهای موبایل فکر کنید — IPهای آنها حتی در فعالیت بالا به ندرت مسدود میشوند.