需要从 URL 中读取流,更改 URI 中的 "page" 属性直到它成为 returns "No records found" 字符串
Need to read a stream from a URL, changing a "page" attribute in URI until it returns "No records found" string
我有一个 C# .NET Core 控制台应用程序,我正在致力于从 URL-RPC 网关获取数据。我可以检索数据并将其写入一个文件就好了——只是在开始逻辑上遇到了一些麻烦,以增加我调用的 URI 中的 "page number" 属性,直到它 returns 没有更多数据和字符串 "No records found." 每个 "page" 数据大约有 200 条记录,因此我需要增加 URL 中的页码,直到 returns 该字符串。
这是我的基本代码(这包括用于验证调试目的的控制台写入行,稍后我还有其他方法可以将数据写入文件。)
string rpcURL;
rpcURL = "https://api.myWebsite.com/urlrpc?method=getPlacementReport&username=" + userName + "&password=" + passWord + "&class_code=" + classCode + "&from_date=" + startDate + "&to_date=" + endDate + "&page_num=1";
Console.WriteLine(rpcURL);
WebClient client = new WebClient();
client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0)";
var stream = client.OpenRead(rpcURL);
StreamReader sr = new StreamReader(stream);
string s = sr.ReadToEnd();
Console.WriteLine(s);
我知道我需要创建一个变量来递增结束 "page_num=NUMBER" 部分——但我需要将其递增 +1,直到流 reader 完全读取 "No records found"。
关于优雅的方法有什么建议吗?我知道 基本上 我需要做一个带有递增 +1 计数器的 if/then 语句,但仅此而已。
您应该可以通过简单的 while
循环来完成此操作。假设 StreamReader
预计 return 确切的字符串 No records found
,您可以使用类似于以下内容的内容。
WebClient client = new WebClient();
client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0)";
string rpcURL;
string s = '';
int page = 0;
while (s != 'No records found') {
rpcURL = "https://api.myWebsite.com/urlrpc?method=getPlacementReport&username=" + userName + "&password=" + passWord + "&class_code=" + classCode + "&from_date=" + startDate + "&to_date=" + endDate + "&page_num=" + page;
Console.WriteLine(rpcURL);
using(var stream = client.OpenRead(rpcURL)) // both Stream and StreamReader
using(var sr = new StreamReader(stream)) // need to be disposed.
{
s = sr.ReadToEnd();
Console.WriteLine(s);
}
page++;
}
我有一个 C# .NET Core 控制台应用程序,我正在致力于从 URL-RPC 网关获取数据。我可以检索数据并将其写入一个文件就好了——只是在开始逻辑上遇到了一些麻烦,以增加我调用的 URI 中的 "page number" 属性,直到它 returns 没有更多数据和字符串 "No records found." 每个 "page" 数据大约有 200 条记录,因此我需要增加 URL 中的页码,直到 returns 该字符串。
这是我的基本代码(这包括用于验证调试目的的控制台写入行,稍后我还有其他方法可以将数据写入文件。)
string rpcURL;
rpcURL = "https://api.myWebsite.com/urlrpc?method=getPlacementReport&username=" + userName + "&password=" + passWord + "&class_code=" + classCode + "&from_date=" + startDate + "&to_date=" + endDate + "&page_num=1";
Console.WriteLine(rpcURL);
WebClient client = new WebClient();
client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0)";
var stream = client.OpenRead(rpcURL);
StreamReader sr = new StreamReader(stream);
string s = sr.ReadToEnd();
Console.WriteLine(s);
我知道我需要创建一个变量来递增结束 "page_num=NUMBER" 部分——但我需要将其递增 +1,直到流 reader 完全读取 "No records found"。
关于优雅的方法有什么建议吗?我知道 基本上 我需要做一个带有递增 +1 计数器的 if/then 语句,但仅此而已。
您应该可以通过简单的 while
循环来完成此操作。假设 StreamReader
预计 return 确切的字符串 No records found
,您可以使用类似于以下内容的内容。
WebClient client = new WebClient();
client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0)";
string rpcURL;
string s = '';
int page = 0;
while (s != 'No records found') {
rpcURL = "https://api.myWebsite.com/urlrpc?method=getPlacementReport&username=" + userName + "&password=" + passWord + "&class_code=" + classCode + "&from_date=" + startDate + "&to_date=" + endDate + "&page_num=" + page;
Console.WriteLine(rpcURL);
using(var stream = client.OpenRead(rpcURL)) // both Stream and StreamReader
using(var sr = new StreamReader(stream)) // need to be disposed.
{
s = sr.ReadToEnd();
Console.WriteLine(s);
}
page++;
}