Необходимо прочитать поток с URL, изменяя атрибут «page» в URI, пока он не вернет строку «Записи не найдены» - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть C#. NET Базовое консольное приложение, над которым я работаю для извлечения данных из шлюза URL-RP C. Я могу получить данные и записать их в файл просто отлично - просто возникли проблемы даже с началом работы в logi c для увеличения атрибута «номер страницы» в URI, против которого я вызываю, до тех пор, пока он не вернет больше данных и строка «Записи не найдены». Каждая «страница» данных содержит около 200 записей, поэтому мне нужно увеличивать номер страницы в URL-адресе, пока он не вернет эту строку.

Вот мой базовый код c (сюда входит строка записи на консоли чтобы проверить в целях отладки, у меня есть другие методы, чтобы позже записать данные в файл.)

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 ДО ТОГО, как читатель потока прочитает «Записи не найдены» ТОЧНО.

Есть предложения по элегантному способу сделать это? Я знаю, что в основном Мне нужно сделать оператор if / then с приращением +1, но это все.

1 Ответ

0 голосов
/ 12 февраля 2020

Вы должны быть в состоянии выполнить sh это простым while l oop. Предполагая, что StreamReader, как ожидается, вернет точную строку 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++;
}

...