目标:通过C#对API的内容(Json)进行提取,如下面这样的信息
api:https://api.wzjbbus.com/intf/app/station/30/1
一、首先需要添加一个类,用于获取目标的json,用的HttpWebRequest和HttpWebResponse
如下
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.IO;using System.Net.Security;using System.Security.Authentication;using System.Security.Cryptography.X509Certificates; namespace DataEnterStatService{ public class HttpUitls { public static bool Cheack(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } /// <summary> /// 通过HTTP协议获取网点的Jsion返回 /// </summary> /// <param name="Url"></param> /// <returns></returns> public static string Get(string Url) { try { //安全协议(如果服务器使用了安全协议,客户端就要加上这个) ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | (SecurityProtocolType)0x300 | (SecurityProtocolType)0xC00; //Tls12 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(Cheack); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Proxy = null; request.KeepAlive = false; request.Method = "GET"; request.ContentType = "application/json; charset=UTF-8"; request.AutomaticDecompression = DecompressionMethods.GZip; //获取api的返回 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8); string retString = myStreamReader.ReadToEnd(); //关闭非托管流和资源 myStreamReader.Close(); myResponseStream.Close(); if (response != null) response.Close(); if (request != null) request.Abort(); return retString; } catch (Exception ex) { //记录日志 获取接口异常:ex return ""; } } public static string Post(string Url, string Data, string Referer) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Method = "POST"; request.Referer = Referer; byte[] bytes = Encoding.UTF8.GetBytes(Data); request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = bytes.Length; Stream myResponseStream = request.GetRequestStream(); myResponseStream.Write(bytes, 0, bytes.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } return retString; } }}
二、返回的Json需要一个列表容器装载(结构体),这里推荐一个网站,可以把json转结构体
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace DataEnterStatService{ public class StationListItem { public string ChangeDate { get; set; } public List<DataItem> list { get; set; } } public class DataItem { /// <summary> /// /// </summary> public string Id { get; set; } /// <summary> /// /// </summary> public string GprsId { get; set; } /// <summary> /// /// </summary> public string Direction { get; set; } /// <summary> /// /// </summary> public string OrderNo { get; set; } /// <summary> /// /// </summary> public string Name { get; set; } /// <summary> /// /// </summary> public string Lng { get; set; } /// <summary> /// /// </summary> public string Lat { get; set; } /// <summary> /// /// </summary> public string ByFisrtDist { get; set; } } }
三,代码实现部分(函数方法)
ps:这里需要用到json库Newtonsoft.Json
public void UpdateStationInfo() { try { DataTable dt = GetLine_StationInfo(); for (int i = 0; i < dt.Rows.Count; i++) { string lineid = dt.Rows[i]["LINEID"].ToString(); string direction = dt.Rows[i]["DIRECTIONTYPE"].ToString(); string updateDay = dt.Rows[i]["UPDATE_DAY"].ToString(); //1.URL拼接 string url = @"https://api.wzjbbus.com/intf/app/station/" + lineid + @"/" + direction; //2.通过接口url,获取接口返回信息 string getJson = HttpUitls.Get(url); //3.检查是否更新:1.为空的就是没有这线路,需要更新;2.日期一致,不需要更新 if (updateDay != "" && getJson.Replace("-", "").Contains(updateDay.Substring(0, 8))) continue; //4.检查是否获取站点信息成功 StationListItem StationList = JsonConvert.DeserializeObject<StationListItem>(getJson); if (StationList.list.Count == 0) { LogFiles.WriteLog("获取线路信息为空,请确认接口是否存在站点信息。线路号:" + lineid + " " + (direction == "0" ? "上行(0)" : "下行(1)") + " URL:" + url, "DayStat"); continue; } //5.站点信息入库 if(InsertLine_StationInfo(StationList)) LogFiles.WriteLog("线路号:" + lineid + " " + (direction == "0" ? "上行(0)" : "下行(1)") + ",站点信息入库更新完成", "DayStat"); } } catch (Exception ex) { LogFiles.WriteLog("更新站点信息异常:" + ex.ToString(), "DayStat"); } }
原网址: 访问
创建于: 2023-06-15 17:10:57
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
最新评论