原标题:淘宝地址爬取及UI展示
淘宝国家省市区街道获取 参考 foxiswho 的 taobao-area-php 部分代码,改由c#重构。 引用如下: https://akinix.github.io/Taobao-Area-CSharp/index.html 前端源码稍后上传,请关注 deepfunc 生成的release中包含省市区县.js和街道.json. 下载地址 为了方便获取中国大陆及港澳台省市区县街道相关数据,根据 淘宝地址js,解析并生成相关数据。 所有设置都在 克隆或下载代码,打开解决方案。 访问http://localhost:55516/ ,默认会进入Swagger页面。 核心逻辑说明: Autofac.Extensions.DependencyInjection:替换core的默认Ioc容器. MediatR:用于业务逻辑解耦. Swashbuckle.AspNetCore:生成Api的文档,供测试. HangFire:后台任务,处理爬取街道逻辑. Hangfire.MemoryStorage:只使用内存存储Hangfire任务 详细说明参见上面 设置 其内部主要维护整个逻辑执行过程中需要的数据淘宝地址爬取及UI展示
淘宝地址爬取及UI展示
演示
Release
目的
设置
appsettings.json
中
说明
默认值
TaobaoJsVersion
淘宝js的版本,方便淘宝js更新后修改
6.0.14
TaobaoAreaJsUrl
默认值中有占位符,会替换为TaobaoJsVersion的值
https://g.alicdn.com/vip/address/{0}/index-min.js
JsDirectoryName
生成的相关js及json文件的目录
js
JsTemplate
生成的js模版
见代码
AreaPickerDataJsName
生成的js文件名,默认值中有占位符,会替换为TaobaoJsVersion的值
area.picker.data.{0}.js
TaobaoStreetUrl
爬取街道使用的url
https://lsp.wuliu.taobao.com/locationservice/addr/output_address_town_array.do?l1={0}&l2={1}&l3={2}
TempDirectoryName
临时目录,下载淘宝js用
temp
使用
F5
或 Ctrl+F5
调试代码。
/api/v1/TaobaoAreas/ReBuild
,该逻辑会重新下载js及重新爬取街道信息;执行/api/v1/TaobaoAreas/Build
则会根据js是否存在来下载,根据json是否存在来爬取数据.
设计说明
概述
详细
TaobaoAreaSettings.cs
代码如下: public class TaobaoAreaSettings
{
public string TempDirectoryName { get; set; }
public string TaobaoJsVersion { get; set; }
public string TaobaoAreaJsUrl { get; set; }
public string JsTemplate { get; set; }
public string AreaPickerDataJsName { get; set; }
public string TaobaoStreetUrl { get; set; }
public string JsDirectoryName { get; set; }
}
AreaContextService
,代码片段如下,详情请查看github源码,该类注入为InstancePerLifetimeScope
,每次请求会创建一个新对象,注入相关代码查看AutofacModulesApplicationModule.cs
builder.Register(c => new AreaContextService())
.As<AreaContextService>()
.InstancePerLifetimeScope();
public bool IsForce { get; private set; } // 是否强制重新生成js及重新爬取街道数据
public Dictionary<string, object> MainDictionary { get; set; } // 主数据字典:最终生成js时需要的数据
public string ProvinceString { get; private set; }
public string GangAoString { get; private set; }
//... 拆分所需字段
builder.RegisterAssemblyTypes(typeof(IMediator).GetTypeInfo().Assembly)
.AsImplementedInterfaces();
// 注入IRequestHandler和INotificationHandler的相关实现
// Send -> RequestHandler
// Publish -> NotificationHandler
var mediatrOpenTypes = new[]
{
typeof(IRequestHandler<,>),
typeof(IRequestHandler<>),
typeof(INotificationHandler<>),
};
foreach (var mediatrOpenType in mediatrOpenTypes)
{
builder
.RegisterAssemblyTypes(typeof(MediatorModule).GetTypeInfo().Assembly)
.AsClosedTypesOf(mediatrOpenType)
.AsImplementedInterfaces();
}
// 参照官网
builder.Register<SingleInstanceFactory>(context =>
{
var componentContext = context.Resolve<IComponentContext>();
return t => { object o; return componentContext.TryResolve(t, out o) ? o : null; };
});
builder.Register<MultiInstanceFactory>(context =>
{
var componentContext = context.Resolve<IComponentContext>();
return t =>
{
var resolved = (IEnumerable<object>)componentContext.Resolve(typeof(IEnumerable<>).MakeGenericType(t));
return resolved;
};
});
builder.RegisterGeneric(typeof(LoggingBehavior<,>)).As(typeof(IPipelineBehavior<,>));
流程说明
当前文章:http://neomi.cn/bazihehun
发布时间:2019-02-16 01:05:39
人人玩棋牌 免费拖拉机扑克牌80分 迎丰棋牌网页版 仙缘之城1.1.2聚能石 2019年的游戏棋牌 大小单双预测神器 扑克王好假 牛总管ios官方下载 柏青哥手游下载 325棋牌捕鱼攻略
46493 53176 44830 80861 52358 9001430111 38951 90001
责任编辑:龙开