البحث عبر الرابط

مرحباً،

أنا أكتب نصًا برمجيًا بلغة بايثون يحتاج إلى البحث في منتداي والتحقق مما إذا كان رابط خارجي موجودًا في محتوى مواضيع منتداي.
المشكلة هي: لقد تحققت يدويًا، ووجد بعض نتائج المشاركات التي تحتوي على الرابط وأخرى لا. على الرغم من أن الرابط موجود في المشاركة.
هل هذا شيء متوقع؟

ما الذي تبحث عنه؟ النيء أم المطبوخ؟

الخام. مثال:\n\nhttps://meta.discourse.org/t/search-by-link/339422\n\nويتم تضمينه في الموضوع الأصلي. أحيانًا يعمل مع نفس النطاق ولكن بنهاية مختلفة، وأحيانًا لا يعمل.

بدون معرفة كيفية البحث بالضبط ، من الصعب تخمين ما يحدث.

إذا طُلب مني تنفيذ هذه المهمة ، فمن المحتمل أن أقوم بإنشاء استعلام مستكشف البيانات يبحث عن أي مشاركات تحتوي على الرابط بتنسيق خام أو مطبوخ.

إعجابَين (2)

في الوقت الحالي، إنها مجرد عملية بحث عادية، من جانب الموقع، مثل هذا:

في منتدى الخاص بي، قمت للتو بإنشاء موضوع برابط واحد، وما زلت لا أستطيع العثور على الموضوع عن طريق البحث عن الرابط.

لم أختبر ذلك هنا، لأنني لست متأكدًا مما إذا كان يُسمح بنشر الروابط أم لا.

ما زلت أقوم باختباره. يبدو أنني لا أستطيع البحث عن رابط طويل بالكامل (بحد أقصى 101 حرفًا). لذلك أحتاج إلى تقصيره قليلاً إذا كان أطول. أخبرني إذا كان مسموحًا لي بنشر رابط نموذجي وما إذا كان هذا هو السلوك المتوقع

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

إعجابَين (2)

شكرا على ردك

أنا أستخدم هذا التشغيل الآلي، إنه يعمل بشكل جيد جدًا، طالما أن الرابط لا يتجاوز 100 حرف. إذا تجاوز ذلك، فإنه يعود على أنه غير موجود، على الرغم من وجود موضوع بهذا الرابط.

async def search_discourse_topic(session, link):
    headers = {"Api-Key": USER_API_KEY, "Api-Username": USER_ID}
    cleaned_link = clean_url(link)  # ينظف عنوان URL المقدم لضمان الاتساق
    try:
        log(f"البحث عن موضوع بالرابط: {cleaned_link}")  # تسجيل عند بدء البحث
        async with session.get(f"{DISCOURSE_API_URL}/search.json", headers=headers, params={"q": cleaned_link}) as response:
            search_results = await response.json()
            topics = search_results.get("topics", [])
            if not topics:
                log(f"لم يتم العثور على مواضيع للرابط: {cleaned_link}")  # تسجيل إذا لم يتم العثور على نتائج
            for topic in topics:
                if cleaned_link in topic.get("blurb", ""):  # التحقق مما إذا كان الرابط يظهر في وصف الموضوع
                    log(f"تم العثور على موضوع موجود بالرابط: {cleaned_link}")  # تسجيل إذا تم العثور على موضوع مطابق
                    return topic["id"]
    except Exception as e:
        log(f"خطأ في البحث عن موضوع بالرابط: {e}")
    return None
إعجاب واحد (1)