سؤال

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

هل لدى أي شخص اقتراحات للتحسينات على هذا الإصدار القديم؟

public static string SuggestTitle(string url, int timeout)
{
    WebResponse response = null;
    string line = string.Empty;

    try
    {
        WebRequest request = WebRequest.Create(url);
        request.Timeout = timeout;

        response = request.GetResponse();
        Stream streamReceive = response.GetResponseStream();
        Encoding encoding = System.Text.Encoding.GetEncoding("utf-8");
        StreamReader streamRead = new System.IO.StreamReader(streamReceive, encoding);

        while(streamRead.EndOfStream != true)
        {
            line = streamRead.ReadLine();
            if (line.Contains("<title>"))
            {
                line = line.Split(new char[] { '<', '>' })[2];
                break;
            }
        }
    }
    catch (Exception) { }
    finally
    {
        if (response != null)
        {
            response.Close();
        }
    }

    return line;
}

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

هل كانت مفيدة؟

المحلول

وهناك طريقة أبسط للحصول على المحتوى:

WebClient x = new WebClient();
string source = x.DownloadString("http://www.singingeels.com/");

وأبسط طريقة أكثر موثوقية للحصول على عنوان:

string title = Regex.Match(source, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>",
    RegexOptions.IgnoreCase).Groups["Title"].Value;

نصائح أخرى

من أجل تحقيق ذلك، ستحتاج إلى القيام ببعض الأشياء.

  • اجعل تطبيقك مترابطة، بحيث يمكنك معالجة طلبات متعددة في نفس الوقت وزيادة عدد طلبات HTTP التي يتم إجراؤها.
  • أثناء طلب عدم المزامنة، قم بتنزيل كمية البيانات التي تريد سحبها فقط، وربما يمكنك إجراء تحليل للبيانات عند عودتها للبحث عنها
  • ربما تريد استخدام regex لسحب اسم العنوان

لقد قمت بذلك من قبل باستخدام روبوتات تحسين محركات البحث (SEO) وتمكنت من التعامل مع ما يقرب من 10000 طلب في وقت واحد.تحتاج فقط إلى التأكد من أن كل طلب ويب يمكن أن يكون موجودًا ذاتيًا في سلسلة رسائل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top