كود للبحث عن “المحتوى الرائج” (Trending Topics) في مجالك آلياً
كود للبحث عن “المحتوى الرائج” (Trending Topics) في مجالك آلياً
البحث اليدوي عن الموضوعات الرائجة يستهلك وقتاً كبيراً، وغالباً يعطي نتائج متأخرة بعد أن تبدأ المنافسة بالتصاعد. لهذا السبب أصبحت أتمتة اكتشاف Trending Topics خطوة عملية لأي موقع يريد صناعة محتوى أسرع، أدق، وأكثر ارتباطاً باهتمام الجمهور الحالي.
في هذا المقال سنبني سكربت احترافي بلغة Python يجمع أفكاراً رائجة من أكثر من مصدر، ثم ينظفها، ويصنفها، ويعطيك قائمة قابلة للاستخدام التحريري أو التحليل السيوي. إذا كنت أنهيت سابقاً تهيئة بيئة العمل: تثبيت Python والمكتبات الأساسية وقرأت مفهوم الـ API: كيف نطلب البيانات من Google وOpenAI فستجد أن تنفيذ هذا المشروع يصبح مباشراً جداً.
لماذا تحتاج نظاماً آلياً لاكتشاف الترندات؟
الترند ليس مجرد كلمة مفتاحية ذات حجم بحث مرتفع، بل هو إشارة زمنية تعبّر عن تغيّر مفاجئ أو متسارع في اهتمام المستخدمين. الفرق هنا مهم: بعض الكلمات ثابتة طوال العام، بينما المحتوى الرائج يكشف لك متى يجب أن تنشر، وليس فقط عمّ تكتب.
من الناحية العملية، يفيد هذا النظام في:
- التقاط فرص محتوى مبكرة قبل ازدحام المنافسين.
- ربط خطة التحرير بما يحدث الآن في السوق أو المجال.
- تحسين سرعة الاستجابة للأحداث الموسمية والمنتجات الجديدة.
- تغذية فرق التحرير والسوشيال ميديا بقائمة جاهزة يومياً.
وهذا يتكامل بشكل ممتاز مع ما شرحناه في ربط Google Search Console API لاستخراج آلاف الكلمات المفتاحية، لأن بيانات البحث التاريخية من موقعك تصبح أكثر قوة عند دمجها مع إشارات الرواج الحالية.
فكرة الأداة: دمج أكثر من مصدر بدل الاعتماد على مصدر واحد
الخطأ الشائع هو الاعتماد على مصدر منفرد مثل Google Trends فقط. عملياً، الرواج الحقيقي يظهر بصورة أفضل عندما تدمج:
- مصدر زمني مثل
Google Trends. - مصدر اقتراحات بحث مثل
Autocomplete. - مصدر تحليلي أو تصنيفي عبر نموذج ذكاء اصطناعي.
بهذه الطريقة لا تكتفي بمعرفة أن مصطلحاً ما يصعد، بل تفهم إن كان مرتبطاً فعلاً بمجالك أم مجرد ضجيج عام. وهنا تظهر أهمية كيفية كتابة “Prompt” برمجي للحصول على نتائج ثابتة (JSON) عند استخدام نماذج الذكاء الاصطناعي لتصنيف النتائج.
المكتبات المطلوبة وهيكلة المشروع
سنستخدم مكتبات خفيفة ومناسبة للأتمتة اليومية:
pytrendsللوصول إلى بياناتGoogle Trends.requestsلطلب البيانات من الويب.pandasلتنظيم النتائج وتحليلها، وهو امتداد طبيعي لما تناولناه في استخدام مكتبة Pandas لتحليل بيانات الـ SEO الضخمة.openaiأو أي مزود مشابه لتصنيف الأفكار.
ولا تنسَ تطبيق ممارسات الأمان وعدم وضع المفاتيح داخل الكود مباشرة، كما شرحنا في الحماية والأمان: كيف تخفي مفاتيحك السرية في الكود؟.
السكربت الكامل لاكتشاف الموضوعات الرائجة
السكربت التالي يجمع الكلمات من Google Trends واقتراحات البحث، ثم ينظفها، ويزيل التكرار، ويحفظها في ملف CSV لاستخدامه لاحقاً داخل لوحة تحريرك أو نظامك التحليلي.
import os
import time
import requests
import pandas as pd
from pytrends.request import TrendReq
NICHE_KEYWORDS = [
"seo automation",
"content marketing",
"ai writing",
"technical seo"
]
LANG = "en-US"
GEO = "US"
SUGGEST_URL = "https://suggestqueries.google.com/complete/search"
def get_google_suggestions(keyword):
params = {
"client": "firefox",
"q": keyword,
"hl": "en"
}
try:
response = requests.get(SUGGEST_URL, params=params, timeout=20)
response.raise_for_status()
data = response.json()
suggestions = data[1] if len(data) > 1 else []
return suggestions
except Exception as e:
print(f"Suggestion error for {keyword}: {e}")
return []
def get_trending_queries(keyword, geo="US", timeframe="now 7-d"):
try:
pytrends = TrendReq(hl="en-US", tz=0)
pytrends.build_payload([keyword], cat=0, timeframe=timeframe, geo=geo, gprop="")
related = pytrends.related_queries()
rising_data = related.get(keyword, {}).get("rising")
top_data = related.get(keyword, {}).get("top")
rising_queries = []
top_queries = []
if rising_data is not None and "query" in rising_data.columns:
rising_queries = rising_data["query"].dropna().tolist()
if top_data is not None and "query" in top_data.columns:
top_queries = top_data["query"].dropna().tolist()
return rising_queries, top_queries
except Exception as e:
print(f"Trend error for {keyword}: {e}")
return [], []
def normalize_text(text):
return " ".join(str(text).strip().lower().split())
def build_trending_dataset(seed_keywords):
rows = []
for keyword in seed_keywords:
suggestions = get_google_suggestions(keyword)
rising, top = get_trending_queries(keyword, geo=GEO)
for item in suggestions:
rows.append({
"seed_keyword": keyword,
"topic": normalize_text(item),
"source": "google_suggest",
"priority": 2
})
for item in rising:
rows.append({
"seed_keyword": keyword,
"topic": normalize_text(item),
"source": "google_trends_rising",
"priority": 5
})
for item in top:
rows.append({
"seed_keyword": keyword,
"topic": normalize_text(item),
"source": "google_trends_top",
"priority": 3
})
time.sleep(2)
df = pd.DataFrame(rows)
if df.empty:
return df
df = df[df["topic"].str.len() > 3]
df = df.drop_duplicates(subset=["topic", "source"])
score_df = df.groupby("topic", as_index=False).agg({
"priority": "sum",
"seed_keyword": lambda x: ", ".join(sorted(set(x))),
"source": lambda x: ", ".join(sorted(set(x)))
})
score_df = score_df.sort_values(by="priority", ascending=False)
return score_df
if __name__ == "__main__":
df = build_trending_dataset(NICHE_KEYWORDS)
output_file = "trending_topics_output.csv"
df.to_csv(output_file, index=False, encoding="utf-8-sig")
print(f"Saved {len(df)} trending topics to {output_file}")
كيف يعمل هذا الكود فعلياً؟
1) إدخال بذور المجال
القائمة الموجودة داخل NICHE_KEYWORDS هي نقطة الانطلاق. كلما كانت هذه البذور أدق، أصبحت النتائج أكثر تخصصاً. لا تضع مصطلحات عامة جداً إلا إذا كنت تدير موقعاً إخبارياً واسع النطاق.
2) جمع الإشارات من مصادر مختلفة
الدالة get_google_suggestions() تلتقط اقتراحات الناس أثناء البحث، بينما get_trending_queries() تلتقط العلاقات الصاعدة والأكثر شيوعاً.
هذه المقاربة قريبة من المنهج المستخدم في أتمتة سحب بيانات المنافسين (Web Scraping) بطريقة قانونية، حيث تكون قيمة الأداة الحقيقية في دمج الإشارات، لا في المصدر الوحيد.
3) إعطاء وزن لكل نوع من البيانات
لاحظ أننا منحنا نتائج google_trends_rising وزناً أعلى، لأن الارتفاع السريع أهم غالباً من الوجود الثابت. هذا لا يعني أن الأوزان نهائية؛ يمكنك تعديلها حسب طبيعة المجال.
4) التنظيف وإزالة التكرار
الخطوة التي تقوم بها الدالة normalize_text() ضرورية حتى لا تتكرر نفس الفكرة بصيغ مختلفة. بعد ذلك يدمج pandas النتائج في جدول واحد مع ترتيب تنازلي حسب الأولوية.
إضافة طبقة ذكاء اصطناعي لتصفية النتائج
بعد تجميع قائمة أولية، تأتي المرحلة الأهم: هل هذه المواضيع مناسبة فعلاً لموقعك؟ هنا يمكن استخدام نموذج لغوي لتصنيف النتائج إلى فئات مثل: مناسب للنشر، يحتاج متابعة، غير مرتبط بالمجال.
اطلب من النموذج دائماً إخراجاً بصيغة
JSONثابتة تتضمن:topicوrelevance_scoreوcontent_angleوsearch_intentلتسهيل المعالجة البرمجية لاحقاً.
وإذا أردت تعميق التحليل، فربط ذلك بمقال كود لتصنيف الكلمات المفتاحية حسب نية البحث (Search Intent) سيمنحك طبقة تحريرية ممتازة تساعدك على تحديد ما إذا كان الترند معلوماتياً أم تجارياً أم مقارناتياً.
أفضل الممارسات التشغيلية للأداة
لكي تتحول الأداة من تجربة إلى نظام إنتاجي فعلي، اتبع هذه القواعد:
- شغّل السكربت مرة أو مرتين يومياً فقط لتجنب التكرار المفرط.
- استخدم سجل حفظ مثل
history.csvلمقارنة تغيّر الترند عبر الأيام. - أضف تنبيهاً تلقائياً عند تجاوز موضوع ما درجة معينة، ويمكنك توصيله مع بناء أداة تنبيه (Alert System) على Telegram عند حدوث مشكلة في الموقع مع تعديل بسيط ليصبح تنبيه فرص محتوى.
- جدول التشغيل باستخدام جدولة المهام (Cron Jobs) لتعمل الأدوات أثناء نومك.
- عالج التأخيرات وحدود الاستخدام بالرجوع إلى التعامل مع مشكلات الـ Rate Limit وتجاوز حدود الـ API.
كيف تستفيد من النتائج في استراتيجية المحتوى؟
القيمة الحقيقية ليست في استخراج قائمة كلمات فقط، بل في تحويلها إلى قرارات نشر. يمكنك مثلاً:
- إرسال النتائج إلى محرر المحتوى لاختيار أفضل زاوية مقال.
- تغذية نظام داخلي يقترح عناوين، كما في بناء أداة توليد عناوين جذابة بناءً على الكلمات المفتاحية.
- إنشاء لوحة متابعة مرئية لاحقاً عبر بناء “Dashboard” تفاعلي لبيانات الموقع باستخدام Google Looker Studio.
- تحويل الموضوع الرائج إلى سلسلة أصول محتوى: مقال، منشور اجتماعي، وصف ميتا، وأسئلة شائعة.
هذا النوع من الأتمتة ينسجم تماماً مع فلسفة مدخل إلى عالم أتمتة الـ SEO: لماذا الآن؟، لأن الهدف ليس استبدال التفكير التحريري، بل تزويده بإشارات أسرع وأكثر دقة.
الخلاصة
بناء كود آلي لاكتشاف Trending Topics يمنحك أفضلية زمنية حقيقية في صناعة المحتوى. بدلاً من انتظار التقارير التقليدية أو النسخ من المنافسين، يصبح لديك نظام يرصد الحركة، ويمنحها وزناً، ثم يحولها إلى فرص قابلة للنشر والتحليل.
ابدأ بالنسخة البسيطة في هذا المقال، ثم طوّرها تدريجياً عبر إضافة التصنيف بالذكاء الاصطناعي، التخزين التاريخي، والتنبيهات التلقائية. وعندما تربط هذه المخرجات مع أنظمة النشر والتحرير، ستنتقل من مجرد متابعة الترند إلى امتلاك محرك أفكار محتوى يعمل باستمرار وبشكل قابل للتوسع.