Beberapa waktu yang lalu, saya membangun situs promosi blog: Chinese Blog Group ( http://www.bokequn.cn ). Di dalamnya terdapat fungsi yang secara teratur dapat membaca informasi artikel blog ke dalam database, dan kemudian menampilkannya kepada pengguna untuk menanyakan. Dan memproses TAG. Karena ini adalah host virtual, saya hanya berpikir untuk menggunakan pengatur waktu sisi server untuk menyelesaikannya.
Saat itu, saya sedang terburu-buru dan tidak punya waktu untuk mengoptimalkan, dan level saya sangat terbatas. Jika menurut Anda ada sesuatu yang salah atau ada cara yang lebih baik untuk menyelesaikannya, silakan beri pencerahan kepada saya.
Saya pikir ada dua poin penting dalam keseluruhan proses:
bagaimana menangani pengatur waktu
Modularisasikan pembacaan RSS agar lebih mudah melakukan panggilan
1. Mengenai timer tentunya ditulis dalam Global.asax. Pertama buat variabelnya:
System.Timers.Timer t=new System.Timers.Timer(1000*Convert.ToInt16(System.Configuration.ConfigurationSettings.AppSettings["do_time " ]));
Diantaranya, do_time digunakan di web.config untuk mengakses seberapa sering dijalankan,
dan kemudian diproses di Application_Start:
t.AutoReset=true;
t.Diaktifkan=benar;
if(common.func.get_key("can_do")=="1")//Ini juga diakses di web.config apakah akan melakukan pemrosesan reguler, di mana common.func.get_key adalah fungsi khusus untuk mendapatkan pengaturan
t.Elapsed +=System.Timers.ElapsedEventHandler(menyenangkan);
Kode fungsi menyenangkan:
private void fun (pengirim objek, System.Timers.ElapsedEventArgs e)
{
mencoba
{
System.DateTime dt=Sistem.DateTime.Sekarang;
common.func.write_log("Mulai membaca XML jarak jauh");//Tulis log
rss2sql rl=rss2sqlbaru();
rl.baca semua();
System.DateTime dt2=Sistem.DateTime.Sekarang;
common.func.write_log("File XML berhasil diimpor ke database"+Convert.ToString(dt2-dt));//Tulis waktu eksekusi ini ke log,
}
menangkap (Pengecualian ex)
{
common.func.write_log("Kesalahan membaca file xml jarak jauh:"+ex.Message);//Tulis log
}
}
Kode di Global.asax selesai
2. Langkah selanjutnya adalah mendapatkan daftar rss dari database di kelas rss2sql, membaca file rss berdasarkan waktu rss terakhir dibaca dan waktu modifikasi file rss dan menulisnya ke database, karena terlalu banyak kelas dan metode yang digunakan, sehingga semua kode tidak terdaftar. Teman yang tertarik dapat mendownloadnya di akhir. Diantaranya, fungsi yang lebih penting:
/**//// <ringkasan>
/// Baca konten RSS dari tautan tertentu ke database
/// </ringkasan>
/// <param name="id">Id blog yang bersangkutan</param>
/// <param name="url">alamat rss</param>
/// <param name="dt">Waktu baca terakhir</param>
public void read_from_url(string id,string url,Sistem.DateTime dt)
{
op_db.db_class db1=op_db.db_class() baru;
mencoba
{
rssFeed feed = new rssFeed(url,dt);//Buat instance kelas membaca rss
feed.read();//Mulai membaca
if(feed.Channel.Items.Count>0)//Jika jumlah artikel lebih besar dari 0, mulailah membaca database
{
for(int i=0;i<umpan.Saluran.Item.Jumlah;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="perbarui bokequn set last_rss_date='"+feed.lastModified.ToString()+"' di mana id="+id;
db1.executesql();
}
}
menangkap (Pengecualian ex)
{
common.func.write_log(id+":url:"+url+"Error"+ex.Message+ex.Source+ex.StackTrace);
}
Akhirnya
{
db1.db_close()
;
}
Diantaranya, rssFeed adalah kelas yang saya tulis sendiri untuk memproses RSS. Untuk kelas ini, saya sudah lama menggunakan rss.net open source. Namun, dalam prosesnya sebenarnya ada berbagai alamat RSS, bahkan banyak diantaranya tidak memenuhi standar, jadi Anda akan menemui banyak masalah, dan setelah melihat kode sumbernya, ada terlalu banyak hal yang ingin dia tangani, dan jumlah kodenya juga sangat besar levelnya, saya perkirakan tidak akan bisa diperbaiki dalam beberapa saat, jadi saya membuat kontrol sendiri, yang bukan masalah besar. Kontrolnya hanya beberapa kategori Saya hanya membahas judul dan pengenalan RSS, judul, pendahuluan, waktu, dan tautan item.
Terlalu banyak kode yang diposting. Teman-teman yang berminat bisa mendownloadnya di akhir.
Cara penggunaannya cukup sederhana. Cukup referensikan dll yang telah dikompilasi dan gunakan sebagai berikut:
rssFeed feed = new rssFeed(url,dt);//Buat an contoh kelas membaca rss
feed.read();//Mulai membaca
umpan.Saluran.judul
umpan.Saluran.deskripsi
feed.Channel.Items.Count
umpan.Saluran.Item[i].judul
feed.Channel.Item[i].deskripsi
umpan.Saluran.Item[i].link
Dt pada
konstruktorfeed.Channel.Items[i].pubDate
mewakili waktu pembacaan terakhir, karena waktu modifikasi file RSS akan diperoleh di kelas , jika tidak maka tidak akan diproses.Oke, saya yakin semua orang bisa memahaminya secara sekilas.
Masih ada masalah dalam pembacaan RSS, yaitu jika ada karakter heksadesimal di beberapa file xml (tentu saja, ini kecil kemungkinannya). tidak dapat dibaca. Yang Jika ada yang tahu cara mengatasinya, tolong beri tahu saya.
Memang agak membingungkan, namun semoga bermanfaat bagi teman-teman yang membutuhkan fungsi ini.
Unduhan terkait: http://guanvee.cnblogs.com/archive/2006/06/17/428329.html