Asp .NetCore 二维码应用实例

文章来源

功能:从其他网站爬下Table资料,将资料转成二维码

步骤:
  1. 新建NetCore Web应用程序(带模型 视图 控制器)
    二维码组件:
Install-Package QRCoder
  1. 修改Home/Index方法(爬数据,加工数据)
public async Task<IActionResult> Index()
{
    //正则获取Table
    string regExp = @"<table.*?>[\s\S]*?<\/table>";
    Match match;
    XmlDocument xmlDocument = new XmlDocument();
    //1,发起请求获取资源
    var request = new HttpRequestMessage(HttpMethod.Get,"https://www.youneed.win/free-ss");
    var client = _clientFactory.CreateClient();
    var response = await client.SendAsync(request);
    if (response.IsSuccessStatusCode)
    {
        //资源td列顺序对照:IP 端口 密码 加密方式 资源更新时间 资源节点==>SS://base64(加密方式:密码@IP:端口 
        var result = await response.Content.ReadAsStringAsync();
        match = Regex.Match(result, regExp);
        //2,匹配成功,开始获取资源
        if (match.Success)
        {
            //对table标签做XML加载,以XML方式去节点信息
            xmlDocument.LoadXml($@"<xml>{match.Value}</xml>");
            XmlNodeList thNodeList = xmlDocument.SelectNodes("//table/thead/tr/th");
            //2.1 获取标题
            sSTableObj.TbHeader = new List<string>();
            sSTableObj.SSObj = new List<SSObj>();
            foreach (XmlNode xmlNode in thNodeList)
            {
                sSTableObj.TbHeader.Add(xmlNode.InnerText);
            }
            //2.2 获取资源
            XmlNodeList trNodeList = xmlDocument.SelectNodes("//table/tbody/tr");
            foreach (XmlNode node in trNodeList)
            {
                //tdNodeList = node.SelectNodes("td");
                sSObjs.Add(new SSObj()
                {
                    Region = node.SelectSingleNode("td[6]").InnerText,
                    UpdateTime = node.SelectSingleNode("td[5]").InnerText,
                    EnType = node.SelectSingleNode("td[4]").InnerText,
                    Password = node.SelectSingleNode("td[3]").InnerText,
                    IP = node.SelectSingleNode("td[1]").InnerText,
                    Port = node.SelectSingleNode("td[2]").InnerText
                });
            }
            sSObjs = sSObjs.OrderBy(x => x.Region).ToList();
            //2.3 资源转为ss url地址
            sSObjs.ForEach((e) =>
            {
                string ssurl = @"ss://" + Convert.ToBase64String(Encoding.Default.GetBytes($"{e.EnType}:{e.Password}@{e.IP}:{e.Port}"));
                //ssUrls.Add(ssurl);
                QRCodeData qrCodeData = qrGenerator.CreateQrCode(ssurl,QRCodeGenerator.ECCLevel.Q);
                QRCode qrCode = new QRCode(qrCodeData);
                Bitmap qrCodeImage = qrCode.GetGraphic(20);
                e.QrCode = BitmapToBytes(qrCodeImage);
                e.SsUrl = ssurl;
            });
        }
        //3,只提取日本与台湾地区的资源
        return View(new SSTableObj() { TbHeader = sSTableObj.TbHeader, SSObj = sSObjs.Where(x => x.Region == "TW" || x.Region == "JP").OrderByDescending(x=>x.Region).ToList() });
    }
    else
    {
        return View();
    }                
}
  1. Index页面
@{
    ViewData["Title"] = "Home Page";
}
@model SSTableObj
<style>
    table tr td img {
        width: 100px;
    }
</style>
<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <table class="table table-striped ">
        <thead class="thead-dark">
            <tr>
                @foreach (string item in Model.TbHeader)
                {
                    <th>@item</th>
                }
                <th>二维码</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.SSObj)
            {
            <tr>
                <td class="align-middle">@item.IP</td>
                <td class="align-middle">@item.Port</td>
                <td class="align-middle">@item.Password</td>
                <td class="align-middle">@item.EnType</td>
                <td class="align-middle">@item.UpdateTime</td>
                <td class="align-middle">@item.Region</td>
                <td class="align-middle"><img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(@item.QrCode))" /></td>
                @*<td>@item.SsUrl</td>*@
            </tr>
            }
        </tbody>
    </table>
</div>
  1. 效果
    在这里插入图片描述
  2. 完整代码下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值