您的位置:首页 > 编程语言

通过编程自动化增加CSDN博客的访问量

2012-09-05 12:01 309 查看
前段时间经过观察,我发现,和大多数的博客一样,CSDN在每篇博客文章的上方,都有一个阅读量。这个阅读量的增加,是通过Web用户在浏览器端输入这篇文章的url地址,然后发送请求到服务器端,这时,阅读量就会加1,跟访问者是否登录没有关系。但是需要注意的是,前后的两次请求不能是同一个Session,也就是说,需要重新启动一个浏览器窗口。还有就是,前后两次请求不能间隔时间太短,否则无法刷访问量。

我们可以写一个控制台程序,然后每隔几秒钟就启动一个线程,这个线程的作用,就是启动浏览器访问指定页面,然后Sleep一段时间后,关闭浏览器。一段时间后,在开启浏览器,如此重复,直到刷出指定的次数。

static void Main(string[] args)
{

for (int i = 0; i < 1000; i++)
{
Util util = new Util();
util.StartThread();
Thread.Sleep(90000);
util.Close();
}
}

public class Util
{
public void StartThread()
{
ThreadStart start = new ThreadStart(StartIE);
Thread thread = new Thread(start);
thread.Start();

}

private void StartIE()
{
Process.Start("http://blog.csdn.net/sundacheng1989/article/details/7645498");
}

public void Close()
{
System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcesses();

foreach (System.Diagnostics.Process myProcess in myProcesses)
{
if (myProcess.ProcessName.ToUpper() == "IEXPLORE")
{
myProcess.Kill();
}
}
}
}


2015年11月更新:

上边的那些代码是刚刚接触C#的时候写的,对于很多地方还不是很明白,所以很乱。最近有时间了,又重写了一下这方面的东西。其实原理很简单,就是CSDN对于某篇文章的访问量的计数原则很简单,就是有人访问了这个页面,页面的访问量就加1.

基于此,使用ASP.NET Web API的HttpClient重写了这个工具。涉及到了一些多线程以及异步同步的基础。相关代码如下

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace VisitAmountIncreaser
{
class Program
{
static void Main()
{
Console.WriteLine("The application is staring!");
//string url = Console.ReadLine();
string url = "http://blog.csdn.net";
int threadAcount = 2;
StartTask(url);
string command = Console.ReadLine();
if (string.CompareOrdinal(command, "X") == 0)
{
Console.WriteLine("Application will quit after 30 seconds!");
Thread.Sleep(30000);
}
}

static async void StartTask(string url)
{
while (true)
{
await RunVisit(url);
}
}

static async Task RunVisit(string url)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));

try
{
HttpResponseMessage response = await client.GetAsync("sundacheng1989/article/details/7945542");
response.EnsureSuccessStatusCode(); // Throw if not a success code.

string content = await response.Content.ReadAsStringAsync();

string result = GetStringInBetween(content, "<span class=\"link_view\" title=\"阅读次数\">", "</span>");
Console.WriteLine(result);
}
catch (HttpRequestException e)
{
Console.WriteLine(e.Message);
}
}
}

public static string GetStringInBetween(string strSource, string strStart, string strEnd)
{
if (strSource.Contains(strStart) && strSource.Contains(strEnd))
{
int Start = strSource.IndexOf(strStart, 0, System.StringComparison.Ordinal) + strStart.Length;
int End = strSource.IndexOf(strEnd, Start, System.StringComparison.Ordinal);
return strSource.Substring(Start, End - Start);
}
else
{
return "";
}
}
}
}


其实,当运行这个console程序时候,我们可以把这个exe复制多个,然后同时运行,那么就是多个进程同时干这件事了。在本机测试后,这段代码运行没有问题。
代码已经打包,下载地址:http://files.cnblogs.com/files/Robin-Sun/VisitAmountIncreaser.zip

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: