public async Task <IResult <List <BoardItem> > > GetUserBoards(string Username = "") { if (Username == "") { Username = _user.UserName; } var builder = new UriBuilder("https://www.pinterest.com/" + PinApiConstants.RESOURCE_GET_BOARDS); builder.Port = -1; var query = HttpUtility.ParseQueryString(builder.Query); query["source_url"] = ""; query["data"] = "{\"options\":{\"username\":\"" + Username + "\",\"field_set_key\":\"detailed\"},\"context\":{}}"; builder.Query = query.ToString(); string url = builder.ToString(); var request = _httpHelper.GetDefaultRequest(HttpMethod.Get, new Uri(url)); var cookies = _httpRequestProcessor.HttpHandler.CookieContainer.GetCookies(_httpRequestProcessor.Client.BaseAddress); _httpHelper.AssginDefaultHeaders(ref request, cookies[PinApiConstants.CSRFTOKEN]?.Value); var response = await _httpRequestProcessor.GetAsync(new Uri(url)); var json = JObject.Parse(await response.Content.ReadAsStringAsync()); var popupJson = json["resource_response"]["data"].ToString(); return(Result.Success(JsonConvert.DeserializeObject <List <BoardItem> >(popupJson))); }
public static async Task <string> GetDefaultHtmlText(string url, IHttpRequestProcessor httpRequestProcessor) { var uri = new Uri(url); var request = HttpHelper.GetDefaultRequest(HttpMethod.Get, uri); var response = await httpRequestProcessor.GetAsync(uri); var html = await response.Content.ReadAsStringAsync(); if (response.StatusCode != HttpStatusCode.OK) { return(null); } return(html); }
public async Task <IResult <List <DocBusca> > > PesquisarArtistasAsync(string q, int limit = 10) { try { var url = string.Format(VagalumeApiConstants.API_BUSCAR_ARTISTA_URL, q, limit); var uri = new Uri(url); var request = HttpHelper.GetDefaultRequest(HttpMethod.Get, uri); var response = await _httpRequestProcessor.GetAsync(uri); var json = await response.Content.ReadAsStringAsync(); if (response.StatusCode != HttpStatusCode.OK) { return(Result.UnExpectedResponse <List <DocBusca> >(response, json)); } var result = JsonConvert.DeserializeObject <BuscaDataWrapper>(json); return(Result.Success(result.Response.Docs)); } catch (Exception ex) { return(Result.Fail <List <DocBusca> >(ex.Message)); } }
public async Task <IResult <LetraMusica> > GetLetraMusica(string artista, string musica) { try { var url = string.Format(VagalumeApiConstants.API_LETRA_MUSICA_URL, artista, musica); var uri = new Uri(url); var request = HttpHelper.GetDefaultRequest(HttpMethod.Get, uri); var response = await _httpRequestProcessor.GetAsync(uri); var json = await response.Content.ReadAsStringAsync(); if (response.StatusCode != HttpStatusCode.OK) { return(Result.UnExpectedResponse <LetraMusica>(response, json)); } var result = JsonConvert.DeserializeObject <LetraMusica>(json); return(Result.Success(result)); } catch (Exception ex) { return(Result.Fail <LetraMusica>(ex.Message)); } }
/// <summary> /// Login using given credentials asynchronously /// </summary> /// <returns> /// Success --> is succeed /// TwoFactorRequired --> requires 2FA login. /// BadPassword --> Password is wrong /// InvalidUser --> User/phone number is wrong /// Exception --> Something wrong happened /// </returns> public async Task <IResult <InstaLoginResult> > LoginAsync() { ValidateUser(); ValidateRequestMessage(); try { var firstResponse = await _httpRequestProcessor.GetAsync(_httpRequestProcessor.Client.BaseAddress); var cookies = _httpRequestProcessor.HttpHandler.CookieContainer.GetCookies(_httpRequestProcessor.Client .BaseAddress); _logger?.LogResponse(firstResponse); var csrftoken = cookies[InstaApiConstants.CSRFTOKEN]?.Value ?? String.Empty; _user.CsrfToken = csrftoken; var instaUri = UriCreator.GetLoginUri(); var signature = $"{_httpRequestProcessor.RequestMessage.GenerateSignature(InstaApiConstants.IG_SIGNATURE_KEY)}.{_httpRequestProcessor.RequestMessage.GetMessageString()}"; var fields = new Dictionary <string, string> { { InstaApiConstants.HEADER_IG_SIGNATURE, signature }, { InstaApiConstants.HEADER_IG_SIGNATURE_KEY_VERSION, InstaApiConstants.IG_SIGNATURE_KEY_VERSION } }; var request = HttpHelper.GetDefaultRequest(HttpMethod.Post, instaUri, _deviceInfo); request.Content = new FormUrlEncodedContent(fields); request.Properties.Add(InstaApiConstants.HEADER_IG_SIGNATURE, signature); request.Properties.Add(InstaApiConstants.HEADER_IG_SIGNATURE_KEY_VERSION, InstaApiConstants.IG_SIGNATURE_KEY_VERSION); var response = await _httpRequestProcessor.SendAsync(request); var json = await response.Content.ReadAsStringAsync(); if (response.StatusCode != HttpStatusCode.OK) //If the password is correct BUT 2-Factor Authentication is enabled, it will still get a 400 error (bad request) { //Then check it var loginFailReason = JsonConvert.DeserializeObject <InstaLoginBaseResponse>(json); if (loginFailReason.InvalidCredentials) { return(Result.Fail("Invalid Credentials", loginFailReason.ErrorType == "bad_password" ? InstaLoginResult.BadPassword : InstaLoginResult.InvalidUser)); } if (loginFailReason.TwoFactorRequired) { _twoFactorInfo = loginFailReason.TwoFactorLoginInfo; //2FA is required! return(Result.Fail("Two Factor Authentication is required", InstaLoginResult.TwoFactorRequired)); } return(Result.UnExpectedResponse <InstaLoginResult>(response, json)); } var loginInfo = JsonConvert.DeserializeObject <InstaLoginResponse>(json); IsUserAuthenticated = loginInfo.User?.UserName.ToLower() == _user.UserName.ToLower(); var converter = ConvertersFabric.Instance.GetUserShortConverter(loginInfo.User); _user.LoggedInUder = converter.Convert(); _user.RankToken = $"{_user.LoggedInUder.Pk}_{_httpRequestProcessor.RequestMessage.phone_id}"; return(Result.Success(InstaLoginResult.Success)); } catch (Exception exception) { LogException(exception); return(Result.Fail(exception, InstaLoginResult.Exception)); } finally { InvalidateProcessors(); } }