原创作品,请勿转载,谢谢
这里还是利用了本人提供的Robber()类,如有不明请查看本人帖子
http://www.im286.com/viewthread.php?tid=1539095
添加引用,引入kClass(就是Robber类).导入命名空间clsRobber
声明:
protected Bitmap b;
一个user接收传入值,也就是用户名(这里提醒一点.可能有的人会无法正确处理中文字符)
中文处理解决办法:
修改Web.config
requestEncoding="gb2312"
responseEncoding="gb2312"
修改为:gb2312,就OK了...
开始截取首页在线列表:
在线列表地址如下:http://www.im286.com/index.php?showoldetails=yes#online
查看源文件后,列表块如下:
我们以<a name="online">开头,以</html>结尾就够了,不用那么精细..^^
然后判断用户是否在线:
判断传入的user值,在截取后的页面中的位置.位置如果==-1,就说明没有在其中,也就是不在线.
如果!=-1,不管等于多少,都说明在线.
如果在线,就声明 bmap=new Bitmap(Server.MapPath("online.jpg"));
如果不在线,就声明 bmap=new Bitmap(Server.MapPath("offline.jpg"));
保存图片:
声明一个MemoryStream对象,然后保存bmap到这个对象.
bmap.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
输出:
Response.ContentType="image/jpeg";
Response.BinaryWrite(ms.ToArray());
完成!
完整代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
try
{
string user=Request.QueryString["user"];
if(this.IsPostBack ||user==null)
return;
Robber r=new Robber("http://www.im286.com/index.php?showoldetails=yes#online");
r.Rob();
r.Cut("<tr class=\"header\">",2,"</html>",1);
bool online=r.Value.IndexOf(user)==-1?false:true;
if(online)
bmap=new Bitmap(Server.MapPath("online.jpg"));
else
bmap=new Bitmap(Server.MapPath("offline.jpg"));
MemoryStream ms=new MemoryStream();
bmap.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ContentType="image/jpeg";
Response.BinaryWrite(ms.ToArray());
ms.Close();
}
catch(Exception ea)
{
string eas=ea.Message;
}
finally
{
if(bmap!=null)
bmap.Dispose();
}
}
嗯,明白了吧.其实就是截取落伍首页的在线列表,然后判断其中是否有此人存在,由于论坛的统计不是实时更新,所以有一点点不准确.