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

المشكلة: يتقادم الموجز أسرع من الجدول
قد تتضمن قائمة الحملة اسم الحساب ورابطه وتقديرًا لعدد المتابعين ومتطلبات الملف العام. ومن السهل أن تتباين هذه المعلومات: فقد يغيّر الحساب اسم المستخدم، أو يصبح الملف خاصًا، بينما تبقى الأرقام في الموجز كما هي. يسهل التحقق يدويًا من ملف واحد، لكن تكرار ذلك على قائمة حسابات قبل كل حملة يصعب ضبطه وإعادة إنتاجه.
الحل المفيد هو تحديد قواعد صريحة لكل صف، واسترجاع الحقول العامة المتاحة وقت التحقق، وتسجيل القيم الأصلية والفعلية جنبًا إلى جنب. عندئذٍ لا تعني «مطابق» سوى أن حقلًا بعينه يفي بقاعدة محددة؛ أما الحكم على ملاءمة الجمهور أو جودة المحتوى فيظل من اختصاص المتخصص.
البيانات المطلوب طلبها
يوضح دليل مسارات IG API مسار GET /v1/user/by/username ومعامل username الإلزامي. وفي الاستجابة التي تم التحقق منها، توجد بيانات الملف في الكائن ig، وتتضمن اسم المستخدم والاسم الكامل والنبذة ومؤشري الخصوصية والتحقق، وعدد المنشورات والمتابعين والحسابات التي يتابعها المستخدم. وتصف هذه الحقول لقطة الملف المتاحة.
تكفي هذه البيانات لإجراء تحقق أولي من اسم الحساب والخصوصية والحدود الرقمية. ويمكن عرض النبذة على المشغّل لمراجعتها، أو فحصها بقاعدة بسيطة، مثل التحقق من وجود مصطلح مطلوب. يعثر هذا المرشح النصي على تطابق للسلسلة، لكنه لا يقيّم المعنى ولا يؤكد الوفاء بالشروط التعاقدية.
كيفية دمج الطلب في Python
أولًا، خزّن مفتاح الترخيص في متغير البيئة JSONSCRAPER_INSTAGRAM_LICENSE_KEY. يستخدم المثال عنوان الأساس والمسار والمعامل username واسم المفتاح license_key التي جرى التحقق منها. يحتوي ملف CSV على الحقول username,min_followers,max_followers,require_public؛ ويقارن البرنامج النصي لكل حساب بالقواعد، ثم يعلّم الصفوف التي تستلزم المراجعة.
import csv
import os
import sys
import requests
BASE_URL = "https://ig.jsonscraper.com"
API_KEY = os.environ.get("JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
if not API_KEY:
raise SystemExit("Set JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
# brief.csv: username,min_followers,max_followers,require_public
with open("brief.csv", newline="", encoding="utf-8") as source:
brief = list(csv.DictReader(source))
results = []
for row in brief:
username = row.get("username", "").strip()
minimum_text = row.get("min_followers", "").strip()
if not username or not minimum_text:
results.append({
"requested_username": username,
"needs_review": True,
"error": "Missing username or min_followers",
})
continue
try:
response = requests.get(
f"{BASE_URL}/v1/user/by/username",
params={"username": username, "license_key": API_KEY},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok" or not isinstance(payload.get("ig"), dict):
raise ValueError("Unexpected API response")
profile = payload["ig"]
followers = profile.get("follower_count")
minimum = int(minimum_text)
maximum_text = row.get("max_followers", "").strip()
maximum = int(maximum_text) if maximum_text else None
public_required = row.get("require_public", "").strip().lower() == "true"
checks = {
"username_matches": (
isinstance(profile.get("username"), str)
and profile["username"].lower() == username.lstrip("@").lower()
),
"followers_in_range": (
isinstance(followers, int)
and followers >= minimum
and (maximum is None or followers
للتشغيل: python check_profiles.py. ثبّت مكتبة requests، واضبط متغير البيئة في بيئة التشغيل، وضع ملف brief.csv بجواره. لا تكتب المفتاح في الشيفرة المصدرية أو ملف CSV النهائي. يعالج البرنامج النصي القائمة بالتتابع، وهو ما يسهّل فحص مجموعات الحسابات الصغيرة وتصحيحها.
لماذا ينبغي إبقاء البيانات المفقودة ظاهرة
من المهم في قواعد التحقق التمييز بين القيمة الصفرية والحقل غير الموجود. في المثال، لا يُعدّ عدد المتابعين مستوفيًا للشرط إلا إذا وُجد حقل رقمي؛ وإذا غاب العداد، فلا يكون الشرط مؤكدًا وتُحال السجلات إلى المراجعة اليدوية. كذلك، يُعلَّم حد min_followers الفارغ بوصفه خطأ في بيانات الإدخال، ولا يتحول تلقائيًا إلى صفر.
ينبغي الاحتفاظ بفحص الاستجابة ضمن سير العمل. يتحقق البرنامج النصي أولًا من أن الحالة الخارجية تساوي ok، ثم يتأكد من وجود الكائن ig. وتُسجَّل أخطاء HTTP أو JSON غير المتوقعة أو القواعد غير الصحيحة في التقرير من دون نص الاستثناء الذي قد يكشف المفتاح في عنوان URL. وهكذا يستطيع المشغّل التمييز بين تعطل الطلب وعدم تطابق الملف، من دون إفشاء السر.
كيفية قراءة النتيجة وأتمتة التحقق
يحتوي الملف profile_check.csv على اسم المستخدم الأصلي، والاسم الذي أعادته الاستجابة، والحقول العامة المتاحة، ونتائج الشروط الفردية، والعلامة العامة needs_review. ويمكن للفريق تصفية الصفوف بحسب هذه العلامة، كما يمكن للمطوّر حفظ التقرير في مخزن أو تمريره إلى خطوة لاحقة من عملية ETL. ولجدولة التشغيل، استخدم أداة جدولة المهام واحفظ تاريخ التشغيل منفصلًا لمقارنة لقطات الحملات.

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