Wpis z mikrobloga

Zna ktoś przykład aplikacji w c# lub np. #java, która jest rodzajem bota, który automatyzuje różne czynności na stronie internetowej przy użyciu requestów? Właśnie piszę coś takiego. Przydają mi się biblioteki typu RestSharp, JSON.NET, ale problem mam z poprawną architekturą projektu.

Strona, na której automatyzuję pracę posiada api do wielu czynności, ale często jest to tak, że aby wykonać jakąś rzecz, muszę wysłać posta na adres X, w odpowiedzi dostaję jakieś dane, które muszę wysłać dalej na adres Y, potem jeszcze na adres Z itd. Robi się z tego łańcuch. Muszę uwzględnić to, że przy odpowiedzi mogę dostać nie to, co chciałbym dostać, bo np. coś się zmieniło na stronie i teraz przy każdym requescie wymagany jest np. token, przez co requesty nie są poprawnie uznawane.

Zazwyczaj wygląda to u mnie tak: (wersja pastebin)
public void Login(string email, string password)
{
var tokenContent = dataProvider.GetTokenContent();
var tokenResponse = SendRequest(GameUrl.InitializeRequest, tokenContent, Method.POST);
var parsedTokenResponse = responseParser.ParseToken(tokenResponse);
if (parsedTokenResponse.RequestFailed)
throw new LoginFailedException("Request failed when getting token");
if (parsedTokenResponse.ParseFailed)
throw new ParseFailedException("Token parsing failed");

var loginContent = dataProvider.GetLoginContent(parsedTokenResponse.Token, email, password);
var loginResponse = SendRequest(GameUrl.Login, loginContent, Method.POST);
var parsedLoginResponse = responseParser.ParseLogin(loginResponse);
if (parsedLoginResponse.RequestFailed)
throw new LoginFailedException("Request failed when submitting login content");
if (parsedLoginResponse.SubmitFailed)
throw new IncorrectContentException("Login failed because of wrong input data");

Logged = true;
}

Właśnie się zorientowałem, że przecież chyba lepiej zrobić coś takiego (wersja pastebin)
private string GetToken()
{
var tokenContent = dataProvider.GetTokenContent();
var tokenResponse = SendRequest(GameUrl.InitializeRequest, tokenContent, Method.POST);
var parsedTokenResponse = responseParser.ParseToken(tokenResponse);
if (parsedTokenResponse.RequestFailed)
throw new LoginFailedException("Request failed when getting token");
if (parsedTokenResponse.ParseFailed)
throw new ParseFailedException("Token parsing failed");

return parsedTokenResponse.Token;
}

public void Login(string email, string password)
{
var token = GetToken();

var loginContent = dataProvider.GetLoginContent(token, email, password);
var loginResponse = SendRequest(GameUrl.Login, loginContent, Method.POST);
var parsedLoginResponse = responseParser.ParseLogin(loginResponse);
if (parsedLoginResponse.RequestFailed)
throw new LoginFailedException("Request failed when submitting login content");
if (parsedLoginResponse.SubmitFailed)
throw new IncorrectContentException("Login failed because of wrong input data");

Logged = true;
}

Co myślicie o czymś takim? Macie jakieś swoje propozycje? Szukałem jakiś botów na githubie, ale ciężko o coś takiego :/

#programowanie #programista15k #naukaprogramowania #dotnet #csharp
  • 5