منذ بعض الوقت، قمت بإنشاء موقع ويب للترويج للمدونة: مجموعة المدونات الصينية ( http://www.bokequn.cn ) بها وظيفة يمكنها قراءة معلومات مقالة المدونة بانتظام في قاعدة البيانات، ثم عرضها للمستخدمين للاستعلام ومعالجة TAG نظرًا لأنه مضيف افتراضي، فكرت فقط في استخدام المؤقت من جانب الخادم لحلها.
في ذلك الوقت، كنت في عجلة من أمري ولم يكن لدي الوقت للتحسين، وكان مستواي محدودًا للغاية. إذا كنت تعتقد أن هناك خطأ ما أو أن هناك طريقة أفضل لحلها، فلا تتردد في تنويري.
أعتقد أن هناك نقطتين أساسيتين في العملية برمتها:
كيفية التعامل مع الموقت
وحدات قراءة RSS لتسهيل الاتصال بها
1. بخصوص المؤقت، بالطبع هو مكتوب في Global.asax. قم أولاً بإنشاء المتغير:
System.Timers.Timer t=new System.Timers.Timer(1000*Convert.ToInt16(System.Configuration.ConfigurationSettings.AppSettings["do_time" " ]));
من بينها، يتم استخدام do_time في web.config للوصول إلى عدد مرات تنفيذه
ثم معالجته في Application_Start:
t.AutoReset=true;
t.Enabled=true;
if(common.func.get_key("can_do")=="1")// يتم الوصول إليه أيضًا في web.config سواء كان سيتم إجراء معالجة منتظمة، حيث common.func.get_key هي وظيفة مخصصة للحصول على الإعدادات
t.Elapsed +=new System.Timers.ElapsedEventHandler(fun);
رمز الوظيفة المرحة:
متعة باطلة خاصة (مرسل الكائن، System.Timers.ElapsedEventArgs e)
{
يحاول
{
System.DateTime dt=System.DateTime.Now;
common.func.write_log("ابدأ في قراءة XML عن بعد");//اكتب السجل
rss2sql rl=new rss2sql();
rl.readall();
System.DateTime dt2=System.DateTime.Now;
common.func.write_log("تم استيراد ملف XML إلى قاعدة البيانات بنجاح"+Convert.ToString(dt2-dt));//اكتب وقت التنفيذ هذا في السجل،
}
قبض (استثناء على سبيل المثال)
{
common.func.write_log("خطأ في قراءة ملف xml عن بعد:"+ex.Message);//اكتب السجل
}
}
اكتمل الكود الموجود في Global.asax
2. الخطوة التالية هي الحصول على قائمة rss من قاعدة البيانات في فئة rss2sql، وقراءة ملف rss بناءً على آخر وقت قراءة rss ووقت تعديل ملف rss وكتابته إلى قاعدة البيانات، نظرًا لاستخدام عدد كبير جدًا من الفئات والأساليب المخصصة، لذلك لا يتم إدراج جميع الرموز في النهاية، ويمكن للأصدقاء المهتمين تنزيلها، ومن بينها الوظائف الأكثر أهمية:
/**/// <summary>
/// اقرأ محتوى RSS للرابط المحدد لقاعدة البيانات
/// </الملخص>
/// <param name="id">معرف المدونة المقابلة</param>
/// <param name="url">عنوان RSS</param>
/// <param name="dt">وقت القراءة الأخير</param>
read_from_url الفراغ العام (معرف السلسلة، سلسلة عنوان url، System.DateTime dt)
{
op_db.db_class db1=new op_db.db_class();
يحاول
{
rssFeed Feed = new rssFeed(url,dt);// إنشاء مثيل لفئة قراءة RSS
Feed.read();//ابدأ القراءة
if(feed.Channel.Items.Count>0)// إذا كان عدد المقالات أكبر من 0، فابدأ بالقراءة في قاعدة البيانات
{
for(int i=0;i<feed.Channel.Items.Count;i++)
{
write_artical(id,feed.Channel.Items[i].title,feed.Channel.Items[i].link,feed.Channel.Items[i].description,feed.Channel.Items[i].pubDate);
}
db1.sql="تحديث مجموعة bokequn last_rss_date='"+feed.lastModified.ToString()+"' Where id="+id;
db1.executesql();
}
}
قبض (استثناء على سبيل المثال)
{
common.func.write_log(id+":url:"+url+"Error"+ex.Message+ex.Source+ex.StackTrace);
}
أخيراً
{
db1.db_ Close()
}
}
من بينها، rssFeed عبارة عن فئة كتبتها بنفسي لمعالجة RSS. بالنسبة لهذه الفئة، استخدمت rss.net مفتوح المصدر لفترة من الوقت من قبل، ومع ذلك، في العملية الفعلية، هناك عناوين RSS مختلفة، وحتى الكثير منها لا تفي بالمعايير، لذلك ستواجه الكثير من المشاكل، وبعد النظر إلى الكود المصدري، كان هناك الكثير من الأشياء التي أراد التعامل معها، وكانت كمية التعليمات البرمجية أيضًا كبيرة جدًا على المستوى، قدرت أنه لن يكون من الممكن تصحيحه في فترة من الوقت، لذلك قمت بإجراء عنصر تحكم بنفسي، وهذا ليس بالأمر الكبير، عناصر التحكم هي مجرد فئات قليلة أنا أتعامل فقط مع عنوان ومقدمة RSS والعنوان والمقدمة والوقت والرابط الخاص بالعنصر.
هناك عدد كبير جدًا من الرموز المنشورة. يمكن للأصدقاء المهتمين تنزيلها في النهاية.
الاستخدام بسيط للغاية. ما عليك سوى الرجوع إلى ملف dll المترجم واستخدامه على النحو التالي:
rssFeed Feed = new rssFeed(url,dt);//إنشاء ملف. مثيل فئة القراءة آر إس إس
Feed.read();//ابدأ القراءة
Feed.Channel.title
تغذية.قناة.وصف
Feed.Channel.Items.Count
Feed.Channel.Items[i].title
Feed.Channel.Items[i].description
Feed.Channel.Items[i].link
dt الموجود في
مُنشئFeed.Channel.Items[i].pubDate
آخر وقت للقراءة، لأنه سيتم الحصول على وقت تعديل ملف RSS في الفصل إذا كان أكبر من وقت القراءة الأخيرحسنًا ، أعتقد
أنه لا يزال هناك مشكلة في قراءة RSS إذا كانت هناك أحرف سداسية عشرية في بعض ملفات XML لا يمكن قراءتها والتي إذا كان أي شخص يعرف كيفية حلها، واسمحوا لي أن أعرف.
إنه أمر مربك بعض الشيء، ولكن آمل أن يكون مفيدًا للأصدقاء الذين يحتاجون إلى هذه الوظيفة.
التنزيلات ذات الصلة: http://guanvee.cnblogs.com/archive/2006/06/17/428329.html