PageRank hay Ranking viết tắt là PR tạm dịch là thứ hạng trang. Khi nói đến PageRank người ta thường nghĩ đến ngay Google PageRank. Đó là một hệ thống xếp hạng trang Web của các máy tìm kiếm nhằm sắp xếp thứ tự ưu tiên đường dẫn URL trong trang kết quả tìm kiếm. Bài viết này tôi hướng dẫn bạn xây dựng tiện ích Kiểm Tra PG bằng asp.net, Csharp Google, PageRank, Google PageRank, asp.net, Csharp, Seo.
Đây là hàm trả về Google PageRank được viết với ngôn ngữ C#.Net với giá trị trả về là một số nguyên từ 0 đến 10. Theo Google một cách tóm lược thì PageRank chỉ được đánh giá từ hệ thống liên kết đường dẫn. Trang của bạn càng nhận nhiều liên kết trỏ đến thì mức độ quan trọng trang của bạn càng tăng. Bạn có thể sử dụng nó để tích hợp vào website của mình phục vụ cho việc kiểm tra PageRank, hoạc dùng nó như một tiện ích của website của bạn giúp tăng Rank cho website.
Ta sẽ viết một Class GooglePR và xây dựng MyPR để truyền vào URL website cần check Google PageRank. Ở đây tôi sẽ hướng dẫn xây dựng luôn một trang như demo, và Class GooglePR sẽ được viết luôn trong code behind của trang này.
Ở code aspx ta cần các Control sau để tạo Form seach, một RegularExpressionValidator để kiểm tra cấu trúc URL nhập vào và các control hiển thị kết quả như sau:
code html:
<asp:TextBox ID="txtPage" runat="server" Text="http://" Width="400px" /> <asp:Button ID="btnCheck" Text="Check Page Rank" runat="server" onclick="btnCheck_Click" /> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" Display="Dynamic" ValidationExpression="http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?" ControlToValidate="txtPage" ErrorMessage="Url không đúng cấu trúc" /> <asp:Panel ID="pnlKQ" runat="server"> <table width="100%" cellpadding="3" cellspacing="3" border="0"> <tr> <td width="150xp" align="left" class="style3"> <b>Website bạn check: </b> </td> <td width="630xp" align="left"> <asp:Label ID="lblURL" runat="server" style="color: #CC3300; font-weight: 700;" /> </td> </tr> <tr> <td width="150xp" align="left" class="style3"> <b>Google Page Rank: </b> </td> <td width="630xp" align="left"> <div style="width:200px; background-color:#ffffff; border:1px solid #dedede"> <asp:Label ID="lbl1" runat="server" /></div> <asp:Label ID="lblTyle" runat="server" /> </td> </tr> <tr> <td colspan="2"> <asp:Label ID="lblTB" runat="server" /> </td> </tr> </table> </asp:Panel>
Trong code csharp ta khai báo và thiết lập thuộc tính Visible cho Panel pnlKQ để chỉ khi sự kiện Submit của Button được gọi thì mới hiển thị Panel này:
GooglePR pr = new GooglePR();
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { pnlKQ.Visible = false; } } Sự kiện Click của button ta cần thực hiện tính giá trị rank và tạo ra một thẻ div với thuộc tính background-color và width tính được protected void btnCheck_Click(object sender, EventArgs e) { pnlKQ.Visible = true; int page=0; page = ((pr.MyPR(txtPage.Text.ToString())) * 200)/10; lbl1.Text = "<div style='background-color:#0066cc; width:" + page.ToString() + "px; height:22px'> </div>"; lblURL.Text = txtPage.Text + ""; lblTyle.Text = "(" + pr.MyPR(txtPage.Text.ToString()).ToString() + "/10)"; lblTB.Text = "Google page rank Website bạn check là " + (pr.MyPR(txtPage.Text.ToString())).ToString() + "/10 điểm"; txtPage.Text = "http://"; }
Cuối cùng là code quan trọng nhất đó là Class GooglePR, có sử dụng toolbarqueries.google.com được cung cấp bởi google
/// <summary> /// Summary description for GooglePR /// </summary> public class GooglePR { public GooglePR() { } private const UInt32 myConst = 0xE6359A60; private static void _Hashing(ref UInt32 a, ref UInt32 b, ref UInt32 c) { a -= b; a -= c; a ^= c >> 13; b -= c; b -= a; b ^= a << 8; c -= a; c -= b; c ^= b >> 13; a -= b; a -= c; a ^= c >> 12; b -= c; b -= a; b ^= a << 16; c -= a; c -= b; c ^= b >> 5; a -= b; a -= c; a ^= c >> 3; b -= c; b -= a; b ^= a << 10; c -= a; c -= b; c ^= b >> 15; } public static string PerfectHash(string theURL) { string url = string.Format("info:{0}", theURL); int length = url.Length; UInt32 a, b; UInt32 c = myConst; int k = 0; int len = length; a = b = 0x9E3779B9; while (len >= 12) { a += (UInt32)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24)); b += (UInt32)(url[k + 4] + (url[k + 5] << 8) + (url[k + 6] << 16) + (url[k + 7] << 24)); c += (UInt32)(url[k + 8] + (url[k + 9] << 8) + (url[k + 10] << 16) + (url[k + 11] << 24)); _Hashing(ref a, ref b, ref c); k += 12; len -= 12; } c += (UInt32)length; switch (len) { case 11: c += (UInt32)(url[k + 10] << 24); goto case 10; case 10: c += (UInt32)(url[k + 9] << 16); goto case 9; case 9: c += (UInt32)(url[k + 8] << 8); goto case 8; case 8: b += (UInt32)(url[k + 7] << 24); goto case 7; case 7: b += (UInt32)(url[k + 6] << 16); goto case 6; case 6: b += (UInt32)(url[k + 5] << 8); goto case 5; case 5: b += (UInt32)(url[k + 4]); goto case 4; case 4: a += (UInt32)(url[k + 3] << 24); goto case 3; case 3: a += (UInt32)(url[k + 2] << 16); goto case 2; case 2: a += (UInt32)(url[k + 1] << 8); goto case 1; case 1: a += (UInt32)(url[k + 0]); break; default: break; } _Hashing(ref a, ref b, ref c); return string.Format("6{0}", c); } public int MyPR(string myURL) { string strDomainHash = PerfectHash(myURL); string myRequestURL = string.Format("http://toolbarqueries.google.com/" + "search?client=navclient-auto&ch={0}&features=Rank&q=info:{1}", strDomainHash, myURL); try { HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(myRequestURL); string myResponse = new StreamReader( myRequest.GetResponse().GetResponseStream()).ReadToEnd(); if (myResponse.Length == 0) return 0; else return int.Parse(Regex.Match(myResponse, "Rank_1:[0-9]:([0-9]+)").Groups[1].Value); } catch (Exception) { return -1; } } }
Bạn cú ý add đủ các Class nhé:
using System.Collections.Generic;.
using System.Web;.
using System.Net;.
using System.IO;.
using System.Text.RegularExpressions;