public class MoBlog
{
public MoBlog() { }
/// <summary>
/// 作者昵称
/// </summary>
public string NickName { get; set; }
/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }
/// <summary>
///该篇文字地址
/// </summary>
public string Url { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Des { get; set; }
/// <summary>
/// 头像图片地址
/// </summary>
public string HeadUrl { get; set; }
/// <summary>
/// 博客地址
/// </summary>
public string BlogUrl { get; set; }
/// <summary>
/// 点赞次数
/// </summary>
public int ZanNum { get; set; }
/// <summary>
/// 阅读次数
/// </summary>
public int ReadNum { get; set; }
/// <summary>
/// 评论次数
/// </summary>
public int CommiteNum { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
}
public interface IBlogsReposity
{
/// <summary>
/// 获取博客信息
/// </summary>
/// <param name="nTask"></param>
/// <returns></returns>
Task<IEnumerable<MoBlog>> GetBlogs(int nTask);
}
public class BoKeYuan : IBlogsReposity
{
public async Task<IEnumerable<MoBlog>> GetBlogs(int nTask)
{
var blogs = new List<MoBlog>();
try
{
//开启nTask个任务,读取前nTask页信息
Task<IEnumerable<MoBlog>>[] tasks = new Task<IEnumerable<MoBlog>>[nTask];
for (int i = 1; i <= tasks.Length; i++)
{
tasks[i - 1] = await Task.Factory.StartNew<Task<IEnumerable<MoBlog>>>((page) =>
{
return GetBlogsByPage(Convert.ToInt32(page));
}, i);
}
//30s等待
Task.WaitAll(tasks, TimeSpan.FromSeconds(30));
foreach (var item in tasks.Where(b => b.IsCompleted))
{
blogs.AddRange(item.Result);
}
}
catch (Exception ex)
{
}
return blogs.OrderByDescending(b => b.CreateTime);
}
/// <summary>
///
/// </summary>
/// <param name="nPage">页数</param>
/// <returns></returns>
async Task<IEnumerable<MoBlog>> GetBlogsByPage(int nPage)
{
var blogs = new List<MoBlog>();
try
{
var strBlogs = string.Empty;
using (HttpClient client = new HttpClient())
{
strBlogs = await client.GetStringAsync("http://www.cnblogs.com/sitehome/p/" + nPage);
}
if (string.IsNullOrWhiteSpace(strBlogs)) { return blogs; }
var matches = Regex.Matches(strBlogs, "diggnum\"[^>]+>(?<hzan>\\d+)[^:]+(?<burl>http[^\"]+)[^>]+>(?<title>[^<]+)<\\/a>[^=]+=[^=]+=\"(?<hurl>http://(\\w|\\.|\\/)+)[^>]+>[^\\/]+\\/\\/(?<hphoto>[^\"]+)[^<]+<\\/a>(?<bdes>[^<]+)[^\"]+[^=]+=[^>]+>(?<hname>[^<]+)[^2]+(?<bcreatetime>[^<]+)[^\\(]+\\((?<bcomment>\\d+)[^\\(]+\\((?<bread>\\d+)");
if (matches.Count <= 0) { return blogs; }
foreach (Match item in matches)
{
blogs.Add(new MoBlog
{
Title = item.Groups["title"].Value.Trim(),
NickName = item.Groups["hname"].Value.Trim(),
Des = item.Groups["bdes"].Value.Trim(),
ZanNum = Convert.ToInt32(item.Groups["hzan"].Value.Trim()),
ReadNum = Convert.ToInt32(item.Groups["bread"].Value.Trim()),
CommiteNum = Convert.ToInt32(item.Groups["bcomment"].Value.Trim()),
CreateTime = Convert.ToDateTime(item.Groups["bcreatetime"].Value.Trim()),
HeadUrl = "http://" + item.Groups["hphoto"].Value.Trim(),
BlogUrl = item.Groups["hurl"].Value.Trim(),
Url = item.Groups["burl"].Value.Trim(),
});
}
}
catch (Exception ex)
{
}
return blogs;
}
}
// GET api/values
public async Task<IEnumerable<MoBlog>> Get(int task = 6)
{
task = task <= 0 ? 6 : task;
task = task > 50 ? 50 : task;
IBlogsReposity _reposity = new BoKeYuan();
return await _reposity.GetBlogs(task);
}
/// <summary>
/// 解析
/// </summary>
public class NinjectResolverScope : IDependencyScope
{
private IResolutionRoot root;
public NinjectResolverScope() { }
public NinjectResolverScope(IResolutionRoot root)
{
this.root = root;
}
public object GetService(Type serviceType)
{
try
{
return root.TryGet(serviceType);
}
catch (Exception ex)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return this.root.GetAll(serviceType);
}
catch (Exception ex)
{
return new List<object>();
}
}
public void Dispose()
{
var disposable = this.root as IDisposable;
if (disposable != null)
disposable.Dispose();
this.root = null;
}
}
public class NinjectResolverContainer : NinjectResolverScope, IDependencyResolver
{
private IKernel kernel;
public static NinjectResolverContainer Current
{
get
{
var container = new NinjectResolverContainer();
//初始化
container.Initing();
//绑定
container.Binding();
return container;
}
}
/// <summary>
/// 初始化kernel
/// </summary>
void Initing()
{
kernel = new StandardKernel();
}
/// <summary>
/// 绑定
/// </summary>
void Binding()
{
kernel.Bind<IBlogsReposity>().To<BoKeYuan>();
}
/// <summary>
/// 开始执行
/// </summary>
/// <returns></returns>
public IDependencyScope BeginScope()
{
return new NinjectResolverScope(this.kernel.BeginBlock());
}
}
private readonly IBlogsReposity _reposity
public ValuesController(IBlogsReposity reposity)
{
_reposity = reposity;
}
// GET api/values
public async Task<IEnumerable<MoBlog>> Get(int task = 6)
{
task = task <= 0 ? 6 : task;
task = task > 50 ? 50 : task;
return await _reposity.GetBlogs(task);
}
//Ninject ioc config.DependencyResolver = NinjectResolverContainer.Current;
public class UnityResolverContainer : IDependencyResolver
{
private IUnityContainer _container;
public UnityResolverContainer(IUnityContainer container)
{
this._container = container;
}
public IDependencyScope BeginScope()
{
var scopeContainer = this._container.CreateChildContainer();
return new UnityResolverContainer(scopeContainer);
}
/// <summary>
/// 获取对应类型的实例,注意try...catch...不能够少
/// </summary>
/// <param name="serviceType"></param>
/// <returns></returns>
public object GetService(Type serviceType)
{
try
{
//if (!this._container.IsRegistered(serviceType)) { return null; }
return this._container.Resolve(serviceType);
}
catch
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return this._container.ResolveAll(serviceType);
}
catch
{
return new List<object>();
}
}
public void Dispose()
{
if (_container != null)
{
this._container.Dispose();
this._container = null;
}
}
}
//Unity ioc UnityConfig.RegisterComponents();
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<IBlogsReposity, BoKeYuan>();
// var lifeTimeOption = new ContainerControlledLifetimeManager();
//container.RegisterInstance<IBlogsReposity>(new BoKeYuan(), lifeTimeOption);
GlobalConfiguration.Configuration.DependencyResolver = new UnityResolverContainer(container);
}
}
public class ValuesController : ApiController
{
private readonly IBlogsReposity _reposity;
public ValuesController(IBlogsReposity reposity)
{
_reposity = reposity;
}
// GET api/values
public async Task<IEnumerable<MoBlog>> Get(int task = 6)
{
task = task <= 0 ? 6 : task;
task = task > 50 ? 50 : task;
return await _reposity.GetBlogs(task);
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有